<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 28,comments - 3,trackbacks - 0

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

    一、實例化驅動

    訪問數據庫,先裝入 JDBC 驅動程序,然后由 DriverManager創建與數據庫相應的驅動程序的連接來確定。使用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());
          }
       }
    }

    二、創建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.");
             }
          }

       }
    }
    各種數據庫使用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() ;

    三、創建 Statement 對象

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

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

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

    四、執行Statement

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

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

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

    五、ResultSet

    ResultSet 被創建之后,它就有一個引用數據集內相對位置的“指針”。在 ResultSet語句返回之后(即使表為空),該指針正好位于第一行的“上面”。要到達實際數據的第一行,應用程序調用 next() 方法。該方法返回一個 Boolean 值,指出在新位置處是否有行存在。如果沒發現數據,則 next() 返回 false。
    Getxxx()與wasNull()
    ResultSet.getXXX 方法獲取常見的 JDBC 數據類型
    對非常大的行值使用流
    getBinaryStream 返回只提供數據庫原字節而不進行任何轉換的流。
    getAsciiStream 返回提供單字節 ASCII 字符的流。
    getUnicodeStream 返回提供雙字節 Unicode 字符的流。
    wasNull() 方法來確定是否有特定的數據片為空
    while (resultset.next()) {
    //根據字段名
    System.out.print(resultset.getString("id"));
    //根據索引
    System.out.print(resultset.getString(2));
    ……
    }
    通過ResultSetMetaData類還可以獲取元數據
    ...
    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(" ");
             }
    ...
    不必關閉 ResultSet;當產生它的 Statement 關閉、重新執行或用于從多結果序列中獲取下一個結果時,該 ResultSet 將被 Statement 自動關閉。

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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲欧洲AV无码专区| 亚洲成人激情小说| h视频在线观看免费| 国产成人免费a在线视频色戒| 亚洲砖码砖专无区2023| 久久经典免费视频| 亚洲一级免费视频| 成年人免费视频观看| 亚洲国产成人久久一区二区三区| 最近2019中文字幕mv免费看| 国产精品亚洲精品| 国产精品四虎在线观看免费| 色视频在线观看免费| 亚洲精品中文字幕无码蜜桃| 日本高清免费观看| 亚洲伊人久久大香线蕉在观| 夭天干天天做天天免费看| 亚洲Aⅴ在线无码播放毛片一线天 亚洲avav天堂av在线网毛片 | 成人免费视频一区| 相泽南亚洲一区二区在线播放| 在线a亚洲v天堂网2018| 一级毛片大全免费播放下载| 亚洲成A人片在线观看WWW| 精品免费人成视频app | 色吊丝免费观看网站| 亚洲日本一区二区三区在线| 最新黄色免费网站| 美女一级毛片免费观看| 亚洲成av人片天堂网| 亚洲欧洲免费无码| 国产99久久久久久免费看| 亚洲AV人人澡人人爽人人夜夜| 亚洲第一成年免费网站| 日日躁狠狠躁狠狠爱免费视频 | 亚洲精品一品区二品区三品区| 免费观看AV片在线播放| 无码精品人妻一区二区三区免费 | 33333在线亚洲| 免费在线观看一级毛片| 久久精品一本到99热免费| 在线观看亚洲电影|