26、jdbc操作数据库(3)
生活随笔
收集整理的這篇文章主要介紹了
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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 市场监管总局:我国基本构建适老家电产品国
- 下一篇: 27、jdbc操作数据库(4)