MySQL用while實現for迴圈巢狀(插入學生成績資訊功能)
本次實驗的目的在於實現mysql中自動插入學生成績資訊,即給每個學生自動插入1~6號課程的成績,
屬性如下:
學生學號(i):1~23
課程號(j):1~6
成績:用rand()函式來實現自動填成績
此功能在java中用兩個for迴圈巢狀即可,程式碼如下:
for(int i=0;i<22;i++){
for(int j=0;j<6;j++){
//此處為jdbc操作插入的語句
//也可以用hibernate插入
}
}
用儲存過程會有一點for迴圈的影子,但是要注意對於課程號(j)的迴圈結束後要使j重新初始化到1,這樣才能繼續下次對j的迴圈,否則下次直接跳過對j的while迴圈,mysql中sql程式碼如下:
delimiter $ #以delimiter來標記用$表示儲存過程結束 create procedure pro() begin declare i int; #定義i變數 declare j int; #定義j變數 set i=1; set j=1; while(i<=23) do #對學號的迴圈 while(j<=6) do #對課程號的迴圈 insert into scores(sid,cid,score) values(i,j,rand()*100); set j=j+1; end while; set i=i+1; set j=1; #重新給j賦值為1,讓它下次繼續從j=1開始進行立面的while迴圈 #如果不給重新賦值為1,則對j的while迴圈只能進行一次 end while; end $ #儲存過程結束
call pro(); #呼叫pro()儲存方法
這樣插入的結果如下:
id i jscore---------------------
11
171
21272
31348
41424
51577
61614
72137
82242
9231
102476
112580
122670
133110
143239
153366
163413
173569
18363
194110
204242
214378
224463
234580
244613
255125
265287
275359
285434
295593
305663
316135
326285
336323
346460
356528
366662
377126
387243
397339
407466
417512
427662
438176
448292
458333
468487
478537
488625
499113
509290
519310
529482
539579
549648
551015
5610282
5710395
5810427
5910550
6010671
611115
6211211
6311340
6411469
6511523
661169
6712177
6812255
6912346
7012465
7112586
7212636
7313121
7413299
7513331
7613460
771355
7813647
7914118
8014250
8114395
8214424
8314535
841463
8515113
8615253
8715326
8815470
8915574
9015659
9116172
9216282
9316395
9416428
9516557
96166100
9717129
9817243
9917331
10017
424
10117
530
10217
675
10318
185
10418
299
10518
342
10618
413
10718
539
10818
654
10919
153
11019
26
11119
369
11219
427
11319
527
11419
657
11520
12
11620
239
11720
391
11820
435
11920
55
12020
617
12121
171
12221
26
12321
316
12421
462
12521
563
12621
628
12722
151
12822
270
12922
396
13022
473
13122
575
13222
658
13323
166
13423
255
13523
376
13623
417
13723
555
13823
624