溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java程序開發(fā)之JDBC與MySQL數(shù)據(jù)庫的示例分析

發(fā)布時(shí)間:2021-02-22 09:30:48 來源:億速云 閱讀:134 作者:小新 欄目:編程語言

這篇文章主要介紹Java程序開發(fā)之JDBC與MySQL數(shù)據(jù)庫的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

一、JDBC連接數(shù)據(jù)庫的操作

編寫時(shí)可以封裝在一個(gè)類里面簡(jiǎn)化代碼。
(1)加載JDBC-MySQL數(shù)據(jù)庫驅(qū)動(dòng)

try {
    Class.forName("com.mysql.cj.jdbc.Driver");}catch (Exception e){ }

(2)連接數(shù)據(jù)庫

Connection con = null;//聲明要連接數(shù)據(jù)庫的對(duì)象comString uri = "jdbc:mysql://localhost:3306/數(shù)據(jù)庫名?useSSL=true &characterEncoding=utf-8";	//連接地址String user = "root";	//連接數(shù)據(jù)庫的用戶名String password = "123456";	//連接數(shù)據(jù)庫的密碼try {
    con = DriverManager.getConnection(uri,user,password);
	//連接代碼}catch(SQLException e){ }

(3)編寫操作數(shù)據(jù)庫中數(shù)據(jù)的代碼

二、查詢操作

1,查詢操作的具體步驟
(1)向數(shù)據(jù)庫發(fā)送SQL語句:

Statement sql;try{
    sql = con.createStatement();}catch (SQLException e){ }

首先聲明SQL語句對(duì)象,然后讓已創(chuàng)建的連接對(duì)象con調(diào)用方法createStatement()創(chuàng)建這個(gè)SQL語句對(duì)象。
(2)處理查詢結(jié)果
有了SQL語句對(duì)象后,這個(gè)對(duì)象可以調(diào)用相應(yīng)的方法實(shí)現(xiàn)對(duì)數(shù)據(jù)庫中表的各項(xiàng)操作,其中查詢結(jié)果存放在一個(gè)ResultSet類聲明的對(duì)象中。即SQL查詢語句對(duì)數(shù)據(jù)庫的查詢操作講放回一個(gè)ResultSet對(duì)象,ResultSet由“列”(字段)組織的數(shù)據(jù)行構(gòu)成。

rs = sql.executeQuery("select * from 表的名稱");//讀取表中的所有列,*為通配符rs = sql.executeQuery("select 行1字段名,行2字段名... from 表的名稱");//讀取表中特定的列

ResultSet對(duì)象一次只能看到一行數(shù)據(jù),使用next()方法移到下一行。ResultSet對(duì)象可以通過getXxx(int columnIndex)獲得列值和通過傳遞列名getXxx(String columnName)獲得列值。
(3)關(guān)閉連接

con.close(); //關(guān)閉con所連接的數(shù)據(jù)庫

注意:數(shù)據(jù)庫與連接對(duì)象緊密綁定,應(yīng)在使用完數(shù)據(jù)庫再進(jìn)行關(guān)閉操作。

2,控制游標(biāo)
結(jié)果集的游標(biāo)的初始位置在結(jié)果集第一行的前面,結(jié)果集調(diào)用next()方法向下(后)移動(dòng)游標(biāo),移動(dòng)成功返回true,移動(dòng)失敗返回false。如果要在結(jié)果集中移動(dòng)并顯示若干條記錄,必須返回一個(gè)滾動(dòng)的結(jié)果集。方法如下:

Statement stmt = con.createStatement(int type,int concurrency);//獲得一個(gè)Statement對(duì)象,根據(jù)參數(shù)的值,stmt返回相應(yīng)類型的結(jié)果集:ResultSet re = stmt.executeQuery(SQL語句);type的取值:決定滾動(dòng)方式:
ResultSet.TYPE_FORWARD_ONLY 結(jié)果集的游標(biāo)只能向下滾動(dòng)
ResultSet.TYPE_SCROLL_INSENSITIVE 游標(biāo)可以上下移動(dòng),數(shù)據(jù)庫變化時(shí),結(jié)果集不變
ResultSet.TYPE_SCROLL_SENSITIVE 返回可滾動(dòng)的結(jié)果集,數(shù)據(jù)變化時(shí),結(jié)果集同步改變
Concurrency取值:決定是否可以用結(jié)果集更新數(shù)據(jù)庫
ResultSet.CONCUR_READ_ONLY 不能用結(jié)果集更新數(shù)據(jù)庫中的表
ResultSet.CONCUR_UPDATABLE 能用結(jié)果集更新數(shù)據(jù)庫中的表

滾動(dòng)查詢常用的ResultSet的方法:public boolean previous() 將游標(biāo)向上移動(dòng),當(dāng)移動(dòng)到結(jié)果集第一行之前時(shí)返回falsepublic void beforeFirst() 將游標(biāo)移動(dòng)到結(jié)果集的初始位置,第一行之前public void afterLast() 將游標(biāo)移動(dòng)到結(jié)果集的最后一行之后public void first() 將游標(biāo)移動(dòng)到第一行public void last() 將游標(biāo)移動(dòng)到最后一行public boolean isAfterLast() 判斷游標(biāo)是否在最后一行之后public boolean isBeforeFirst() 判斷游標(biāo)是否在第一行游標(biāo)之前public boolean isFirst() 判斷游標(biāo)是否指向第一行public boolean isLast() 判斷游標(biāo)是否指向最后一行public int getRow() 得到當(dāng)前游標(biāo)所指向的行號(hào),行號(hào)從1開始,如果結(jié)果集沒有行,返回0public boolean absolute(int row) 將游標(biāo)移動(dòng)到參數(shù)row指定的行(參數(shù)取負(fù)數(shù)即倒數(shù))

(3)條件與排序查詢
where子語句:select 字段 from 表明 where 條件

(1)字段值與固定值比較
select * from table where name='張三'(2)字段值在某個(gè)區(qū)間
select * from table where number>5 and number<10 and name!='李四'(3)使用某些特殊的日期函數(shù)(Data:year-month-day)select * from table where year(表明日期的字段名)<1980 and month(表面日期的字段名)<=10select * from table where year(表明日期的字段名) between 2002 and 2021(4)使用某些特殊的時(shí)間函數(shù)(hour,minute,second)
select * from timelist where second(表明時(shí)間的字段名)=36(5)用操作符like進(jìn)行模式匹配,使用%代替0個(gè)或多個(gè)字符,用一個(gè)下劃線_代替一個(gè)字符。
select * from table where name like'%歐%' //查詢name字段有“歐”字的記錄

order by語句:可結(jié)合where語句使用

select * from table order by height
select * from table where name like '%王%' order by name

三、更新、添加和刪除操作

Statement對(duì)象調(diào)用public int executeUpdate(String sqlStatement);通過參數(shù)指定的方式對(duì)數(shù)據(jù)庫表中的記錄的更新、添加和刪除操作。

(1)更新
update 表名 set 字段 = 新值 where <條件子句>(2)添加
insert into 表 values (對(duì)應(yīng)具體的記錄)(3)刪除
delete from 表名 where <條件子句>

四、使用預(yù)處理語句

Java提供了更高效的數(shù)據(jù)庫操作機(jī)制,就是PreparedStatement對(duì)象,即預(yù)處理語句對(duì)象。將SQL語句處理為數(shù)據(jù)庫底層語句,再傳輸給數(shù)據(jù)庫。
使用通配符:對(duì)SQL進(jìn)行預(yù)處理時(shí),可以用 通配符? 來代替字段的值,只要在預(yù)處理語句執(zhí)行之前再設(shè)置通配符所代表的具體值即可:

String str = "select * from 表名 where 字段1 < ? and 字段2 = ?";PreparedStatement sql = con.prepareStatement(str);sql.setXxx(int parameterIndex,Type x);//該方法設(shè)置?代表的值,parameterIndex代表第幾個(gè)?,x代表要替換的值。

五、通用查詢

編寫通用查詢類,用戶可以將數(shù)據(jù)庫名、SQL語句傳遞給該類的對(duì)象,那么該對(duì)象就用一個(gè)二維數(shù)組返回查詢的記錄。
編寫通用查詢類需要知道數(shù)據(jù)庫表列(字段)的名字和數(shù)量。常用方法為用結(jié)果集ResultSet對(duì)象rs調(diào)用getMetaData()方法返回一個(gè)ResultSetMetaData對(duì)象:

ResultSetMetaData metaData = rs.getMetaData();

然后該對(duì)象metaData調(diào)用getColumnCount()方法既可以返回rs中列的數(shù)目,調(diào)用getColumnName(int i)就可以返回結(jié)果集rs中第i列的名字。

六、事務(wù)

1,事務(wù)及處理
事務(wù)由一組SQL語句組成。所謂事務(wù)處理,是指應(yīng)用程序保證事務(wù)中的SQL語句要么全部被執(zhí)行,要么一個(gè)都不被執(zhí)行。事務(wù)處理是保證數(shù)據(jù)庫中數(shù)據(jù)完整性與一致性的重要機(jī)制。

2,JDBC事務(wù)處理
用setAutoCommit(boolean b)方法關(guān)閉自動(dòng)模式:
即關(guān)閉SQL語句的即刻生效性,兩個(gè)相關(guān)聯(lián)的操作應(yīng)該在都執(zhí)行完畢后才改變數(shù)據(jù)庫中的數(shù)據(jù)。方法為在獲取sql對(duì)象前讓連接對(duì)象調(diào)用該方法:

con.setAutoCommit(false);

用commit()方法處理事務(wù):
關(guān)閉自動(dòng)模式后,讓sql對(duì)象提交多條SQL(即同一事務(wù))語句,這些語句不會(huì)立即生效,而是直到連接對(duì)象調(diào)用方法后全部生效:

con.commit();

用rollback()方法處理事務(wù)失敗:
即撤銷事務(wù)所作的操作。在con調(diào)用commit()方法進(jìn)行事務(wù)處理時(shí),只要有一個(gè)SQL語句沒有執(zhí)行成功,那么該事務(wù)執(zhí)行失敗,拋出SQLException異常。這時(shí)必須讓con調(diào)用rollback()方法撤銷引起數(shù)據(jù)變化的所有操作:

con.rollback();

以上是“Java程序開發(fā)之JDBC與MySQL數(shù)據(jù)庫的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI