JDBC入门

JDBC
Java DataBase Connective
java操作数据库的接口规范
两个不同程序之间如果想要通信,必须有一套接口规范,接口规范通常由主导一方定义。
java要操作数据库需要面向JDBC接口进行开发,数据库提供了对接口的实现即数据库的驱动。
进行JDBC开发
1,学习JDBC接口规范,学习组成JDBC的两个包javax.sql.*与java.sql.*
2,在工程中导入响应数据库驱动(JDBC实现)
核心JDBC接口规范
DriverManager驱动管理器
Connection连接
Statement操作状态(子接口PreparedStatement,CallableStatement)
ResultSet结果集

搭建数据库环境
进入MySQL官网http://dev.mysql.com/downloads/connector/j/下载最新的MySQL驱动程序,我这里下载的是:mysql-connector-java-gpl-5.1.35.msi。这是镜像文件,双击就会自动安装,并在C:\Program Files\MySQL文件夹下生成一个MySQL Connector J文件夹。进入该文件夹找到一个名叫mysql-connector-java-5.1.35-bin.jar的文件。
我的java程序安装在D:\Java\jdk1.7.0_15文件夹中,找到该文件夹下的lib文件夹,并将mysql-connector-java-5.1.35-bin.jar复制到lib中。由于安装java程序时,会默认在C:\Program Files\Java\jre中产生一个lib文件夹,进入该文件夹找到ext,双击进入文件夹,同时将mysql-connector-java-5.1.35-bin.jar复制一份放入其中。
在Eclipse中,鼠标选中项目工程,右键点击Build Path,选择Configure Build Path,会跳出一个属性框图。选择Java Build Path下的Libraries,点击Add External JARs,浏览到JDBC的MySQL驱动的jar包,点击确定,将其导入到项目中。

在工程中对数据库进行操作的步骤

// 步骤1,加载数据库驱动
DriverManager.registerDriver(new Driver());
//Class.forNmae("com.sql.jdbc.Driver");一般使用这种方法,第一种会重复加载驱动
// 步骤2,建立数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "ss561");
// 步骤3,将SQL发送给数据库
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("select * from users");
// 遍历结果集
while (rs.next()) {
  System.out.println(rs.getString("name"));
}
// 步骤四,断开连接释放资源
rs.close();
statement.close();
conn.close();

 

JDBC API详解
DriverManager
驱动管理器类
用于加载驱动创建与数据库的连接
DriverMabager.registerDriver(Driver driver);加载数据库驱动的方法
DriverManager.getConnection(url,use,password);建立数据库连接
DriverManager.getDrivers(url);加载多个数据库驱动,根据url的协议标识判断具体使用哪个驱动,在实际开发中并不会直接的使用DriverManager.registerDriver(),所有的数据库厂商默认在类被加载时驱动加载即被执行,即驱动加载是以静态代码块的形式存在于源码里的,所以只需要使用Class.forName("com.sql.jdbc.Driver")加载该Driver驱动类字节码文件对象即可;而且这样也可以避免在程序中实例化具体驱动对象,降低了数据库驱动的依赖性,在驱动类内部通过getDrivers来判断具体使用哪个数据库。

数据库URL
jdbc:mysql://ip:port/database?param
jdbc:oracle:thin:@localhost:1521:sid
在参数部分经常使用的属性useUnicode=true&characterEncoding=UTF-8;参数指定客户端与服务器连接使用的字符集,当客户端编码与服务器端编码不同,通过参数设置编码
例如;客户端gbk 服务器utf-8,参数设置为useUnicode=true&characterEncoding=gbk;这里字符集与客户端编码一致。

Connection接口
一个对象代表一个数据库连接
作用两点
1,获得操作数据库的statement对象
createStatement()---获得普通操作状态对象statement
prepareStatement()---预编译状态对象Statement子接口
prepareCall(String sql)---CallableStatement是prepareStatement的子接口,操作数据库内部存储过程
statement对象可以向数据库发送sql语句,获得ResultSet结果集
2,进行事务控制
setAutoCommit(boolean);开启一个事务
commit();提交一个事务
rollback();回滚一个事务

Statement接口
代表一个操作的状态,操作数据库SQL语句,调用存储过程
excuteQuery(String sql);用于向数据库发送查询语句,select语句,返回值ResultSet结果集
excuteUpdate(String sql);用于向数据库发送insert,update或delete语句,返回值为int,表示受到影响的行数
excute(String sql);可以向数据库发送任何SQL语句,返回值为boolean类型,如果sql结果为ResultSet结果集返回true,否则会返回false
addBatch(String sql);批处理,一次执行多条sql语句,把多条sql语句放到一个批处理中
excuteBatch();向数据库发送一批sql语句执行

ResultSet结果集
用于代表sql语句的执行结果,ResultSet封装执行结果时,采用的类似于表格的方式,ResultSet对象维护了一个指向表格数据行的游标cursor,初始的时候,游标在第一行之前,调用ResultSet.next()方法之后,可以使游标指向具体的数据行,从而获取该行的数据。
getObject(int index)//获取任意类型的数据
getObject(String columnName)
getString(int index)//获取指定类型的数据
getString(String columnName)
Connection还有个Statement createStatement(int resultSetType,int resultSetConcurrency)方法该方法产生Statement对象,该对象将生成具有给定操作类型和并发性的 ResultSet 对象。此方法与上述 createStatement 方法相同,但它允许重写默认结果集类型和并发性。resultSetType - 结果集类型,它是 ResultSet.TYPE_FORWARD_ONLY、 ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE 之一,resultSetConcurrency - 并发类型;它是 ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE 之一这些类型都是ResultSet内部封装的字段常量。
absolute(int row);直接将游标指向结果集的具体行数
updateString(int columnIndex, String x)用 String 值更新指定列。结果集可以更新修改数据不过在更新之后需要确认,即调用updateRow()方法

// 释放资源 标准写法
Class.forName("com.mysql.jdbc.Driver");

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

try {
  conn = DriverManager.getConnection("jdbc:mysql:///day13", "root",
    "123");
  stmt = conn.createStatement();
  rs = stmt.executeQuery("select * from users");
  while (rs.next()) {
    System.out.println(rs.getString("name"));
  }
} catch (SQLException e) {
  e.printStackTrace();
} finally {
  if (rs != null) {
  try {
    rs.close();
  } catch (SQLException sqlEx) {
  }
  rs = null;
  }

  if (stmt != null) {
  try {
    stmt.close();
  } catch (SQLException sqlEx) {
  }

  stmt = null;
  }

  if (conn != null) {
  try {
    conn.close();
  } catch (SQLException e) {
  }
  conn = null;
  }
}

 

因为面向JDBC接口在编程过程中需要重复使用多次对数据库进行操作,所以会出现大量的重复代码,如驱动的加载,数据库的连接,资源的释放等,为了简化开发需要将这些共性重复出现的功能代码抽取出来定义为JDBCUtils工具类中的方法
要熟练JDBC工具类的编写。

posted @ 2015-07-11 22:31  偷月光的贼  阅读(219)  评论(0编辑  收藏  举报