OSDN Git Service

fa1275fe053f783b842c4f252145a699c60b95e6
[ring-lang-081/ring.git] / docs / build / html / _sources / mysql.txt
1 .. index:: 
2         single: MySQL 関数; はじめに
3
4 ==========
5 MySQL 関数
6 ==========
7
8 MySQL 関数の用法を学びます。
9
10 * MySQL_Info()
11 * MySQL_Init()
12 * MySQL_Error()
13 * MySQL_Connect()
14 * MySQL_Close()
15 * MySQL_Query()
16 * MySQL_Insert_ID()
17 * MySQL_Result()
18 * MySQL_Next_Result()
19 * MySQL_Columns()
20 * MySQL_Result2()
21 * MySQL_Escape_String()
22 * MySQL_AutoCommit()
23 * MySQL_Commit()
24 * MySQL_Rollback()
25
26 この関数の使用前に mysqllib.ring ライブラリを読み込みます。
27
28 .. code-block:: ring
29
30         load "mysqllib.ring"
31         # MySQL 関数の使用
32
33 .. index:: 
34         pair: MySQL 関数; MySQL_Info()
35
36 MySQL_Info() 関数
37 =================
38
39 MySQL_Info() 関数は MySQL クライアントのバージョンを取得します。
40
41 文法:
42
43 .. code-block:: ring
44
45         MySQL_Info() ---> MySQL のバージョン文字列
46
47 用例:
48
49 .. code-block:: ring
50
51         see "MySQL Client Version : " + mysql_info()
52
53 実行結果:
54
55 .. code-block:: ring
56
57         MySQL Client Version : 6.1.5
58
59 .. index:: 
60         pair: MySQL 関数; MySQL_Init()
61
62 MySQL_Init() 関数
63 =====================
64
65 MySQL_Init() 関数により MySQL クライアントを使用します。
66
67 文法:
68
69 .. code-block:: ring
70
71         MySQL_Init() ---> MySQL ハンドル
72
73 .. index:: 
74         pair: MySQL 関数; MySQL_Error()
75
76 MySQL_Error() 関数
77 ======================
78
79 MySQL_Error() 関数は MySQL クライアントからエラーメッセージを取得します。
80
81 文法: 
82
83 .. code-block:: ring
84
85         MySQL_Error(MySQL ハンドル) ---> エラーメッセージの文字列
86
87 .. index:: 
88         pair: MySQL 関数; MySQL_Connect()
89
90 MySQL_Connect() 関数
91 ========================
92
93 MySQL_Connect() 関数は MySQL データベースのサーバーへ接続します。
94
95 文法:
96
97 .. code-block:: ring
98
99         MySQL_Connect(MySQL ハンドル, cServer, cUserName, cPassword) ---> lStatus
100
101 .. index:: 
102         pair: MySQL 関数; MySQL_Close()
103
104 MySQL_Close() 関数
105 ======================
106
107 MySQL_Close() 関数は MySQL データベースの接続を閉じます。
108
109 文法:
110
111 .. code-block:: ring
112
113         MySQL_Close(MySQL ハンドル)
114
115 .. index:: 
116         pair: MySQL 関数; MySQL_Query()
117
118 MySQL_Query() 関数
119 ======================
120
121 MySQL_Query() 関数は SQL のクエリを実行します。
122
123 文法:
124
125 .. code-block:: ring
126         
127         MySQL_Query(MySQL ハンドル, cSQLQuery)
128
129 .. index:: 
130         pair: MySQL 関数; データベースの作成
131
132 データベースの作成
133 ==================
134
135 この用例は MySQL サーバーへ接続後に新しいデータベースを作成します。
136
137 .. code-block:: ring
138
139         See "MySQL Test - Create Database" + nl
140         con = mysql_init()
141
142         See "Connect" + nl
143         if mysql_connect(con,"localhost","root","root") = 0
144                 see "Cann't connect" + nl
145                 see "Error : " + mysql_error(con) + nl
146                 mysql_close(con)
147                 bye
148         ok
149
150         See "Create Database..." + nl
151         mysql_query(con,"CREATE DATABASE mahdb")
152
153         See "Close Connection" + nl
154         mysql_close(con)
155
156 実行結果:
157
158 .. code-block:: ring
159
160         MySQL Test - Create Database
161         Connect
162         Create Database...
163         Close Connection
164
165 .. index:: 
166         pair: MySQL 関数; テーブルの作成とデータの挿入
167
168 テーブルの作成とデータの挿入
169 ============================
170
171 この用例は新しいテーブルの作成、およびレコードの挿入を行います。
172
173 .. code-block:: ring
174
175         func main
176                 see "Create Table and Insert Records" + nl
177                 con = mysql_init()
178
179                 see "Connect" + nl
180                 if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
181                         system_error(con) 
182                 ok
183
184                 see "Drop table" + nl
185                 if mysql_query(con, "DROP TABLE IF EXISTS Employee")  system_error(con) ok
186   
187                 see "Create table" + nl
188                 if mysql_query(con, "CREATE TABLE Employee(Id INT, Name TEXT, Salary INT)") 
189                    system_error(con) ok
190  
191                 see "Insert data" + nl 
192                 if mysql_query(con, "INSERT INTO Employee VALUES(1,'Mahmoud',15000)") 
193                    system_error(con) ok
194   
195                 if mysql_query(con, "INSERT INTO Employee VALUES(2,'Samir',16000)") 
196                    system_error(con) ok
197
198                 if mysql_query(con, "INSERT INTO Employee VALUES(3,'Fayed',17000)")  
199                    system_error(con) ok
200
201                 see "Close connection" + nl
202                 mysql_close(con) 
203
204         func system_error con
205                 see mysql_error(con)  mysql_close(con)  bye
206
207
208 実行結果:
209
210 .. code-block:: ring
211
212         Create Table and Insert Records
213         Connect
214         Drop table
215         Create table
216         Insert data
217         Close connection
218
219 .. index:: 
220         pair: MySQL 関数; MySQL_Inser_ID()
221
222 MySQL_Insert_ID() 関数
223 ======================
224
225 MySQL_Insert_ID() 関数は挿入された列の ID を取得します。
226
227 文法:
228
229 .. code-block:: ring
230
231         MySQL_Insert_ID() ---> 数値により挿入された列の ID
232
233 用例:
234
235 .. code-block:: ring
236
237         con = mysql_init()
238         see "connect to database" + nl
239         mysql_connect(con,"localhost","root","root","mahdb")
240         see "drop table" + nl
241         mysql_query(con, "DROP TABLE IF EXISTS Customers")
242         see "create table" + nl
243         mysql_query(con, "CREATE TABLE Customers(Id INT PRIMARY KEY AUTO_INCREMENT, Name TEXT)")
244         see "insert record" + nl
245         mysql_query(con, "INSERT INTO Customers(Name) VALUES('Mahmoud')")
246         see "insert record" + nl
247         mysql_query(con, "INSERT INTO Customers(Name) VALUES('Samir')")
248         see "insert record" + nl
249         mysql_query(con, "INSERT INTO Customers(Name) VALUES('Fayed')")
250         see "insert record" + nl
251         mysql_query(con, "INSERT INTO Customers(Name) VALUES('Test 2015')")
252
253         see "inserted row id : " + mysql_insert_id(con) + nl
254         see "close database" + nl
255         mysql_close(con)
256
257 実行結果:
258
259 .. code-block:: ring
260
261         connect to database
262         drop table
263         create table
264         insert record
265         insert record
266         insert record
267         insert record
268         inserted row id : 4
269         close database
270
271 .. index:: 
272         pair: MySQL 関数; MySQL_Result()
273
274 MySQL_Result() 関数
275 ===================
276
277 MySQL_Result() 関数はクエリの結果 (カラム名を除くデータ) を取得します。
278
279 文法:
280
281 .. code-block:: ring
282
283         MySQL_Result(MySQL ハンドル) ---> クエリの結果を有するリスト
284
285 .. index:: 
286         pair: MySQL 関数; MySQL_Next_Result()
287
288 MySQL_Next_Result() 関数
289 ========================
290
291 MySQL_Next_Result() 関数は次のクエリの結果を移動します。
292 この関数は同じクエリで複数の SQL ステートメントがあるときに使用します。
293
294 文法:
295
296 .. code-block:: ring
297
298         MySQL_Next_Result(MySQL ハンドル)
299
300 .. index:: 
301         pair: MySQL 関数; クエリの結果を表示するには
302
303 クエリの結果を表示するには
304 ==========================
305
306 この用例はデータベースでクエリを実行後に結果を表示します。
307
308 .. code-block:: ring
309
310         con = mysql_init()
311         see "Connect to database" + nl
312         mysql_connect(con, "localhost", "root", "root","mahdb")
313         see "Execute Query" + nl
314         mysql_query(con, "SELECT Name FROM Employee WHERE Id=1;"+
315                          "SELECT Name FROM Employee WHERE Id=3")
316         see "Print Result" + nl 
317         see mysql_result(con)
318         mysql_next_result(con)
319         see mysql_result(con)
320         see "close database" + nl
321         mysql_close(con)
322
323 実行結果:
324
325 .. code-block:: ring
326
327         Connect to database
328         Execute Query
329         Print Result
330         Mahmoud
331         Fayed
332         close database
333
334 .. index:: 
335         pair: MySQL 関数; MySQL_Columns()
336
337 MySQL_Columns() 関数
338 ====================
339
340 MySQL_Columns() 関数はカラム名のリストを取得します。
341
342 文法:
343
344 .. code-block:: ring
345
346         MySQL_Columns(MySQL ハンドル) ---> カラムの情報を有するリスト
347
348 用例:
349
350 .. code-block:: ring
351
352         con = mysql_init()
353         see "Connect to database" + nl
354         mysql_connect(con, "localhost", "root", "root","mahdb")
355         see "Execute Query" + nl
356         mysql_query(con, "SELECT * FROM Employee")
357         see "Result" + nl 
358         see mysql_columns(con)
359         see "Close database" + nl
360         mysql_close(con)
361
362 実行結果:
363
364 .. code-block:: ring
365
366         Connect to database
367         Execute Query
368         Result
369         Id
370         11
371         3
372         32768
373         Name
374         65535
375         252
376         16
377         Salary
378         11
379         3
380         32768
381         Close database
382
383 .. index:: 
384         pair: MySQL 関数; MySQL_Result2()
385
386 MySQL_Result2() 関数
387 ========================
388
389 MySQL_Result() でカラム名がないデータの結果を取得するのではなく MySQL_Result2() は、
390 カラム名を全て取得した後にクエリの結果を一つのリストにします。
391
392 文法:
393
394 .. code-block:: ring
395
396         MySQL_Result2(MySQL ハンドル) ---> リスト (カラム名を除いたクエリの結果)
397
398 用例:
399
400 .. code-block:: ring
401
402         con = mysql_init()
403         see "Connect to database" + nl
404         mysql_connect(con, "localhost", "root", "root","mahdb")
405         see "Execute Query" + nl
406         mysql_query(con, "SELECT * FROM Employee")
407         see "Print Result" + nl 
408         see mysql_result2(con)
409         see "Close database" + nl
410         mysql_close(con)
411
412 実行結果:
413
414 .. code-block:: ring
415
416         Connect to database
417         Execute Query
418         Print Result
419         Id
420         Name
421         Salary
422         1
423         Mahmoud
424         15000
425         2
426         Samir
427         16000
428         3
429         Fayed
430         17000
431         Close database
432
433
434 .. index:: 
435         pair: MySQL 関数; MySQL_Escape_String()
436
437 MySQL_Escape_String() 関数
438 ==========================
439
440 MySQL_Escape_String() 関数は処理後に、
441 バイナリデータまたは特殊文字をデータベースへ格納します。
442
443 文法:
444
445 .. code-block:: ring
446
447         MySQL_Escape_String(MySQL ハンドル, cString) ---> 処理後の文字列
448
449 .. index:: 
450         pair: MySQL 関数; データベースのイメージを保存するには
451
452 データベースのイメージを保存するには
453 ====================================
454
455 用例:
456
457 .. code-block:: ring
458
459         See "Read file" + nl
460         cFile = read("tests\mahmoud.jpg")
461         con = mysql_init()
462         See "Connect to database..." + nl
463         mysql_connect(con, "localhost", "root", "root","mahdb")
464         See "Escape string..." + nl
465         cFile = mysql_escape_string(con,cFile)
466         stmt = "INSERT INTO photo(id, data) VALUES(1, '" + cFile + "')"
467         See "Insert data..." + nl
468         mysql_query(con,stmt)
469         See "Close database..." + nl
470         mysql_close(con)
471
472 実行結果:
473
474 .. code-block:: ring
475
476         Read file
477         Connect to database...
478         Escape string...
479         Insert data...
480         Close database...
481
482 .. index:: 
483         pair: MySQL 関数; データベースからイメージを復元するには
484
485 データベースからイメージを復元するには
486 ======================================
487
488 用例:
489
490 .. code-block:: ring
491
492         con = mysql_init()
493         See "Connect to database..." + nl
494         mysql_connect(con, "localhost", "root", "root","mahdb")
495         See "Read data from database..." + nl
496         mysql_query(con,"SELECT data FROM photo WHERE id=1")
497         See "Write new file" + nl
498         result = mysql_result(con)
499         write("tests\mahmoud2.jpg",result[1][1])
500         See "Close database..." + nl
501         mysql_close(con)
502
503 実行結果:
504
505 .. code-block:: ring
506
507         Connect to database...
508         Read data from database...
509         Write new file
510         Close database...
511
512
513 .. index:: 
514         pair: MySQL 関数; MySQL_AutoCommit()
515
516 MySQL_AutoCommit() 関数
517 =======================
518
519 MySQL_AutoCommit() 関数は自動コミット機能の有効、または無効化を指定します。
520
521 文法:
522
523 .. code-block:: ring
524
525         MySQL_AutoCommit(MySQL ハンドル, lStatus)  # lStatus には True または False を指定します。
526
527 .. index:: 
528         pair: MySQL 関数; MySQL_Commit()
529
530 MySQL_Commit() 関数
531 =======================
532
533 MySQL_Commit() 関数はデータベースへ更新をコミットします。
534
535 文法:
536
537 .. code-block:: ring
538
539         MySQL_Commit(MySQL ハンドル)
540
541 .. index:: 
542         pair: MySQL 関数; MySQL_Rollback()
543
544 MySQL_Rollback() 関数
545 =========================
546
547 MySQL_Rollback() 関数はデータベースのロールバックを更新します。 
548
549 文法:
550
551 .. code-block:: ring
552
553         MySQL_Rollback(MySQL ハンドル)
554
555 .. index:: 
556         pair: MySQL 関数; トランザクションの用例
557
558 トランザクションの用例
559 ======================
560
561 この用例では、 MySQL_Autocommit(), MySQL_Commit() および、
562 MySQL_RollBack() の用法です。
563
564 用例:
565
566 .. code-block:: ring
567
568         func main
569         
570                 con = mysql_init()
571
572                 see "Connect" + nl
573                 if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
574                         system_error(con) ok
575
576                 see "Drop table" + nl
577                 if mysql_query(con, "DROP TABLE IF EXISTS Employee2") 
578                         system_error(con) ok
579   
580                 see "Create table" + nl
581                 if mysql_query(con, "CREATE TABLE Employee2(Id INT, Name TEXT, Salary INT)")
582                         system_error(con) ok
583  
584                 see "Insert data" + nl 
585                 if mysql_query(con, "INSERT INTO Employee2 VALUES(1,'Mahmoud',15000)") 
586                         system_error(con) ok
587   
588                 if mysql_query(con, "INSERT INTO Employee2 VALUES(2,'Samir',16000)")
589                         system_error(con) ok
590
591                 if mysql_query(con, "INSERT INTO Employee2 VALUES(3,'Fayed',17000)") 
592                         system_error(con) ok
593
594                 mysql_autocommit(con,False)
595                 mysql_query(con, "INSERT INTO Employee2 VALUES(4,'Ahmed',5000)")
596                 mysql_query(con, "INSERT INTO Employee2 VALUES(5,'Ibrahim',50000)")
597                 mysql_query(con, "INSERT INTO Employee2 VALUES(6,'Mohammed',50000)")
598                 See "Save transaction (y/n) " give nChoice
599                 if upper(nChoice) = "Y"
600                         mysql_commit(con)
601                 else
602                         mysql_rollback(con)
603                 ok
604
605                 see "Close connection" + nl
606                 mysql_close(con) 
607
608         func system_error con
609
610                 see mysql_error(con)
611                 mysql_close(con)
612                 bye
613
614 実行結果:
615
616 .. code-block:: ring
617
618         Connect
619         Drop table
620         Create table
621         Insert data
622         Save transaction (y/n) y
623         Close connection
624