Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79991
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 247
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-02 18:05
文章分类
文章存档

2014年(13)

分类: 网络与安全

2014-01-13 14:18:10

JDBC

一、概述JDBC
   JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。
   从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。

   JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。
   ODBC:基于C语言的数据库访问接口。
   JDBC:是Java版的ODBC。
   JDBC 特性:高度的一致性、简单性(常用的接口只有4、5个)。

驱动程序按照工作方式分为四类:
   1、JDBC-ODBC bridge + ODBC 驱动
      JDBC-ODBC bridge桥驱动将JDBC调用翻译成ODBC调用,再由ODBC驱动翻译成访问数据库命令。
      优点:可以利用现存的ODBC数据源来访问数据库。
      缺点:从效率和安全性的角度来说的比较差。不适合用于实际项目。
   2、基于本地API的部分Java驱动
      我们应用程序通过本地协议跟数据库打交道。然后将数据库执行的结果通过驱动程序中的Java部分返回给客户端程序。
      优点:效率较高。
      缺点:安全性较差。
   3、纯Java的网络驱动
      (中间协议)            (本地协议)
      app    JDBC     纯Java                 中间服务器               DB
      缺点:两段通信,效率比较差
      优点:安全信较好
   4、纯Java本地协议:通过本地协议用纯Java直接访问数据库。
      特点:效率高,安全性好。

二、JDBC 编程的步骤
       import java.sql.*;
   0.参数化
       String driverName = "com.mysql.jdbc.Driver";
       String url = "jdbc:mysql://localhost:3306/test"; //协议;库或服务器名称;服务器IP,端口
       String username = "root";
       String password="";
           /* Oracle的连接
           String driverName = "oracle.jdbc.driver.OracleDriver";
           String url = "jdbc:oracle:thin:@192.168.0.23:1521:ora10g";
           String username = "openlab";
           String password="open123";*/
       //以下这些都需要写在有异常的代码块里,所以需要提取出来。
       Connection conn = null;
       Statement stmt = null;
       ResultSet rs = null;//建议用PreparedStatement
   1.加载和注册数据库驱动
       Class.forName(driverName);//自动注册;需要把驱动的jar包导进来;需处理异常
           /*方法二:实例化具体的Driver驱动,这写法一般不用(不能参数化驱动名,不够灵活)
           Driver driver = new com.mysql.jdbc.Driver();
           DriverManager.registerDriver(driver); //将驱动交于DriverManager托管*/
           /*方法三:Dos运行时,java -Djdbc.drives = oracle.jdbc.driver.OracleDriver; --可多个 */
   2.连接数据库
       conn = DriverManager.getConnection(url, username, password);//需处理异常
       //Connection返回数据库连接,如:“com.mysql.jdbc.Connection@1ffb8dc”;连接不成功则返回 null
   3.创建Statement对象 //为了类型安全和批量更新的效率,改用PreparedStatement
       stmt = conn.createStatement();//需处理异常
       //返回其生成结果的对象"oracle.jdbc.driver.OracleStatement@198dfaf"
   4.操作数据库,执行SQL语句
       String sql = "select * from tableName";//SQL语句里不需要写分号
       rs = stmt.executeQuery(sql); //executeQuery(sqlString) 查询 返回查询结果集
           /* String sql = "insert into tableName values(?,?)"; // ?占位符
           int number = stmt.executeUpdate(sql);//更新,再返回int(更新、修改影响的条数) */
   5.处理数据(游标)
       StringBuffer sb = new StringBuffer(); //缓存;用它可提高读取速度。当然,不用也可以。
       ResultSetMetaData md = rs.getMetaData(); //ResultSetMetaData可获取列的类型和属性信息
       int col = md.getColumnCount(); //获取列的数目
       while(rs.next()){ //rs.next()使游标下移一位,返回boolean,没有下一个结果
阅读(2641) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~