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 李大嘴 阅读(426) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: