java数据库编程——执行查询操作(二)
【0】README
1) 本文部分文字描述和source code 均轉(zhuǎn)自 core java volume 2 , 旨在理解 java數(shù)據(jù)庫編程——執(zhí)行查詢操作(二) 的基礎(chǔ)知識 ;
2) 本文和 java數(shù)據(jù)庫編程——執(zhí)行查詢操作(一) 是姊妹篇, 共同組成了 java數(shù)據(jù)庫編程——執(zhí)行查詢操作的全部內(nèi)容, for java數(shù)據(jù)庫編程——執(zhí)行查詢操作(一), please visit http://blog.csdn.net/PacosonSWJTU/article/details/50628980 ;
3)for database connection config, please visit : https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter4/database.properties
【1】SQL轉(zhuǎn)義
1)轉(zhuǎn)義定義: 轉(zhuǎn)義語法支持各種數(shù)據(jù)庫普遍支持的特性, 但是數(shù)據(jù)庫使用的是與數(shù)據(jù)庫相關(guān)的語法變體, 因此,將轉(zhuǎn)義語法轉(zhuǎn)譯為 特定數(shù)據(jù)庫的語法是JDBC 驅(qū)動(dòng)程序的任務(wù)之一。 (干貨——將轉(zhuǎn)義語法轉(zhuǎn)譯為 特定數(shù)據(jù)庫的語法是JDBC 驅(qū)動(dòng)程序的任務(wù)之一)
2)轉(zhuǎn)義主要用于下列特性(Character):
- C1)日期和時(shí)間字面常量;
- C2)調(diào)用標(biāo)量函數(shù);
- C3)調(diào)用存儲過程;
- C4)外連接;
- C5) 在 like 子句中的 轉(zhuǎn)義字符;
2.1)應(yīng)該使用d, t, ts 來表示 DATE, TIME 和 TIMESTAMP的值:
{d, ‘2008-01-24’}
{t, ‘23:59:59’}
{ts, ‘2008-01-24 23:59:59.999’}2.2)標(biāo)量函數(shù): 是指僅返回一個(gè)值的函數(shù);要調(diào)用函數(shù), 需要嵌入標(biāo)準(zhǔn)的函數(shù)名和參數(shù): (干貨——標(biāo)量函數(shù)定義)
{fn left(?, 20)}
{fn user() }2.3 )存儲過程: 是在數(shù)據(jù)庫中執(zhí)行的用數(shù)據(jù)庫相關(guān)的語言編寫的過程。要調(diào)用存儲過程, 需要使用 call 轉(zhuǎn)移命令, 其中在存儲過程沒有任何參數(shù)的時(shí)候, 就不用加上括號。另外,應(yīng)該用=來捕獲存儲過程的返回值; (干貨——存儲過程定義)
{call PROC1(?, ?)}
{call PROC2}
{call ?=PROC3(?)}2.4)外連接;
- 2.5) _ 和 % 字符在 LIKE 子句中具有特殊含義: 用來匹配一個(gè)字符或一個(gè)字符序列。 目前并不存在任何在字面上使用它們的標(biāo)準(zhǔn)方式, 所以如果想要匹配所有包含_ 字符的字符串, 就必須使用下面結(jié)構(gòu): (干貨——_ 和 % 字符在 LIKE 子句中具有特殊含義)
…. where ? like %!_% {escape ‘!’}
這里, 我們將 ! 定義為 轉(zhuǎn)移字符, 而 !_ 組合表示字面常量下劃線; (干貨—— 嘆號! 定義為轉(zhuǎn)移字符)
【2】多結(jié)果集
0)多結(jié)果集定義: 在執(zhí)行存儲過程,或在使用允許在單個(gè)查詢中提交多個(gè)select 語句的數(shù)據(jù)庫時(shí),一個(gè)查詢有可能會(huì)返回多個(gè)結(jié)果集。 (干貨——多結(jié)果集定義)
1)下面是獲取結(jié)果集的步驟: (干貨——獲取結(jié)果集的步驟)
- step1)使用execute 方法來執(zhí)行 sql 語句;
- step2) 獲取第一個(gè)結(jié)果集或更新計(jì)數(shù);
- step3)重復(fù)調(diào)用 getMoreResults 方法以移動(dòng)到下一個(gè)結(jié)果集;
step4) 當(dāng)不存在更多的結(jié)果集或更新計(jì)數(shù)時(shí), 完成操作;
1.1) 如果由多結(jié)果集構(gòu)成的鏈中的下一項(xiàng)是結(jié)果集, execute 和 getMoreResults 方法將返回 true, 而如果在鏈中的下一項(xiàng)不是更新計(jì)數(shù),getUpdateCount 方法將返回-1;
- 1.2)下面的循環(huán)遍歷所有結(jié)果集:
2)看個(gè)多結(jié)果集的荔枝:
- 2.1)for souce code, please visit : https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter4/execute_select/OneCommitMultipleSelect.java
- 2.2)key source code at a glance:
- 2.3)relative printing results as follows:
Complementary)
C1)怎樣創(chuàng)建+查看+調(diào)用存儲過程;
C2)在創(chuàng)建存儲過程的命令行代碼中, delimiter // 以及 最后的 end// 是什么意思?
它其實(shí)就是一個(gè)分隔符而已, 表明分隔符內(nèi)的 分號; 并不表示輸入結(jié)束,輸入結(jié)束的標(biāo)志是配對的 ‘//’: for detailed info , please visit http://database.51cto.com/art/201011/235017.htm
【3】獲取自動(dòng)生成鍵
1)當(dāng)我們向數(shù)據(jù)庫插入一個(gè)新行, 且其鍵自動(dòng)生成時(shí),可以實(shí)現(xiàn)下面的代碼來獲取這個(gè)鍵:
stmt.executeUpdate(insertStatement, Statement.RETURN_GENERATED_KEYS); // 自動(dòng)生成主鍵; ResultSet rs = stmt.getGeneratorKeys(); // 返回自動(dòng)生成鍵的結(jié)果集; if(rs.next()) {int key = rs.getInt(1);... }2)看個(gè)獲取自動(dòng)生成鍵的荔枝:
- 2.1)for souce code, please visit : https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter4/execute_select/MyGetPrimaryKey.java
- 2.2)key source code at a glance:
- 2.3)relative printing results as follows:
總結(jié)
以上是生活随笔為你收集整理的java数据库编程——执行查询操作(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 默认浏览器设置在哪里设置
- 下一篇: com.mysql.jdbc.NotUp