日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC接口

發布時間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Statement接口:

Statement接口可以用于執行sql語句,Statement對象需要通過Connection對象調用createStatement();方法來獲得,得到Statement對象后才能調用執行SQL語句的方法。SQL語句分為兩大類一類是更新語句一類是查詢語句也就是DML和DQL,通過Statement對象調用executeUpdate方法可以執行DML類的SQL語句(更新語句),調用executeQuery方法則可以執行DQL類的SQL語句也就是查詢語句。

使用Statement對象調用executeUpdate方法執行數據庫更新語句時,會有一個int類型的返回值,這個返回值表示的是SQL語句執行后所影響的行數,因為像updateinsertdelete語句都會影響表格的行數,下面做一個小實驗就能明白了。

表格的內容:



代碼示例:



運行結果:


從運行結果可以知道,insert語句影響了一行數據,update語句也影響了一行數據,最后delete語句刪除了所有的數據,所以影響了11行數據。

最后表格的數據都被清空了:



Statement對象調用executeBatch();方法可以批量執行SQL語句,在調用executeBatch();方法前,需要調用addBatch();方法來累積SQL語句,最后調用clearBatch();方法來清空積累的SQL語句。

如果不使用批SQL執行的話,會來來回回的向數據庫發送SQL,速度會稍微慢一些。使用批SQL執行的話,則是將SQL語句積累起來,然后一次性往數據庫發送SQL語句,所以速度會稍微快一些。調用executeBatch();方法會返回一個int類型數組,因為是批量執行的SQL語句,所以影響得行數比較多。

? 代碼示例:



運行結果:




SQL處理思維導圖:




使用Statement對象調用executeQuery方法執行數據庫查詢語句時,會返回一個ResultSet對象,這個對象是查詢出來的記錄集,因為查詢的結果集數量可能很龐大,如果返回一個數組或者集合,就代表要一次性把查詢到的數據都拿出來,這樣的話不僅速度慢,而且拿取數據也不方便,并且讓開發驅動的人員也沒有優化的余地。

返回的是ResultSet對象的話,就能選擇性的拿取數據,能讓開發驅動的人員有優化的余地。

代碼示例:



運行結果:


使用ResultSet對象調用next();方法會返回一個boolean值,返回值為true表示查詢到了數據,如果是false則是沒有查詢到數據。

提醒:在編寫SQL語句最好是SQLYog工具或者其他數據庫工具中執行一下確保語句正確之后在拷貝過來會剩下一些麻煩。



ResultSet接口:

從上面的介紹也知道ResultSet是從數據庫里查詢出來的記錄集的一個封裝對象,ResultSet對象是有一個取值光標的,這個取值光標的概念和游標的概念是差不多的,這個取值光標默認在數據的最前面,也就是第一行數據,next();方法可以移動光標取值,如果光標沒有指向值的話,就返回false ?有值就是true

使用ResultSet對象調用beforeFirst();方法可以將取值光標移動最前方也就是第一行數據,此方法一般配合next方法使用

代碼示例:



運行結果:




使用ResultSet對象調用afterLast();方法可以將取值光標移動最后方也就是最后一行數據。

? 代碼示例:



運行結果:




ResultSet對象調用previous();方法可以從后至前的方式拿值也即是和next();方法取值順序相反,一般配合afterLast方法使用,如果使用beforeFirst方法的話會得不到數據

? 錯誤示例:


運行結果會為空,什么都不會打印:




取列值:

在上面我們也使用到了getInt方法來取tid列的值,取列值可以通過兩個方式,一是通過序號,二是通過列名,在上面我是通過列名獲得的tid列的值,我們也可以使用序號來獲得。

? 通過序號取列值代碼示例:



運行結果:



如何確定列的序號?通過表格列的從左到右順序即可確定:



通過序號取列值代碼示例:



運行結果:




一些常用的取值方法對應的數據庫中的數據類型介紹:

varchar類型?>>getString方法

int類型 ??????>>???getInt();方法

boolean類型 ??>>???getBoolean();方法

datetime類型 ?>>getDate();方法

float類型?>>getFloat();方法

double類型?>>getDouble();方法

使用方法去取值時要注意能夠確保精度、內存不會溢出,例如使用getFloat();方法就不能去取double類型的值,反過來使用getDouble();方法則可以去取float類型的值。這和Java里的類型轉換原理是一樣的,大轉小會溢出,小轉大則沒問題,而且任何數據類型都可以轉換為String類型。

注意:在記錄集中拿數據,是由你所寫的SELECT語句來決定的例如你寫的是SELECT * FROM test,那么就是默認按表格序號來拿數據,如果你寫的是SELECT tname FROM test,則是按tname為序號1來拿數據。

? SELECT * FROM test代碼示例:



運行結果:




SELECT tname FROM test代碼示例:



運行結果:




還有一點要注意的是如果要將datatime類型的值保存到變量中,是使用Date類聲明的變量來保存,但是這個Date類不是java.util包下的Date類,而是java.sql包下的Date類,不要使用錯類了。

? 代碼示例:



運行結果:




從運行結果可以看出只打印了日期,時間沒有打印,也就是說使用getDate方法只能獲得日期,獲得不了時間,如果想要獲得時間和日期就得調用getTimestamp方法,這個方法會返回一個Timestamp對象。

? 代碼示例:



運行結果:





ResultSetMetaData接口:

ResultSetMetaData接口主要是用于反饋查詢出來的數據庫中表結構信息對象的,ResultSetMetaData對象需要通過ResultSet對象調用getMetaData();方法來獲得。但是要注意的一點就是ResultSetMetaData對象并不是完全的表結構封裝對象,而僅是查詢出來的數據結果集表結構封裝對像,也就是說僅僅是通過查詢語句所查詢出來的那個表結構,不是完整存在數據庫的表結構,通過這個對象可以調用有一些方法來獲得表結構信息。

簡單介紹幾個方法的作用:

getColumnName();方法????得到列名

getColumnTypeName();方法?得到列的數據類型名稱

getColumnDisplaySize();方法??獲得列所定義的類型大小

getColumnCount();方法?得到表格中所有列數量

isNullable();方法?判斷這個列是否可以為null,返回值是一個int類型,只會返回0或1,0代表false,1代表true,也就是非0即真。

提示:以上提到的方法,除了getColumnCount();方法之外,其他方法都需要傳遞一個int類型的參數,這個數字是查詢出來的表結構中列的序號。

? 代碼示例:



運行結果:

一般很少情況下會去獲得表結構信息,因為沒什么實際意義,所以ResultSetMetaData接口用得不多。


轉載于:https://blog.51cto.com/zero01/1977005

總結

以上是生活随笔為你收集整理的JDBC接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。