您好,登錄后才能下訂單哦!
這篇文章主要介紹Java程序開發之JDBC與MySQL數據庫的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一、JDBC連接數據庫的操作
編寫時可以封裝在一個類里面簡化代碼。
(1)加載JDBC-MySQL數據庫驅動
try { Class.forName("com.mysql.cj.jdbc.Driver");}catch (Exception e){ }
(2)連接數據庫
Connection con = null;//聲明要連接數據庫的對象comString uri = "jdbc:mysql://localhost:3306/數據庫名?useSSL=true &characterEncoding=utf-8"; //連接地址String user = "root"; //連接數據庫的用戶名String password = "123456"; //連接數據庫的密碼try { con = DriverManager.getConnection(uri,user,password); //連接代碼}catch(SQLException e){ }
(3)編寫操作數據庫中數據的代碼
二、查詢操作
1,查詢操作的具體步驟
(1)向數據庫發送SQL語句:
Statement sql;try{ sql = con.createStatement();}catch (SQLException e){ }
首先聲明SQL語句對象,然后讓已創建的連接對象con調用方法createStatement()
創建這個SQL語句對象。
(2)處理查詢結果
有了SQL語句對象后,這個對象可以調用相應的方法實現對數據庫中表的各項操作,其中查詢結果存放在一個ResultSet類聲明的對象中。即SQL查詢語句對數據庫的查詢操作講放回一個ResultSet對象,ResultSet由“列”(字段)組織的數據行構成。
rs = sql.executeQuery("select * from 表的名稱");//讀取表中的所有列,*為通配符rs = sql.executeQuery("select 行1字段名,行2字段名... from 表的名稱");//讀取表中特定的列
ResultSet對象一次只能看到一行數據,使用next()方法移到下一行。ResultSet對象可以通過getXxx(int columnIndex)
獲得列值和通過傳遞列名getXxx(String columnName)
獲得列值。
(3)關閉連接
con.close(); //關閉con所連接的數據庫
注意:數據庫與連接對象緊密綁定,應在使用完數據庫再進行關閉操作。
2,控制游標
結果集的游標的初始位置在結果集第一行的前面,結果集調用next()方法向下(后)移動游標,移動成功返回true,移動失敗返回false。如果要在結果集中移動并顯示若干條記錄,必須返回一個滾動的結果集。方法如下:
Statement stmt = con.createStatement(int type,int concurrency);//獲得一個Statement對象,根據參數的值,stmt返回相應類型的結果集:ResultSet re = stmt.executeQuery(SQL語句);type的取值:決定滾動方式: ResultSet.TYPE_FORWARD_ONLY 結果集的游標只能向下滾動 ResultSet.TYPE_SCROLL_INSENSITIVE 游標可以上下移動,數據庫變化時,結果集不變 ResultSet.TYPE_SCROLL_SENSITIVE 返回可滾動的結果集,數據變化時,結果集同步改變 Concurrency取值:決定是否可以用結果集更新數據庫 ResultSet.CONCUR_READ_ONLY 不能用結果集更新數據庫中的表 ResultSet.CONCUR_UPDATABLE 能用結果集更新數據庫中的表 滾動查詢常用的ResultSet的方法:public boolean previous() 將游標向上移動,當移動到結果集第一行之前時返回falsepublic void beforeFirst() 將游標移動到結果集的初始位置,第一行之前public void afterLast() 將游標移動到結果集的最后一行之后public void first() 將游標移動到第一行public void last() 將游標移動到最后一行public boolean isAfterLast() 判斷游標是否在最后一行之后public boolean isBeforeFirst() 判斷游標是否在第一行游標之前public boolean isFirst() 判斷游標是否指向第一行public boolean isLast() 判斷游標是否指向最后一行public int getRow() 得到當前游標所指向的行號,行號從1開始,如果結果集沒有行,返回0public boolean absolute(int row) 將游標移動到參數row指定的行(參數取負數即倒數)
(3)條件與排序查詢
where子語句:select 字段 from 表明 where 條件
(1)字段值與固定值比較 select * from table where name='張三'(2)字段值在某個區間 select * from table where number>5 and number<10 and name!='李四'(3)使用某些特殊的日期函數(Data:year-month-day)select * from table where year(表明日期的字段名)<1980 and month(表面日期的字段名)<=10select * from table where year(表明日期的字段名) between 2002 and 2021(4)使用某些特殊的時間函數(hour,minute,second) select * from timelist where second(表明時間的字段名)=36(5)用操作符like進行模式匹配,使用%代替0個或多個字符,用一個下劃線_代替一個字符。 select * from table where name like'%歐%' //查詢name字段有“歐”字的記錄
order by語句:可結合where語句使用
select * from table order by height select * from table where name like '%王%' order by name
三、更新、添加和刪除操作
Statement對象調用public int executeUpdate(String sqlStatement);
通過參數指定的方式對數據庫表中的記錄的更新、添加和刪除操作。
(1)更新 update 表名 set 字段 = 新值 where <條件子句>(2)添加 insert into 表 values (對應具體的記錄)(3)刪除 delete from 表名 where <條件子句>
四、使用預處理語句
Java提供了更高效的數據庫操作機制,就是PreparedStatement對象,即預處理語句對象。將SQL語句處理為數據庫底層語句,再傳輸給數據庫。
使用通配符:對SQL進行預處理時,可以用 通配符? 來代替字段的值,只要在預處理語句執行之前再設置通配符所代表的具體值即可:
String str = "select * from 表名 where 字段1 < ? and 字段2 = ?";PreparedStatement sql = con.prepareStatement(str);sql.setXxx(int parameterIndex,Type x);//該方法設置?代表的值,parameterIndex代表第幾個?,x代表要替換的值。
五、通用查詢
編寫通用查詢類,用戶可以將數據庫名、SQL語句傳遞給該類的對象,那么該對象就用一個二維數組返回查詢的記錄。
編寫通用查詢類需要知道數據庫表列(字段)的名字和數量。常用方法為用結果集ResultSet對象rs調用getMetaData()
方法返回一個ResultSetMetaData對象:
ResultSetMetaData metaData = rs.getMetaData();
然后該對象metaData調用getColumnCount()
方法既可以返回rs中列的數目,調用getColumnName(int i)
就可以返回結果集rs中第i列的名字。
六、事務
1,事務及處理
事務由一組SQL語句組成。所謂事務處理,是指應用程序保證事務中的SQL語句要么全部被執行,要么一個都不被執行。事務處理是保證數據庫中數據完整性與一致性的重要機制。
2,JDBC事務處理
用setAutoCommit(boolean b)方法關閉自動模式:
即關閉SQL語句的即刻生效性,兩個相關聯的操作應該在都執行完畢后才改變數據庫中的數據。方法為在獲取sql對象前讓連接對象調用該方法:
con.setAutoCommit(false);
用commit()方法處理事務:
關閉自動模式后,讓sql對象提交多條SQL(即同一事務)語句,這些語句不會立即生效,而是直到連接對象調用方法后全部生效:
con.commit();
用rollback()方法處理事務失敗:
即撤銷事務所作的操作。在con調用commit()方法進行事務處理時,只要有一個SQL語句沒有執行成功,那么該事務執行失敗,拋出SQLException異常。這時必須讓con調用rollback()方法撤銷引起數據變化的所有操作:
con.rollback();
以上是“Java程序開發之JDBC與MySQL數據庫的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。