一、JDBC基本概念
JDBC(Java DataBase Connectivity)是一组用于连接数据库,执行SQL语句的Java API。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
二、JDBC相关API
Java中用来操作数据库的API都在java.sql与javax.sql包中。类DriverManager,管理JDBC驱动程序的基本服,主要用于加载驱动。
常用方法:
static void registerDriver(Driver driver) //加载一个具体的驱动 如MySql,SQLServer驱动等
static Connection getConnection(String url, String user, String password) //返回一个到指定的数据库的连接
static void deregisterDriver(Driver driver) //从DriverManage的列表中删除一个驱动
接口DataSource,表示到物理数据源的连接。是一种规范,各数据库应用程序开发商可以有具体的实现。
三种实现:1.生成基本的Connection对象
2.生成参与连接池的Connection对象(连接池实现,即由连接池产生Connection对象)
3.分布式事务实现
常用方法:
Connection getConnection() 返回一个与此DataSource表示的数据源的连接
Connection getConnection(String username, String password) //返回一个与此DataSource表示的数据源的连接
void close() // 立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。
接口Connection,与指定数据库的连接。
常用方法
void setAutoCommit() //设置是否为自动提交模式
void commit() //使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection 对象当前持有的所有数据库锁。
void setTransactionIsolation(int level) //将此 Connection对象的事务隔离级别更改为给定的级别。
PreparedStatement prepareStatement(String sql) //预编译一个SQL语句,返回一个执行具体SQL语句的PreparedStatement对象
Statement createStatement() //创建一个Statement对象来执行具体SQL语句
接口Statement,用于执行静态SQL语句,并返回结果集。
常用方法:
void excute(String sql) //执行指定的SQL语句
ResultSet excuteQuerty(String sql) //执行指定的SQL语句,并返回结果集
int excuteUpdate(String sql) //执行指定的SQL语句(insert,update,delete),返回结果表示表在受影响的记录数
ResultSet getResultSet() //以 ResultSet 对象的形式获取当前结果
类PreparedStatement,实现了Statement接口。表示被预编译的SQL语句的对象。SQL语句被预编译并存储在PreparedStatement中,然后可以使用此对象多次地执行该语句。
类ResultSet,保存执行SQL后返回的结果。
ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;
因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
常用方法:
Date getDate(int columnIndex) //以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
int getInt(int columnIndex) //以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值.(获取八种基本类型的方法都有)
Reader getCharacterStream(String columnLabel) //以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
boolean next() //如果还有下一行,返回true,将光标移动到下一行,否则返回false
三、JDBC操作数据库基本流程
首先导入支持具体数据库驱动程序的jar包,以mysql为例
mysql-connector-java-5.1.18-bin.jar
1.加载驱动
2.建立连接
3.创建用于执行SQL语句的Statement对象
4.执行具体SQL语句,得到返回的结果集
5.从结果集中取出数据
四、实例
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Driver;
/**
* @author jiazhengfeng
* @time 2017年4月16日
*/
public class JDBCDemo {
private static String url = "jdbc:mysql://localhost:3306/myjdbc"; //数据库的url地址 jdbc:mysql为协议名称
private static String user = "root"; //数据库用户名
private static String password = "root"; //对应用户名的密码
/**
* @param args
* @throws SQLException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws SQLException {
Connection con = null;
Statement st = null;
ResultSet result = null;
try {
//1.加载驱动(这里是加载mysql的驱动 所以Drive为 com.mysql.jdnc.Driver)
//DriverManager.registerDriver(new Driver()); 不推荐!1.因为会创建两个驱动对象,Drive对象内部已经加载了驱动。2.依赖mysql jar包 导致在其他环境中无法运行。
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
con = DriverManager.getConnection(url, user, password);
//3.获取用于向数据库发送sql语句的statement
st = con.createStatement();
//4.向数据库发送sql语句,获得代表结果集的resultset
String sql = "select id,username,password from user";
result = st.executeQuery(sql);
//5.从结果集中取出数据
while (result.next()) {
System.out.println("id=" + result.getObject(1));
System.out.println("username=" + result.getObject(2));
System.out.println("password=" + result.getObject(3));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
//6.关闭连接,释放资源(释放所有与数据库交互的对象 关闭顺序与声明顺序相反)
if (result != null) {
try {
result.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (con != null) {
try {
st.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}