這篇文章主要介紹Java程序開(kāi)發(fā)之JDBC與MySQL數(shù)據(jù)庫(kù)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了林州免費(fèi)建站歡迎大家使用!
一、JDBC連接數(shù)據(jù)庫(kù)的操作
編寫(xiě)時(shí)可以封裝在一個(gè)類(lèi)里面簡(jiǎn)化代碼。
(1)加載JDBC-MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)
try { Class.forName("com.mysql.cj.jdbc.Driver");}catch (Exception e){ }
(2)連接數(shù)據(jù)庫(kù)
Connection con = null;//聲明要連接數(shù)據(jù)庫(kù)的對(duì)象comString uri = "jdbc:mysql://localhost:3306/數(shù)據(jù)庫(kù)名?useSSL=true &characterEncoding=utf-8"; //連接地址String user = "root"; //連接數(shù)據(jù)庫(kù)的用戶(hù)名String password = "123456"; //連接數(shù)據(jù)庫(kù)的密碼try { con = DriverManager.getConnection(uri,user,password); //連接代碼}catch(SQLException e){ }
(3)編寫(xiě)操作數(shù)據(jù)庫(kù)中數(shù)據(jù)的代碼
二、查詢(xún)操作
1,查詢(xún)操作的具體步驟
(1)向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句:
Statement sql;try{ sql = con.createStatement();}catch (SQLException e){ }
首先聲明SQL語(yǔ)句對(duì)象,然后讓已創(chuàng)建的連接對(duì)象con調(diào)用方法createStatement()
創(chuàng)建這個(gè)SQL語(yǔ)句對(duì)象。
(2)處理查詢(xún)結(jié)果
有了SQL語(yǔ)句對(duì)象后,這個(gè)對(duì)象可以調(diào)用相應(yīng)的方法實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中表的各項(xiàng)操作,其中查詢(xún)結(jié)果存放在一個(gè)ResultSet類(lèi)聲明的對(duì)象中。即SQL查詢(xún)語(yǔ)句對(duì)數(shù)據(jù)庫(kù)的查詢(xún)操作講放回一個(gè)ResultSet對(duì)象,ResultSet由“列”(字段)組織的數(shù)據(jù)行構(gòu)成。
rs = sql.executeQuery("select * from 表的名稱(chēng)");//讀取表中的所有列,*為通配符rs = sql.executeQuery("select 行1字段名,行2字段名... from 表的名稱(chēng)");//讀取表中特定的列
ResultSet對(duì)象一次只能看到一行數(shù)據(jù),使用next()方法移到下一行。ResultSet對(duì)象可以通過(guò)getXxx(int columnIndex)
獲得列值和通過(guò)傳遞列名getXxx(String columnName)
獲得列值。
(3)關(guān)閉連接
con.close(); //關(guān)閉con所連接的數(shù)據(jù)庫(kù)
注意:數(shù)據(jù)庫(kù)與連接對(duì)象緊密綁定,應(yīng)在使用完數(shù)據(jù)庫(kù)再進(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)類(lèi)型的結(jié)果集:ResultSet re = stmt.executeQuery(SQL語(yǔ)句);type的取值:決定滾動(dòng)方式: ResultSet.TYPE_FORWARD_ONLY 結(jié)果集的游標(biāo)只能向下滾動(dòng) ResultSet.TYPE_SCROLL_INSENSITIVE 游標(biāo)可以上下移動(dòng),數(shù)據(jù)庫(kù)變化時(shí),結(jié)果集不變 ResultSet.TYPE_SCROLL_SENSITIVE 返回可滾動(dòng)的結(jié)果集,數(shù)據(jù)變化時(shí),結(jié)果集同步改變 Concurrency取值:決定是否可以用結(jié)果集更新數(shù)據(jù)庫(kù) ResultSet.CONCUR_READ_ONLY 不能用結(jié)果集更新數(shù)據(jù)庫(kù)中的表 ResultSet.CONCUR_UPDATABLE 能用結(jié)果集更新數(shù)據(jù)庫(kù)中的表 滾動(dòng)查詢(xún)常用的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開(kāi)始,如果結(jié)果集沒(méi)有行,返回0public boolean absolute(int row) 將游標(biāo)移動(dòng)到參數(shù)row指定的行(參數(shù)取負(fù)數(shù)即倒數(shù))
(3)條件與排序查詢(xún)
where子語(yǔ)句: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'%歐%' //查詢(xún)name字段有“歐”字的記錄
order by語(yǔ)句:可結(jié)合where語(yǔ)句使用
select * from table order by height select * from table where name like '%王%' order by name
三、更新、添加和刪除操作
Statement對(duì)象調(diào)用public int executeUpdate(String sqlStatement);
通過(guò)參數(shù)指定的方式對(duì)數(shù)據(jù)庫(kù)表中的記錄的更新、添加和刪除操作。
(1)更新 update 表名 set 字段 = 新值 where <條件子句>(2)添加 insert into 表 values (對(duì)應(yīng)具體的記錄)(3)刪除 delete from 表名 where <條件子句>
四、使用預(yù)處理語(yǔ)句
Java提供了更高效的數(shù)據(jù)庫(kù)操作機(jī)制,就是PreparedStatement對(duì)象,即預(yù)處理語(yǔ)句對(duì)象。將SQL語(yǔ)句處理為數(shù)據(jù)庫(kù)底層語(yǔ)句,再傳輸給數(shù)據(jù)庫(kù)。
使用通配符:對(duì)SQL進(jìn)行預(yù)處理時(shí),可以用 通配符? 來(lái)代替字段的值,只要在預(yù)處理語(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代表要替換的值。
五、通用查詢(xún)
編寫(xiě)通用查詢(xún)類(lèi),用戶(hù)可以將數(shù)據(jù)庫(kù)名、SQL語(yǔ)句傳遞給該類(lèi)的對(duì)象,那么該對(duì)象就用一個(gè)二維數(shù)組返回查詢(xún)的記錄。
編寫(xiě)通用查詢(xún)類(lèi)需要知道數(shù)據(jù)庫(kù)表列(字段)的名字和數(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語(yǔ)句組成。所謂事務(wù)處理,是指應(yīng)用程序保證事務(wù)中的SQL語(yǔ)句要么全部被執(zhí)行,要么一個(gè)都不被執(zhí)行。事務(wù)處理是保證數(shù)據(jù)庫(kù)中數(shù)據(jù)完整性與一致性的重要機(jī)制。
2,JDBC事務(wù)處理
用setAutoCommit(boolean b)方法關(guān)閉自動(dòng)模式:
即關(guān)閉SQL語(yǔ)句的即刻生效性,兩個(gè)相關(guān)聯(lián)的操作應(yīng)該在都執(zhí)行完畢后才改變數(shù)據(jù)庫(kù)中的數(shù)據(jù)。方法為在獲取sql對(duì)象前讓連接對(duì)象調(diào)用該方法:
con.setAutoCommit(false);
用commit()方法處理事務(wù):
關(guān)閉自動(dòng)模式后,讓sql對(duì)象提交多條SQL(即同一事務(wù))語(yǔ)句,這些語(yǔ)句不會(huì)立即生效,而是直到連接對(duì)象調(diào)用方法后全部生效:
con.commit();
用rollback()方法處理事務(wù)失?。?br/>即撤銷(xiāo)事務(wù)所作的操作。在con調(diào)用commit()方法進(jìn)行事務(wù)處理時(shí),只要有一個(gè)SQL語(yǔ)句沒(méi)有執(zhí)行成功,那么該事務(wù)執(zhí)行失敗,拋出SQLException異常。這時(shí)必須讓con調(diào)用rollback()方法撤銷(xiāo)引起數(shù)據(jù)變化的所有操作:
con.rollback();
以上是“Java程序開(kāi)發(fā)之JDBC與MySQL數(shù)據(jù)庫(kù)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!