JDBC的操作步驟和執行個體,JDBC操作步驟執行個體

來源:互聯網
上載者:User

JDBC的操作步驟和執行個體,JDBC操作步驟執行個體



  1. 轉載請註明出處,謝謝http://blog.csdn.net/harryweasley/article/details/45689023

    1. •建立一個以JDBC串連資料庫的程式,包含7個步驟:   
    1.  1、載入JDBC驅動程式:   
    1.     在串連資料庫之前,首先要載入想要串連的資料庫的驅動到JVM(Java虛擬機器),   這通過java.lang.Class類的靜態方法forName(String  className)實現。   
    2.     例如:   
    3.    
       try{       //載入MySql的驅動類       Class.forName("com.mysql.jdbc.Driver") ;       }catch(ClassNotFoundException e){       System.out.println("找不到驅動程式類 ,載入驅動失敗!");       e.printStackTrace() ;       }   

    4.    成功載入後,會將Driver類的執行個體註冊到DriverManager類中。

    5.  不同資料庫廠商的驅動類名不同
      Oracle10g:oracle.jdbc.driver.OracleDriver
      MySQL5:com.mysql.jdbc.Driver
      SQLServer2005:com.microsoft.sqlserver.jdbc.SQLServerDriver   
    1.  2、提供JDBC串連的URL   
    1.    •串連URL定義了串連資料庫時的協議、子協議、資料來源標識。   
    2.     •書寫形式:協議:子協議:資料來源標識   
    3.     協議:在JDBC中總是以jdbc開始   
    4.     子協議:是橋串連的驅動程式或是資料庫管理系統名稱。   
    5.     資料來源標識:標記找到資料庫來源的地址與串連連接埠。   

    6.     例如:(MySql的串連URL)   
    7.     jdbc:mysql://localhost:3306/test? ;   

    8. 不同資料庫產品的串連URL不同
      Oracle10g:jdbc:oracle:thin:@主機名稱:連接埠:資料庫SID
      jdbc:oracle:thin:@localhost:1521:ORCL
      MySQL5:jdbc:mysql://主機名稱:連接埠/資料庫名
      jdbc:mysql://localhost:3306/test
      SQLServer2005:jdbc:sqlserver://主機名稱:連接埠:DatabaseName=庫名
      jdbc:sqlserver://localhost:1433:DatabaseName=BookDB
      資料庫的使用者名稱和密碼
  1.  3、建立資料庫的串連   
  1.     •要串連資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,該對象就代表一個資料庫的串連。   
  2.     •使用DriverManager的getConnectin(String url , String username ,  String password )方法傳入指定的欲串連的資料庫的路徑、資料庫的使用者名稱和   密碼來獲得。   
  3.      例如:   
  4.     
     //串連MySql資料庫,使用者名稱和密碼都是root        String url = "jdbc:mysql://localhost:3306/test" ;         String username = "root" ;        String password = "root" ;        try{       Connection con =                 DriverManager.getConnection(url , username , password ) ;        }catch(SQLException se){       System.out.println("資料庫連接失敗!");       se.printStackTrace() ;        }   

  1.  4、建立一個Statement   
  1.     •要執行SQL語句,必須獲得java.sql.Statement執行個體,Statement執行個體分為以下3 種類型:   
  2.       1、執行靜態SQL語句。通常通過Statement執行個體實現。   
  3.       2、執行動態SQL語句。通常通過PreparedStatement執行個體實現。   
  4.       3、執行資料庫預存程序。通常通過CallableStatement執行個體實現。   
  5.     具體的實現方式:   
  6.      
       Statement stmt = con.createStatement() ;          PreparedStatement pstmt = con.prepareStatement(sql) ;          CallableStatement cstmt =                                con.prepareCall("{CALL demoSp(? , ?)}") ;   

  1.  5、執行SQL語句   
  1.     Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate 和execute   
  2.     1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句,返回一個結果集(ResultSet)對象。   
  3.      2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或 DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等   
  4.      3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。   
  5.    具體實現的代碼:   
  6.    
     ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;       int rows = stmt.executeUpdate("INSERT INTO ...") ;       boolean flag = stmt.execute(String sql) ;   

  1.  6、處理結果   
  1.     兩種情況:   
  2.      1、執行更新返回的是本次操作影響到的記錄數。   
  3.      2、執行查詢返回的結果是一個ResultSet對象。   
  4.     • ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些   
  5.       行中資料的訪問。   
  6.     • 使用結果集(ResultSet)對象的存取方法擷取資料:   
  7.    
      while(rs.next()){            String name = rs.getString("name") ;       String pass = rs.getString(1) ; // 此方法比較高效        }   

  8.     (列是從左至右編號的,並且從列1開始)   
  1.  7、關閉JDBC對象    
  1.      操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:   
  2.      1、關閉記錄集   
  3.      2、關閉聲明   
  4.      3、關閉連線物件   
   if(rs != null){   // 關閉記錄集           try{               rs.close() ;           }catch(SQLException e){               e.printStackTrace() ;           }             }             if(stmt != null){   // 關閉聲明           try{               stmt.close() ;           }catch(SQLException e){               e.printStackTrace() ;           }             }             if(conn != null){  // 關閉連線物件            try{               conn.close() ;            }catch(SQLException e){               e.printStackTrace() ;            }             }



8、執行個體:JdbcUtils

我將他們封裝到一個類中,並進行了測試。代碼中解釋很詳細,我就不再進行解釋了。

package com.jdbc.dbutils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class JdbcUtils {/** * 資料庫的使用者名稱 */private final String USER = "root";/** * 資料庫的密碼 */private final String PASSWORD = "123456";/** * 資料庫的驅動資訊 */private final String DRIVER = "com.mysql.jdbc.Driver";/** * 訪問資料庫的地址 */private final String URL = "jdbc:mysql://localhost:3306/test";/** * 資料庫的串連 */Connection connection;/** * sql語句的執行對象 */PreparedStatement preparedStatement;/** * 查詢返回的結果集合 */ResultSet resultSet;public JdbcUtils() {try {Class.forName(DRIVER);System.out.println("註冊驅動成功");} catch (ClassNotFoundException e) {e.printStackTrace();}}/** * 串連資料庫 *  * @return 資料庫的連線物件 */public Connection getConnection() {try {connection = DriverManager.getConnection(URL, USER, PASSWORD);} catch (SQLException e) {e.printStackTrace();}return connection;}/** * 完成對資料庫的表的添加刪除和修改的操作 *  * @param sql * @param params * @return * @throws SQLException */public boolean updateByPrepareStatement(String sql, List<Object> params)throws SQLException {boolean flag = false;int result = -1;// 表示當使用者執行添加刪除和修改的時候所影響資料庫的行數// 建立一個 PreparedStatement 對象來將參數化的 sql 語句發送到資料庫。preparedStatement = connection.prepareStatement(sql);int index = 1;if (params != null && !params.isEmpty()) {for (Object object : params) {// 使用給定對象設定指定參數的值。index從1開始preparedStatement.setObject(index++, object);}}// 在此 PreparedStatement 對象中執行 SQL 陳述式,該語句必須是一個 SQL 資料操作語言語句,比如// INSERT、UPDATE 或 DELETE 語句result = preparedStatement.executeUpdate();flag = result > 0 ? true : false;return flag;}/** * 查詢返回單條記錄 *  * @param sql * @param params * @return * @throws SQLException */public Map<String, Object> findSimpleResult(String sql, List<Object> params)throws SQLException {Map<String, Object> map = new HashMap<String, Object>();int index = 1;// 建立一個 PreparedStatement 對象來將參數化的 sql 語句發送到資料庫。preparedStatement = connection.prepareStatement(sql);if (params != null && !params.isEmpty()) {for (Object object : params) {// 使用給定對象設定指定參數的值。index從1開始preparedStatement.setObject(index++, object);}}// 在此 PreparedStatement 對象中執行 SQL 查詢,並返回該查詢產生的 ResultSet 對象。resultSet = preparedStatement.executeQuery();// 擷取此 ResultSet 對象的列的編號、類型和屬性。ResultSetMetaData metaData = resultSet.getMetaData();int col_len = metaData.getColumnCount();while (resultSet.next()) {for (int i = 0; i < col_len; i++) {// sql資料庫列的下標是從1開始的String col_name = metaData.getColumnName(i + 1);Object col_value = resultSet.getObject(col_name);if (col_value == null) {col_value = "";}map.put(col_name, col_value);}}return map;}public List<Map<String, Object>> findMoreResult(String sql,List<Object> params) throws SQLException {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();int index = 1;// 建立一個 PreparedStatement 對象來將參數化的 sql 語句發送到資料庫。preparedStatement = connection.prepareStatement(sql);if (params != null && !params.isEmpty()) {for (Object object : params) {// 使用給定對象設定指定參數的值。index從1開始preparedStatement.setObject(index++, object);}}// 在此 PreparedStatement 對象中執行 SQL 查詢,並返回該查詢產生的 ResultSet 對象。resultSet = preparedStatement.executeQuery();// 擷取此 ResultSet 對象的列的編號、類型和屬性。ResultSetMetaData metaData = resultSet.getMetaData();int col_len = metaData.getColumnCount();while (resultSet.next()) {Map<String, Object> map = new HashMap<String, Object>();for (int i = 0; i < col_len; i++) {// sql資料庫列的下標是從1開始的String col_name = metaData.getColumnName(i + 1);Object col_value = resultSet.getObject(col_name);if (col_value == null) {col_value = "";}map.put(col_name, col_value);}list.add(map);}return list;}/** * 關閉資料庫 *  * @throws SQLException */public void releaseConn() throws SQLException {if (resultSet != null) {resultSet.close();}if (preparedStatement != null) {preparedStatement.close();}if (connection != null) {connection.close();}}static JdbcUtils jdbcUtils;public static void main(String[] args) throws SQLException {jdbcUtils = new JdbcUtils();jdbcUtils.getConnection();// insert();// update();// query();Morequery();}private static void query() throws SQLException {String sql = "select * from userinfo where pwd = ? ";List<Object> params = new ArrayList<Object>();params.add("123");Map<String, Object> map = jdbcUtils.findSimpleResult(sql, params);System.out.println(map);}private static void Morequery() throws SQLException {String sql = "select * from userinfo  ";List<Map<String, Object>> map = jdbcUtils.findMoreResult(sql, null);System.out.println(map);}/** * 更新資料庫內容 *  * @throws SQLException */private static void update() throws SQLException {String sql = "update userinfo set username =? where id=2";List<Object> params = new ArrayList<Object>();params.add("liumr");jdbcUtils.updateByPrepareStatement(sql, params);}/** * 增加資料 *  * @throws SQLException */private static void insert() throws SQLException {String sql = "insert userinfo (username,pwd) values (?,?)";List<Object> params = new ArrayList<Object>();params.add("liugx");params.add("456");jdbcUtils.updateByPrepareStatement(sql, params);}}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.