posts - 28,comments - 3,trackbacks - 0

          使用JDBC進(jìn)行訪問數(shù)據(jù)庫,首先要確保安裝和運(yùn)行了您選擇的數(shù)據(jù)庫,并且驅(qū)動程序可用。(可以從 http://industry.java.sun.com/products/jdbc/drivers 下載 JDBC 驅(qū)動程序)
          Java與數(shù)據(jù)庫交互通常由以下幾步組成:
               1.裝入數(shù)據(jù)庫驅(qū)動程序 (JDBC 驅(qū)動程序或 JDBC-ODBC 橋) 。
               2.創(chuàng)建數(shù)據(jù)庫的 Connection。
               3.創(chuàng)建一個 Statement 對象。該對象實(shí)際執(zhí)行 SQL 或存儲過程。
               4.創(chuàng)建一個 ResultSet,然后用執(zhí)行查詢的結(jié)果填充(如果目標(biāo)是檢索或直接更新數(shù)據(jù))。
               5.從 ResultSet 檢索或更新數(shù)據(jù)。

          一、實(shí)例化驅(qū)動

          訪問數(shù)據(jù)庫,先裝入 JDBC 驅(qū)動程序,然后由 DriverManager創(chuàng)建與數(shù)據(jù)庫相應(yīng)的驅(qū)動程序的連接來確定。使用Class.forName() 直接裝入,向 DriverManager 注冊
          示例:
          public class Pricing extends Object {

             public static void main (String args[]){

                 String driverName = "JData2_0.sql.$Driver";

                try {
                   Class.forName(driverName);
                } catch (ClassNotFoundException e) {
                   System.out.println("Error creating class: "+e.getMessage());
                }
             }
          }

          二、創(chuàng)建Connection

          示例:
          import java.sql.Connection;
          import java.sql.DriverManager;
          import java.sql.SQLException;

          public class Pricing extends Object {
             public static void main (String args[]){
                String driverName = "JData2_0.sql.$Driver";
                String connectURL = 
                "jdbc:JDataConnect://127.0.0.1/pricing";
                Connection conn = null;   
                try
                {
                   Class.forName(driverName);
                   conn = DriverManager.getConnection(connectURL);
                } catch (ClassNotFoundException e) {
                   System.out.println("Error creating class: "+e.getMessage());
                } catch (SQLException e) {
                    System.out.println("Error creating connection:"+e.getMessage());
                }
                finally {
                   System.out.println("Closing connections...");
                   try {
                      conn.close();
                   } catch (SQLException e) {
                      System.out.println("Can't close connection.");
                   }
                }

             }
          }
          各種數(shù)據(jù)庫使用JDBC連接的方式
          //DB2
          String driverName = "com.ibm.db2.jcc.DB2Driver";
          String connectURL = "jdbc:db2://localhost:5000/sample";
          Class.forName(driverName);
          Connection conn = DriverManager.getConnection(connectURL,”user”,”password”);

          //Oracle(thin模式)
          Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          String url="jdbc:oracle:thin:@localhost:1521:orcl";
          String user="test";
          String password="test";
          Connection conn= DriverManager.getConnection(url,user,password);

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

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

          //MySQL
          Class.forName("org.gjt.mm.mysql.Driver").newInstance();
          String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" Connection conn= DriverManager.getConnection(url);

          //ACCESS
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
          String url="jdbc:odbc:Driver={MicroSoft Access Driver(*.mdb)};DBQ="+application.getRealPath("/Data/MyDb.mdb");
          Connection conn = DriverManager.getConnection(url,"","");
          Statement stmtNew=conn.createStatement() ;

          三、創(chuàng)建 Statement 對象

          Statement 對象用于將 SQL 語句發(fā)送到數(shù)據(jù)庫中。有三種 Statement 對象,它們都作為在給定連接上執(zhí)行 SQL 語句的包容器:Statement、PreparedStatement(它從Statement 繼承而來)和 CallableStatement(它從 PreparedStatement 繼承而來)。它們都專用于發(fā)送特定類型的 SQL 語句: Statement 對象用于執(zhí)行不帶參數(shù)的簡單SQL 語句;PreparedStatement 對象用于執(zhí)行帶或不帶 IN 參數(shù)的預(yù)編譯 SQL 語句(當(dāng)要反復(fù)執(zhí)行某一特定查詢時,PreparedStatement 可能最有用);CallableStatement 對象用于執(zhí)行對數(shù)據(jù)庫已存儲過程的調(diào)用。CallableStatement 和 PreparedStatement之間的一個區(qū)別是:除了通常創(chuàng)建的 ResultSet 之外,CallableStatement 還可以提供 OUT 參數(shù)

          Statement實(shí)例:
          在程序中增加
          import java.sql.Statement;
          在程序生成Connection對象后,利用該對象生成Statement 對象
          Statement statement = null;
                try {
                   statement = conn.createStatement();
                } catch (SQLException e) {
                   System.out.println("SQL Error: "+e.getMessage());
                }

          PreparedStatement實(shí)例
          ...
           statement = conn.prepareStatement("select * from test where "+ "id < ? and id > ?");
           statement.setInt(1, 5);
           statement.setInt(2, 10);
           resultset = statement.executeQuery(); 
          ...
          CallableStatement實(shí)例

          四、執(zhí)行Statement

          Statement 接口提供了三種執(zhí)行 SQL 語句的方法:executeQuery、executeUpdate 和execute。使用哪一個方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。

            方法 executeQuery 用于產(chǎn)生單個結(jié)果集的語句,例如 SELECT 語句。
            方法 executeUpdate 用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個整數(shù),指示受影響的行數(shù)(即更新計(jì)數(shù))。對于 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。
            方法 execute 用于執(zhí)行返回多個結(jié)果集、多個更新計(jì)數(shù)或二者組合的語句。

          示例:
          import java.sql.ResultSet;
          ResultSet Rs = null;
          在生成Statement后執(zhí)行
          Rs = statement.executeQuery("SELECT * FROM test");

          五、ResultSet

          ResultSet 被創(chuàng)建之后,它就有一個引用數(shù)據(jù)集內(nèi)相對位置的“指針”。在 ResultSet語句返回之后(即使表為空),該指針正好位于第一行的“上面”。要到達(dá)實(shí)際數(shù)據(jù)的第一行,應(yīng)用程序調(diào)用 next() 方法。該方法返回一個 Boolean 值,指出在新位置處是否有行存在。如果沒發(fā)現(xiàn)數(shù)據(jù),則 next() 返回 false。
          Getxxx()與wasNull()
          ResultSet.getXXX 方法獲取常見的 JDBC 數(shù)據(jù)類型
          對非常大的行值使用流
          getBinaryStream 返回只提供數(shù)據(jù)庫原字節(jié)而不進(jìn)行任何轉(zhuǎn)換的流。
          getAsciiStream 返回提供單字節(jié) ASCII 字符的流。
          getUnicodeStream 返回提供雙字節(jié) Unicode 字符的流。
          wasNull() 方法來確定是否有特定的數(shù)據(jù)片為空
          while (resultset.next()) {
          //根據(jù)字段名
          System.out.print(resultset.getString("id"));
          //根據(jù)索引
          System.out.print(resultset.getString(2));
          ……
          }
          通過ResultSetMetaData類還可以獲取元數(shù)據(jù)
          ...
          import java.sql.ResultSetMetaData;
          public class Pricing extends Object {
          ...
                Statement statement = null;
                ResultSet resultset = null;
                ResultSetMetaData resultmetadata = null;
                try {
                   statement = conn.createStatement();
                   resultset = statement.executeQuery("select * from products"); 
            
                   //Get the ResultSet information
                   resultmetadata = resultset.getMetaData();
                   //Determine the number of columns in the ResultSet
                   int numCols = resultmetadata.getColumnCount();
            
                   while (resultset.next()) {
                      for (int i=1; i <= numCols; i++) {
                         //For each column index, determine the column name
                         String colName = resultmetadata.getColumnName(i);
                         //Get the column value
                         String colVal = resultset.getString(i);
                         //Output the name and value
                         System.out.println(colName+"="+colVal);
                      }
                      //Output a line feed at the end of the row
                      System.out.println(" ");
                   }
          ...
          不必關(guān)閉 ResultSet;當(dāng)產(chǎn)生它的 Statement 關(guān)閉、重新執(zhí)行或用于從多結(jié)果序列中獲取下一個結(jié)果時,該 ResultSet 將被 Statement 自動關(guān)閉。

          posted on 2006-02-22 09:19 李大嘴 閱讀(428) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 渭源县| 元江| 呼图壁县| 龙门县| 云霄县| 祁门县| 丹巴县| 鹰潭市| 新平| 罗源县| 深水埗区| 大新县| 长岭县| 仁化县| 库伦旗| 丹江口市| 塔河县| 安顺市| 正蓝旗| 泗水县| 南郑县| 三都| 吉林省| 五大连池市| 隆林| 海原县| 尚志市| 罗源县| 罗田县| 孟州市| 桂林市| 嘉禾县| 永定县| 诸暨市| 大丰市| 历史| 犍为县| 建德市| 呼图壁县| 百色市| 七台河市|