码迷,mamicode.com
首页 > 数据库 > 详细

JDBC

时间:2017-07-24 19:15:54      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:链接   建立数据库   制作   部分   jdb   spi   exec   lock   ima   

JDBC介绍

  JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL的Java API,可以为多种关系型数据库提供统一访问。它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。

  JDBC驱动程序实现了JDBC API接口。各个数据库厂家根据JDBC的规范制作的JDBC实现类。

技术分享

JDBC的结构

  • DriverManager:管理JDBC驱动的服务类,匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。
  • Driver:驱动程序接口,处理客户端与服务器的通信。很少使用 Driver对象,而是使用DriverManager管理此类型对象。
  • Statement:SQL语句执行平台接口,将SQL语句提交到数据库。
  • ResultSet:SQL查询语句结果对象接口,是一个迭代器。

 Statement和PreparedStatement

  PreparedStatement 接口继承了Statement接口,PreparedStatement接口更强大,甚至有人主张所有的查询都要使用 PreparedStatement。

  大部分关系型数据库使用JDBC查询数据时会经过四步:

  1. 转换为SQL
  2. 编译SQL
  3. 优化数据查询路径
  4. 执行最后查询并返回数据

  Statement执行查询时都会经历这四步,而PreparedStatement会预先执行1-3步,因此PreparedStatement会更快,并且PreparedStatement能够防止SQL注入,可以使用问号(“?”)做参数,使用setXXX()来为参数赋值。

  PreparedStatement第一次执行时比较慢,所以如果一次执行的语句可以使用Statement,多次执行的语句用PreparedStatement。

Java使用JDBC访问MySql数据库

  导入驱动程序包(mysql-connector-java-version-bin.jar)

  1. 在项目根目录下新建 libs 文件夹
  2. 将驱动程序包复制到 libs 文件夹下
  3. 在驱动程序包上 右键 ->build path -> add build path

  Java程序访问数据库(6步)

   Java访问数据库步骤:

  1. 注册驱动程序
  2. 获取连接
  3. 获取执行对象
  4. 执行SQL语句
  5. 处理结果
  6. 释放资源

  1) 注册驱动程序

  Class.forName("com.mysql.jdbc.Driver");

  DriverManager.registerDriver()方法可以注册驱动程序,通过查看源码发现,在MySql的JDBC Driver实现类中的静态代码块已经实现了注册,所以使用反射方式注册。

  public class Driver extends NonRegisteringDriver implements java.sql.Driver {
      static {
          try {
              java.sql.DriverManager.registerDriver(new Driver());
          } catch (SQLException E) {
              throw new RuntimeException("Can‘t register driver!");
          }
      }
  ……
  }

  2)获取链接Connection

  String url = "jdbc:mysql://localhost:3306/mydb";
  String userName= "root";
  String password = "123";  
  Connection conn = DriverManager.getConnection(url,userName,password);

  3)获取执行对象

  获取执行对象分三种情况

  情况1:执行静态Sql,使用Statement  

  Statement stat = conn.createStatement();

  情况2:执行动态Sql,使用PreparedStatement

  PreparedStatement pst = conn.prepareStatement(sql);

  情况3:执行存储过程,使用CallableStatement  

  CallableStatement 

  4)执行Sql语句(PreparedStatement)

   方式1:executeUpdate用来执行 insert,update,delete 和 DDL语句。执行DDL语句返回 0,执行 Insert,Update,Delete 返回受影响的数据行数。  

  //drop table student; 删除表返回结果为0
  int result = pst.executeUpdate();
  System.out.println(result); 

  //insert into Student(sname,age) values (?,?)
  PreparedStatement pst = conn.prepareStatement(sql);
   pst.setString(1,"张三");
    pst.setInt(2, 20);
  //pst.setObject(1,"张三")
    int result = pst.executeUpdate();
    System.out.println(result);

  方式2:executeQuery,返回结果为ResultSet  

  ResultSet rs = pst.executeQuery();
   if(rs.next()){
     //int id = rs.getInt(0);
int id =rs.getInt("id"); String name = rs.getString("sname"); int age = rs.getInt("age"); System.out.println(id+name+age); }

  方式3:execute

  5)处理结果

  6)释放资源

  ResultSet,PreparedStatement,Connection都需要关闭,顺序为后得到的对象先关闭  

  rs.close();
  pst.close();
  conn.clost();

 

 Connection

java.sql 
接口 Connection

所有超级接口:
Wrapper

public interface Connectionextends Wrapper

 

与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。

Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。此信息是使用 getMetaData 方法获得的。

 

  PreparedStatement

java.sql 
接口 PreparedStatement

所有超级接口:
StatementWrapper
所有已知子接口:
CallableStatement

public interface PreparedStatementextends Statement

表示预编译的 SQL 语句的对象。

SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

 

常用方法

 boolean  execute()

          在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。

 ResultSet  executeQuery()

          在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。

 int  executeUpdate()

          在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。

  

  ResultSet

  

java.sql 
接口 ResultSet

所有超级接口:
Wrapper
所有已知子接口:
CachedRowSetFilteredRowSetJdbcRowSetJoinRowSetRowSetSyncResolverWebRowSet

public interface ResultSetextends Wrapper

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

 

JDBC

标签:链接   建立数据库   制作   部分   jdb   spi   exec   lock   ima   

原文地址:http://www.cnblogs.com/liuyz/p/7128234.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!