`
thaIm
  • 浏览: 90477 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDBC

    博客分类:
  • J2EE
阅读更多
一)什么是JDBC
    也许这个问题过于“入门级”。但由浅入深,咋们零基础开始~~
    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API
    换句话说,写java,当需要与数据库进行交互时,我们就需要用到JDBC来实现其交互功能。也许有些框架(比如hibernate)可以提供另外形式的数据库交互模式,但这些无非是在JDBC的基础上做了更有效的封装。归根结底,java都是通过JDBC与数据库进行交互的。

二)JDBC的使用
  1)样例代码
    典型的样例代码如下:
   // 1.注册驱动
   Class.forName("com.mysql.jdbc.Driver");// 推荐方式
   // 2.建立连接
   String url = "jdbc:mysql://localhost:3306/jdbc";
   String user = "root";
   String password = "";
   Connection conn = DriverManager.getConnection(url, user, password);
 
   // 3.创建语句
   Statement st = conn.createStatement();
 
   // 4.执行语句
   ResultSet rs = st.executeQuery("select * from user");
 
   // 5.处理结果
   while (rs.next()) {
   System.out.println(rs.getObject(1) + "/t" + rs.getObject(2) + "/t"
     + rs.getObject(3) + "/t" + rs.getObject(4));
   }
 
   // 6.释放资源
   rs.close();
   st.close();
   conn.close();


  2)Statement、PrepareStatement与CallableStatement
   先说一下Statement,PreparedStatement和CallableStatement这三个接口的关系式PreparedStatemen继承了Statement,CallableStatement继承了PreparedStatement
   上面的例子也是Statement的使用的例子,而PrepareStatement的例子如下:
stringsql = "select * from people p where p.id = ? and p.name = ?";
preparedstatement ps = connection.preparestatement(sql);
ps.setint(1,id);
ps.setstring(2,name);
resultset rs = ps.executequery();


   首先是两者对比可以发现写法上的不同,其次是一个结论:始终使用PreparedStatement代替Statement
   原因如下:
  1.PreparedStatement的代码的可读性和可维护性更好.
  2.PreparedStatement尽最大可能提高性能.
  3.最重要的一点是极大地提高了安全性(避免恶义SQL和木马注入).

   至于CallableStatement,是用于调用存储过程的。以下是一个简单的例子:
    CallableStatement cs=null;
    //调用update存储过程
    cs=conn.prepareCall("{call pro_update_age_by_birthday(?,?)}");
    cs.setString(1, "1998-02-06");
    cs.setInt(2, 16);
    cs.execute();//将生日为1998-02-06的记录,年龄更新为16岁


三)JDBC详解——JDBC的四种类型
   JDBC的代码一般都这么写,即使用方式相对固定。但其实现机制却种类繁多。归纳起来基本有四种:
   1、jdbc-odbc桥
   2、本地API部分java驱动
   3、网络协议完全java驱动
   4、本地协议完全java驱动
   由于不同的实现机制对最终代码的性能影响明显。所以即使对于JDBC的使用者来说,理清这些实现机制的异同和优缺点还是十分有实际意义的。
  1)jdbc-odbc桥
   Jdbc-odbc 桥 是sun公司提供的,是jdk提供的的标准api. 这种类型的驱动实际是把所有 jdbc的调用传递给odbc ,再由odbc调用本地数据库驱动代码.( 本地数据库驱动代码是指 由数据库厂商提供的数据库操作二进制代码库,接触过C或者.net的朋友可能就会知道,二进制代码库就是那些dll文件。例如在oracle for windows中就是oci dll 文 件)
   其调用顺序是:jdbc-odbc桥 | odbc | 厂商DB代码---------------数据库Server
   由于jdbc-odbc先调用 odbc再由odbc去调用本地数据库接口访问数据库.所以,执行效率比较低,对于那些大数据量 存取的应用是不适合的.而且,这种方法要求客户端必须安装odbc 驱动,所以对于基于 internet ,intranet的应用也是不合适的.因为,你不可能要求所有客户都能找到odbc driver。所以一般是练习时使用,实际项目是不用的。
   样例代码如下:
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
Connection cn = DriverManager.getConnection( "jdbc:odbc:数据源名", "用户名", "口令" );


  2)本地API部分java驱动
   本地api驱动直接把jdbc调用转变为数据库的标准调用再去访问数据库.
   其调用顺序是: 本地api驱动 | 厂商DB代码---------------数据库Server
   这种驱动比起jdbc-odbc桥执行效率大大提高了.但是,它仍然需要在客户端加载数据库厂商 提供的代码库.这样就不适合基于internet的应用.
   其样例代码如下:
  class.forname("com.ibm.db2.jdbc.app.db2driver").newinstance(); 
  string url = "jdbc:db2:sample";
  connection con = drivermanager.getconnection(url, user, password)

   这样JDK就直接调用db2的db2jdbc.dll(厂商DB代码),而不再使用odbc了。

  3)网络协议完全java驱动
   这种驱动实际上是根据我们熟悉的三层结构建立的. jdbc先把对数局库的访问请求传递给网 络上的中间件服务器. 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用 传给数据库服务器.如果中间件服务器也是用java开法的,那么在在中间层也可以使用1,2型 jdbc驱动程序作为访问数据库的方法.
   其调用顺序是: 网络协议驱动---------中间件服务器------------数据库Server
   由于这种驱动是基于server的.所以,它不需要在客户端加载数据库厂商提供的代码库.而且 他在执行效率和可升级性方面是比较好的.因为大部分功能实现都在server端,所以这种驱动 可以设计的很小,可以非常快速的加载到内存中. 但是,这种驱动在中间件层仍然需要有配置 其它数据库驱动程序,并且由于多了一个中间层传递数据,它的执行效率还不是最好.
   其样例代码如下:
class.forname("com.ibm.db2.jdbc.net.db2driver").newinstance(); 
//目标连接db2系统侦听该服务于默认端口6789,需要在数据库教程服务器端启动db2jstrt命令,来开启网络端口。
string url = "jdbc:db2://host:6789:sample"; 
connection con = drivermanager.getconnection(url, user, password); 


  4)本地协议完全java驱动
   这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求.由于4型驱动写的应用可以直接和数据库服务器通讯.这种类型的驱动完全由java实现,因此实现了平台独立性.
   其调用顺序是: 本地协议驱动---------数据库Server
   其样例代码如下:
class.forname("com.ibm.db2.jcc.db2driver").newinstance(); 
string url = "jdbc:db2://host:50000/sample";
connection con = drivermanager.getconnection(url, user, password); 


    最后对这4种类型做个总结:Jdbc-odbc桥由于它的执行效率不高,更适合做为开发应用时的一种过度方案,或着对于初学 者了解jdbc编程也较适用. 对于那些需要大数据量操作的应用程序则应该考虑2,3,4型驱动.在intranet方面的应用可以 考虑2型驱动,但是由于3,4型驱动在执行效率上比2型驱动有着明显的优势,而且目前开发 的趋势是使用纯java.所以3,4型驱动也可以作为考虑对象. 至于基于internet方面的应用就只有考虑3,4型驱动了. 因为3型驱动可以把多种数据库驱 动都配置在中间层服务器.所以3型驱动最适合那种需要同时连接多个不同种类的数据库, 并且对并发连接要求高的应用. 4型驱动则适合那些连接单一数据库的工作组应用。
分享到:
评论

相关推荐

    JDBC简单写法JDBC简单写法JDBC简单写法

    JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单...

    mysql jdbc 驱动 适用于5.7及以上版本数据库

    mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上...

    Spring Data JDBC与JDBC的区别

    JDBC规范   java.sql和javax.sql两个包中的类与接口(天龙八部):  DataSource:数据源  DriverManager:驱动管理  Driver:JDBC驱动  Connection:数据库连接  Statement:语句,执行SQL  PrepareStatement:...

    sqlite-jdbc-3.15.1-API文档-中文版.zip

    赠送jar包:sqlite-jdbc-3.15.1.jar; 赠送原API文档:sqlite-jdbc-3.15.1-javadoc.jar; 赠送源代码:sqlite-jdbc-3.15.1-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.15.1.pom; 包含翻译后的API文档:...

    Java连接达梦数据库驱动dm_jdbc

    Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm7Dictionary.jar dm_jdbc\Dm7JdbcDriver14.jar dm_jdbc\Dm7JdbcDriver15.jar dm_jdbc\Dm7JdbcDriver16....

    sqlite-jdbc-3.34.0-API文档-中文版.zip

    赠送jar包:sqlite-jdbc-3.34.0.jar; 赠送原API文档:sqlite-jdbc-3.34.0-javadoc.jar; 赠送源代码:sqlite-jdbc-3.34.0-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.34.0.pom; 包含翻译后的API文档:...

    log4jdbc监控sql及执行时间

    1、在应用中jdbc url最前面添加jdbc:log4;比如oracle的url就变成了jdbc:log4jdbc:oracle:thin:@x.x.x.x:1521:dbname; 2、在日志系统中设置jdbc.sqlonly、jdbc.sqltiming等日志级别,可直接将log4jdbc doc中的日志...

    jdbc jdbc jdbc

    jdbc jdbc jdbc jdbc jdbc jdbc jdbc jdbc

    mssql-jdbc-8.2.0.jre8-API文档-中文版.zip

    赠送jar包:mssql-jdbc-8.2.0.jre8.jar; 赠送原API文档:mssql-jdbc-8.2.0.jre8-javadoc.jar; 赠送源代码:mssql-jdbc-8.2.0.jre8-sources.jar; 赠送Maven依赖信息文件:mssql-jdbc-8.2.0.jre8.pom; 包含翻译后...

    适用于 SQL Server 2014、2012、2008R2的JDBC Drivers 4.1

    它属于 Type 4 JDBC 驱动程序,通过 Java 平台(企业版 5、6 和 7)中可用的标准 JDBC 应用程序接口 (API) 提供数据连接。 适用于 SQL Server 的 Microsoft JDBC Driver 4.1(预览版)与 JDBC 4.0 兼容,并且可以在...

    sqljdbc4.jar和sqljdbc.jar下载

    sqljdbc.jar 类库提供对 JDBC 3.0 的支持。 sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。 注意: JDBC Driver 2.0 不支持 JRE 1.4。...

    JDBC-ODBC BRIDGE PATCH for JDK 1.6/1.7 64bit

    SUN JDK 1.6/1.7 64bit的JDBC-ODBC Bridge有个缺陷:会随机抛出异常如下,在所有的ODBC Driver上。 java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid string or buffer length at sun.jdbc.odbc....

    taos-jdbcdriver-2.0.4.jar

    TDengine 的 JDBC 驱动实现尽可能的与关系型数据库驱动保持一致,但时序空间数据库与关系对象型数据库服务的对象和技术特征的差异导致 taos-jdbcdriver 并未完全实现 JDBC 标准规范。在使用时需要注意以下几点: ...

    hive-jdbc hive jdbc驱动

    hive-jdbc

    sqlserver驱动包 jdbc驱动 sqljdbc.jar和sqljdbc4.jar

    sqlserver驱动包 jdbc驱动 sqljdbc.jar sqljdbc4.jar jdbc连接sqlserver数据库驱动, sqljdbc.jar和sqljdbc4.jar均有

    Microsoft SQL Server 2008 JDBC 3.0(微软官网下载)

    SQL Server JDBC Driver 3.0,这是一个 Type 4 JDBC 驱动程序,它通过 Java Platform, Enterprise Edition 5 及更高版本中可用的标准 JDBC 应用程序编程接口 (API) 提供数据库连接。 系统要求: •支持的操作系统:...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    Microsoft SQL Server JDBC Driver 3.0.JSP驱动。

    SpringBoot中封装jdbc工具类

    现在的数据层的开发,大多会使用...但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: ...

    JDBC 解析JDBC中文API

    JDBC 解析JDBC中文API各种数据库之间的链接问题,网络编程

Global site tag (gtag.js) - Google Analytics