程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JDBC介紹,jdbc連接數據庫

JDBC介紹,jdbc連接數據庫

編輯:JAVA綜合教程

JDBC介紹,jdbc連接數據庫


1.DriverManager用來建立和數據庫的鏈接以及管理JDBC驅動程序

driverManager的常用方法

方法 描述 registerDriver(Driver driver) 在DerverManager中注冊JDBC驅動程序 getConnection(String url,String user,String pwd) 建立和數據庫的連接,返回Connection對象 setLoginTime(int seconds) 設定等待數據庫連接的最長時間 setLogWriter(PrintWriter out) 設定輸出數據庫日志的PrintWriter對象

2.Connection代表Java程序和數據庫的連接

Connection的常用方法

方法 描述 getMetaData()  獲取一個 DatabaseMetaData 對象,該對象包含關於此 Connection 對象所連接的數據庫的元數據。例如當前數據庫連接的用戶名,數據庫的最大連接數,以及數據庫的版本等。 createStatement() 創建並返回Statement對象 prepareStatement(String sql) 創建一個 PreparedStatement 對象來將參數化的 SQL 語句發送到數據庫。

3.Statement用來執行靜態的SQL語句。例如:對於insert,update和delete語句,可以調用executeUpdate(String sql)的方法;對於select語句,可以調用executeQuery(String sql方法),這個方法返回一個ResultSet對象。

例如:

String sql="select id,name,title,price from books where name='tom' and price=40";

ResultSet rs=stmt.executeQuery(sql);//stmt為Statement對象

4.PreparedStatement用來執行動態的SQL語句。

例如:

String sql="select id,name,title,price from books where name=? and price=?";

在這種情況,用PreparedStatement比Statement更方便,因為PreparedStatement允許sql語句中包含參數。

PreparedStatement具體使用如下:

(1)生產PreparedStatement對象。例如:SQL語句中name的值和price的值都用"?"來替代,他們表示兩個可以被替換的參數:

  String sql="select id,name,title,price from books where name=? and price=?";

  PrepareStatement prepStmt=conn.prepareStatement(sql);

(2)調用PreparedStatement的setxxx方法,給參數賦值:

  prepStmt.setString(1,"tome");

  prepStmt.setString(2,40);

(3)執行SQL語句:

  ResultSet=prepStmt.executeQuery();

5.ResultSet表示select語句查詢得到的記錄集合。

(1)ResultSet的記錄行號從1開始,一個Statement對象在同一時刻只能打開一個ResultSet對象。調用ResultSet的next()方法可以使游標定位到下一條記錄。調用ResultSet的getxxx()方法可以取得某個字段的值。

(2)ResultSet既可以通過字段的序號來指定字段,也可以通過字段的名字來指定字段。

例如:

String sql="select id,name,title,price from books where name='tome' and price=40";

ResultSet rs=stmt.executeQuery(sql);

如果要訪問id字段,可以用

rs.getString(1); 或者rs.getString("id");

如果要取出ResultSet中所有記錄,可以采用下面的循環語句:

while(rs.next()){

  String col1=rs.getString(1);

  String col2=rs.getString(2);

  String col3=ts.getString(3);

  float col4=rs.getFloat(4);

}

6.總結介紹JDBC訪問數據庫的步驟

  (1)裝載並注冊數據庫JDBC驅動程序,(其中JDBC-ODBC Driver是在JDK中自帶的,默認已經注冊,所以不需要再注冊)

    //裝載JdbcOdbcDriver.class(只需要裝載,不需要注冊)

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    //裝載並注冊SQLServerDriver

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

    java.sql.DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());

    //裝載並注冊OracleDriver

    Class.forName("oracle.jdbc.driver.OracleDriver");

    java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

    //裝載並注冊MySQLDriver

    Class.forName("com.mysql.jdbc.Driver");

    java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());//這個注冊不上必要的

    說明:

      對於mysql的驅動程序類com.mysql.jdbc.Driver,在JVM加載這個類時,會執行以下靜態代碼

      static{

        try{

          java.sql.DriverManager.registerDriver(new Driver());

        }catch(){

          throw new RuntimeException("..");

        }

        ....

      }

      所以程序中只要通過Class.forName方法加載mysql driver類即可,可以不需要再注冊。

  (2)建立與數據庫的連接

    Connection conn=java.sql.DriverManager.getConnection(url,user,password);

    mysql: url="jdbc:mysql://localhost:3306/dbName";

  (3)創建Statement對象,准備調用SQL語句

    Statement stmt=conn.createStatement();

  (4)調用SQL語句:

    String sql="select id,name,title,price from books where name='tom' and price=40";

    ResultSet rs=stmt.executeQuery(sql);

  (5)訪問ResultSet中的記錄集    

  (6)一次關閉 ResultSet,Statement和Connection對象:

    rs.close();

    stmt.close();

    conn.close();

 7.事務處理

  (1)在Connection類中提供了3個控制事物的方法:

    setAutoCommit(boolean autoCommit);設置是否自動提交事物

    commit();提交事物

    rollback();回滾事物

  (2)在DJBC API中,默認情況下為自動提交事物。可以通過調用setAutoCommit(false)來禁止提交事物。

    try{

      con.java.sql.DriverManager.getConnection(dbUrl,user,dbPwd);

      //禁止自動提交,設置回滾點

      con.setAutoCommit(false);

      stmt=con.createStatement();

      //數據庫更新操作1

      stmt.executeUpdate("update account set money=money-1000 where name='zhangsan'");

      //數據庫更新操作2

      stmt.executeUpdate("update account set money=money+1000 where name='lisi'");

      //事物提交

      con.commit();

    }catch(Exception e){

      e.printStackTrace();

      //操作不成功事物回滾

      con.rollback();

    }finally{

      stmt.close();

      con.close();

    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved