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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

26、jdbc操作数据库(3)

發布時間:2023/12/3 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 26、jdbc操作数据库(3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、結果集的元數據操作

?ResultSetMetaData 是描述ResultSet的元數據對象,可以通過元數據對象獲取結果集的列信息,使用方式如下:

public void query() {Connection connection = DBUtil.getConnection();String sql = "SELECT ID,UNAME u,PASSWORD FROM USER";PreparedStatement prepareStatement = null;ResultSet resultSet = null;try {prepareStatement = connection.prepareStatement(sql);//獲取到結果集CallableStatementresultSet = prepareStatement.executeQuery();// 通過 結果集的getMetaData() 獲取到元數據對象ResultSetMetaData metaData = resultSet.getMetaData();System.out.println("獲取數據列數"+metaData.getColumnCount());System.out.println("第二列的字段名是:"+metaData.getColumnName(2));System.out.println("第二列的字段別名是:"+metaData.getColumnLabel(2));} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(resultSet, prepareStatement, connection);} }

2、使用jdbc進行批量處理

當一次處理多條記錄時,可使用jdbc進行批量操作,其基本思路是現將要執行的sql進行積攢,然后一次性發送到數據庫進行執行,示例代碼如下:

//獲取連接 Connection connection = DBUtil.getConnection(); String sql = "INSERT INTO USER (uname , password) VALUES (? , ?)"; PreparedStatement prepareStatement = null; try {//這里一定要注意,mysql是自動提交事務的,所以這里一定要先關閉自動提交connection.setAutoCommit(false);//通過數據庫連接獲取數據庫操作對象prepareStatement = connection.prepareStatement(sql);// 組裝sql、積攢sqlfor (int i = 0; i < 10000; i++) {prepareStatement.setObject(1, "zhangsan"+i);prepareStatement.setObject(2, i);prepareStatement.addBatch();}//一次性發送到數據庫執行prepareStatement.executeBatch();//手動提交事務connection.commit(); } catch (SQLException e) {e.printStackTrace(); } finally {//關閉資源DBUtil.close(null, prepareStatement, connection); }

3、使用jdbc調用存儲過程、函數

當調用存儲過程或者函數時,需要使用到 CallableStatement 類,使用的代碼實例如下:

//存儲過程 CREATE PROCEDURE add(IN a INT , OUT b INT ) BEGINSET b = a * 10; END//jdbc調用存儲過程 add()//獲取連接 Connection connection = DBUtil.getConnection(); //寫sql,使用 {CALL 存儲過程|函數} 方式調用 String sql = "{CALL getUser(?,?)}"; //獲取 CallableStatement 對象 CallableStatement callableStatement = null; try {callableStatement = connection.prepareCall(sql);//設置傳入的參數callableStatement.setInt(1, 256);//執行存儲過程callableStatement.execute();//因為第二個參數是OUT類型,所以這里可以獲取到int result = callableStatement.getInt(2);System.out.println(result); } catch (SQLException e) {e.printStackTrace(); } finally {DBUtil.close(null, callableStatement, connection); }

4、使用jdbc處理事務

使用jdbc操作事務時,首先要關閉mysql的自動提交,最后手動提交,實例代碼如下:

//獲取連接 Connection connection = DBUtil.getConnection(); String sql = "UPDATE USER SET UNAME = ? WHERE ID = 1"; String sql2 = "UPDATE USER SET UNAME = ? WHERE ID = 2"; try {//關閉自動提交,開啟事務connection.setAutoCommit(false);PreparedStatement statement1 = connection.prepareStatement(sql);statement1.setString(1, "czp");statement1.execute();int a=10 / 0;//這里出現錯誤,則回滾PreparedStatement statement2 = connection.prepareStatement(sql2);statement2.setString(1, "java");statement2.execute();//主動提交事務connection.commit(); } catch (SQLException e) {//出現錯誤時,回滾try {connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace(); } finally {DBUtil.close(null, null, connection); }

?

總結

以上是生活随笔為你收集整理的26、jdbc操作数据库(3)的全部內容,希望文章能夠幫你解決所遇到的問題。

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