Java銜接Sql數據庫常常用到的操作。本站提示廣大學習愛好者:(Java銜接Sql數據庫常常用到的操作)文章只能為提供參考,不一定能成為您想要的結果。以下是Java銜接Sql數據庫常常用到的操作正文
空話不多說了,直接給年夜家分享java操作sql數據庫罕見的銜接成績。
1.銜接,查詢,更新,封閉
這幾個數據基本操作,所以放到一路,寫成一個對象類的形式,也就是model2形式的sql對象.這裡本想把其他操作都加出來,好比事務處置,然則今朝還沒想到比擬完善的辦法,詳細看代碼吧,正文很具體
import java.sql.*; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * Created by nl101 on 2016/1/29. */ public class SQLBean { //初始化操作都寫在後面 Connection conn = null; PreparedStatement ps =null; ResultSet rs = null; String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String userName = "SCOTT"; String passWord = "123456"; /** * 初始化銜接,取得conn */ public SQLBean(){ try { Class.forName(driverName); conn = DriverManager.getConnection(url,userName,passWord); } catch (ClassNotFoundException e) { e.printStackTrace(); System.err.println("數據庫鏈接異常"); } catch (SQLException e) { e.printStackTrace(); System.err.println("數據庫鏈接異常"); } } /* 處置事務的函數完善 */ /** * 創立數據庫更新函數 * @param sql 對應的更新sql語句 * @param params 須要附加的參數 * @return true更新勝利 false更新掉敗 */ public boolean update(String sql,String[] params){ int k = 0; try { ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { //這裡是從1開端設置參數的 ps.setString(i+1,params[i]); } k = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); System.err.println("數據庫更新異常"); } return k>0?true:false; } /** * 數據庫查詢函數 * @param sql 要查詢的qsl語句 * @param params 附加參數 * @return 查詢成果集 */ public ResultSet query(String sql,String[] params){ try { ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setString(i+1,params[i]); } rs = ps.executeQuery(); } catch (SQLException e) { e.printStackTrace(); System.err.println("數據庫查詢異常"); } return rs; } /** * 封閉數據庫語句 */ public void close(){ try { if (rs!=null) rs.close(); rs = null; if (ps!=null) ps.close(); ps = null; if (conn!=null) conn.close(); conn = null; } catch (SQLException e) { e.printStackTrace(); } } }
寫成如許,其他類挪用的話可以依照上面辦法.
SQLBean sqlBean = new SQLBean(); String[] params={};//假如有參數則寫出來 ResultSet rs = sqlBean.query("select ename from emp",params);//sql語句 //輪回掏出 try { while(rs.next()){ System.out.println(rs.getString(1)); } } catch (SQLException e) { e.printStackTrace(); sqlBean.close();//異常則封閉銜接 } sqlBean.close();//封閉數據庫銜接
2.事務的處置
事務的處置,老是先撤消主動提交,然後履行敕令,最初提交,然後產生異常則回滾,至於怎樣寫成一個辦法,臨時還沒想到好方法
import bean.SQLBean; import java.sql.*; /** * Created by nl101 on 2016/1/29. */ public class test { public static void main(String[] args) { Connection conn = null; Statement ps =null; String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String userName = "SCOTT"; String passWord = "7946521"; try { Class.forName(driverName); conn = DriverManager.getConnection(url,userName,passWord); conn.setAutoCommit(false);//起首撤消主動提交 ps = conn.createStatement(); ps.addBatch("須要操作的語句1"); ps.addBatch("須要操作的語句2"); ps.addBatch("須要操作的語句3"); ps.addBatch("須要操作的語句4"); ps.executeBatch();//提交下面的敕令 conn.commit();//提交事務 conn.setAutoCommit(true);//開啟主動提交 } catch (ClassNotFoundException e) { e.printStackTrace(); System.err.println("數據庫鏈接異常"); } catch (SQLException e) { e.printStackTrace(); System.err.println("事務處置異常"); try { if (conn!=null){ conn.rollback();//回滾操作 conn.setAutoCommit(true); } } catch (SQLException e1) { e1.printStackTrace(); } }finally {//最初封閉數據庫 try { if (rs != null) rs.close(); rs = null; if (ps != null) ps.close(); ps = null; if (conn != null) conn.close(); conn = null; } catch (SQLException e) { e.printStackTrace(); } } } }
3.挪用存儲進程
call = ct.prepareCall("{call sp_pro4(?,?,?,?,?,?)}"); //設置輸出參數 call.setString(1, "emp"); call.setInt(2, 4); call.setInt(3, 1); //設置輸入參數 call.registerOutParameter(4, OracleTypes.NUMBER); call.registerOutParameter(5, OracleTypes.NUMBER); call.registerOutParameter(6, OracleTypes.CURSOR); //履行 call.execute(); //輸入總數和總頁數 System.out.println("總記載數"+call.getInt(4) +"--總頁數"+call.getInt(5)); //輪回掏出表 ResultSet rs = (ResultSet) call.getObject(6); while(rs.next()){ for (int i = 0; i < 7; i++) { System.out.print(rs.getString(i+1)+" "); } System.out.println(); }
4.可挪動的成果集
sun只是供給了接口.詳細能不克不及操作,這個要看你援用的JDBC驅動能否支撐
import java.sql.*; public class TestScroll { public static void main(String args[]) { try { new oracle.jdbc.driver.OracleDriver(); String url = "jdbc:oracle:thin:@192.168.0.1:1521:SXT"; Connection conn = DriverManager .getConnection(url, "scott", "tiger"); Statement stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,//設置該rs可以轉動 ResultSet.CONCUR_READ_ONLY);//設置該rs為只讀 ResultSet rs = stmt .executeQuery("select * from emp order by sal"); rs.next();//正常下移一行 System.out.println(rs.getInt(1)); rs.last();//指向最初一行 System.out.println(rs.getString(1)); System.out.println(rs.isLast()); System.out.println(rs.isAfterLast()); System.out.println(rs.getRow()); rs.previous();//上移一行 System.out.println(rs.getString(1)); rs.absolute(6);//該辦法直接定位到行號 System.out.println(rs.getString(1)); rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
5.可更新的成果集
import java.sql.*; public class TestUpdataRs { public static void main(String args[]){ try{ new oracle.jdbc.driver.OracleDriver(); String url="jdbc:oracle:thin:@192.168.0.1:1521:SXT"; Connection conn=DriverManager.getConnection(url,"scott","tiger"); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs=stmt.executeQuery("select * from emp2"); rs.next(); //更新一行數據 rs.updateString("ename","AAAA"); rs.updateRow(); //拔出新行 rs.moveToInsertRow(); rs.updateInt(1, 9999); rs.updateString("ename","AAAA"); rs.updateInt("mgr", 7839); rs.updateDouble("sal", 99.99); rs.insertRow(); //將光標挪動到新建的行 rs.moveToCurrentRow(); //刪除行 rs.absolute(5); rs.deleteRow(); //撤消更新 //rs.cancelRowUpdates(); }catch(SQLException e){ e.printStackTrace(); } } }
以上所述是小編給年夜家分享的Java銜接Sql數據庫常常用到的操作,願望對年夜家有所贊助。