官术网_书友最值得收藏!

7.2 JDBC基礎(chǔ)應(yīng)用——數(shù)據(jù)庫連接

本節(jié)首先通過一個(gè)簡單的數(shù)據(jù)連接示例,使讀者能夠快速了解JDBC的相關(guān)知識(shí),然后再詳細(xì)講解JDBC的核心機(jī)制。

7.2.1 JDBC數(shù)據(jù)連接示例

本示例的大體思路是:首先在MySQL數(shù)據(jù)庫服務(wù)器中創(chuàng)建包含有用戶表user的數(shù)據(jù)庫myRegister,然后搭建項(xiàng)目目錄并導(dǎo)入JDBC驅(qū)動(dòng)程序,最后編寫操作數(shù)據(jù)庫表格的代碼。

01 首先在MySQL中建立一個(gè)數(shù)據(jù)庫,名為myRegister,該數(shù)據(jù)庫下有一個(gè)存儲(chǔ)用戶基本信息的表,表名為user,主要字段有id、username(用戶名)和password(密碼),主鍵為id。具體的建立方法參看前面的章節(jié)。最終生成的user表結(jié)構(gòu)如圖7.9所示。

圖7.9 user表結(jié)構(gòu)

02 新建一個(gè)Java項(xiàng)目TestJDBC,其具體設(shè)置如圖7.10所示,接著新建一個(gè)Class文件JDBCExample,其具體設(shè)置如圖7.11所示。

圖7.10 新建TestJDBC項(xiàng)目

圖7.11 新建JDBCExample文件

03 通過7.1.2節(jié)介紹的JDBC配置方法,在本項(xiàng)目中加載JDBC。創(chuàng)建完成后該項(xiàng)目的具體目錄結(jié)構(gòu)如圖7.12所示。

圖7.12 目錄結(jié)構(gòu)

04 創(chuàng)建的JDBCExample文件演示了通過MySQL的JDBC驅(qū)動(dòng)程序,連接到MySQL數(shù)據(jù)庫的myRegister數(shù)據(jù)庫,并輸出該數(shù)據(jù)庫中user表的內(nèi)容,該文件的具體內(nèi)容如下:

      //******* JDBCExample.java **************
      //引入包
      import java.sql.DriverManager;
      import java.sql.Connection;
      import java.sql.Statement;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      public class JDBCExample {
      public static void main(String[] args) {
          try {
              //加載MySQL數(shù)據(jù)庫驅(qū)動(dòng)程序
              Class.forName("com.mysql.jdbc.driver");
              String url = "jdbc:mysql://hostname:3306/myRegister?user=root&password=root";
              Connection conn=DriverManager.getConnection(url);   //創(chuàng)建數(shù)據(jù)庫連接
              Statement stmt=conn.createStatement();            //獲取陳述對(duì)象
              ResultSet rs=stmt.executeQuery("select*from user");  //返回ResultSet對(duì)象
              //遍歷ResultSet對(duì)象中的各個(gè)字段
              while (rs.next()) {
                  System.out.print("用戶的編號(hào): " + rs.getInt(1));
                  System.out.print("\t用戶的名字: " + rs.getString(2));
                  System.out.print("\t用戶的密碼: " + rs.getString(3));
              }
              rs.close();
              stmt.close();
              conn.close();
          } catch (ClassNotFoundException e) {
              System.out.println("找不到指定的驅(qū)動(dòng)程序類!");
          } catch (SQLException e) {
              e.printStackTrace();
          }
      }

運(yùn)行結(jié)果:

      用戶的編號(hào):1  用戶的名字:張  用戶的密碼:0

7.2.2 典型的JDBC數(shù)據(jù)連接的步驟

一個(gè)典型的JDBC數(shù)據(jù)連接的代碼如下:

      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver ");
      String url = " jdbc:microsoft:sqlserver://192.168.0.1;DatabaseName=testDb ";
      Connection con = DriverManager.getConnection(url,"sa","sa");
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("select * from test");
      While(r.next()){
          String s=r.getString("username");
      }

代碼說明:

● Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"),表示在建立連接之前首先要加載對(duì)應(yīng)數(shù)據(jù)庫的驅(qū)動(dòng)程序,如果要連接的是DB2數(shù)據(jù)庫,則相應(yīng)的代碼是Class.forName("com.ibm.db2.jcc.DB2Driver")。

● Connection con = DriverManager.getConnection(url,"sa","sa"),表示建立數(shù)據(jù)庫連接,要傳入連接的地址、數(shù)據(jù)庫的用戶名和密碼,本示例中連接的具體地址是url="jdbc:microsoft:sqlserver://192.168.0.1;DatabaseName=testDb "。

● Statement stmt = con.createStatement(),表示創(chuàng)建Statement對(duì)象,用于將SQL語句發(fā)送到數(shù)據(jù)庫中。JDBC中共有3個(gè)類具有類似的功能:Statement、PreparedStatement和CallableStatement。Statement對(duì)象用于執(zhí)行不帶參數(shù)的簡單SQL語句;PreparedStatement對(duì)象用于執(zhí)行帶或不帶IN參數(shù)的預(yù)編譯SQL語句;CallableStatement對(duì)象用于執(zhí)行對(duì)數(shù)據(jù)庫存儲(chǔ)過程的調(diào)用。

● ResultSet rs = stmt.executeQuery("select * from test"),Statement對(duì)象提供了3種執(zhí)行SQL語句的方法:executeQuery、executeUpdate和execute。executeQuery方法用于產(chǎn)生結(jié)果集的語句;executeUpdate方法用于執(zhí)行INSERT、UPDATE或DELETE語句及數(shù)據(jù)定義語句,executeUpdate的返回值是一個(gè)整數(shù),表示INSERT、UPDATE或DELETE時(shí)更新成功的個(gè)數(shù),對(duì)于數(shù)據(jù)定義語句,executeUpdate的返回值總為零;execute方法用于執(zhí)行能返回多個(gè)ResultSet對(duì)象、多個(gè)更新計(jì)數(shù)或ResultSet對(duì)象與更新計(jì)數(shù)的語句。

● ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法,提供了對(duì)這些行中數(shù)據(jù)的訪問。ResultSet.next方法用于移動(dòng)到ResultSet中的下一行,使下一行成為當(dāng)前行。

● String s=r.getString("username"),表示獲取數(shù)據(jù)庫表中字段名為username的字段值。下面演示了各種數(shù)據(jù)庫使用JDBC連接的方式。

(1)Oracle 8/8i/9i數(shù)據(jù)庫(thin模式):

      Class.forName("oracle.JDBC.driver.OracleDriver").newInstance();
      String url="JDBC:oracle:thin:@localhost:1521:orcl"; //orcl為數(shù)據(jù)庫的SID
      String user="test";
      String password="test";
      Connection conn= DriverManager.getConnection(url,user,password);

(2)DB2數(shù)據(jù)庫:

      Class.forName("com.ibm.db2.jcc.DB2Driver ")
      String url="JDBC:db2://localhost:5000/testDb"; //testDb為數(shù)據(jù)庫名
      String user="admin";
      String password=" admin ";
      Connection conn= DriverManager.getConnection(url,user,password);

(3)MySQL數(shù)據(jù)庫:

      Class.forName("org.gjt.mm.mysql.Driver");
      String url ="JDBC:mysql://localhost/ testDb?user=root&password=sa&useUnicode=true&character
  Encoding=8859_1"
      Connection conn= DriverManager.getConnection(url);

(4)SQL Server 2000數(shù)據(jù)庫:

      Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver") ;
      String url="JDBC:microsoft:sqlserver://localhost:1433;DatabaseName=testDb";
      String user="sa";
      String password="sa";
      Connection conn= DriverManager.getConnection(url,user,password);

(5)PostgreSQL數(shù)據(jù)庫:

      Class.forName("org.postgresql.Driver");
      String url ="JDBC:postgresql://localhost/ testDb "
      String user="postgres";
      String password=" postgres ";
      Connection conn= DriverManager.getConnection(url,user,password);

(6)Access數(shù)據(jù)庫:

      Class.forName("sun.JDBC.odbc.JDBCOdbcDriver") ;
      String url="JDBC:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath
  ("/Data/testDb.mdb");
      Connection conn = DriverManager.getConnection(url,"","");

(7)Sybase數(shù)據(jù)庫:

      Class.forName("com.sybase.JDBC.SybDriver");
      String url =" JDBC:sybase:Tds:localhost:5007/ testDb ";
      Properties sysProps = System.getProperties();
      SysProps.put("user","userid");
      SysProps.put("password","user_password");
      Connection conn= DriverManager.getConnection(url, SysProps);

(8)Informix數(shù)據(jù)庫:

      Class.forName("com.informix.JDBC.IfxDriver");
      String url = "JDBC:informix-sqli:// localhost:1533/ testDb:INFORMIXSERVER=myserver;
      user=testuser;password=testpassword";
      Connection conn= DriverManager.getConnection(url);
主站蜘蛛池模板: 乐都县| 南昌县| 松溪县| 宿州市| 石家庄市| 石河子市| 江西省| 即墨市| 垦利县| 鄄城县| 平邑县| 吉安市| 台江县| 麟游县| 平利县| 崇义县| 肥乡县| 固安县| 平潭县| 广灵县| 海盐县| 唐山市| 松桃| 罗定市| 交口县| 万山特区| 萝北县| 南雄市| 岐山县| 察哈| 微山县| 南康市| 平武县| 上饶县| 平利县| 左贡县| 达州市| 金寨县| 丰县| 麦盖提县| 嘉荫县|