JDBC Java 数据库连接(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
JDBC也是Sun Microsystems的商标。JDBC是面向关系型数据库的。
JDBC 就是用于执行SQL语句的一类Java API,通过JDBC使得我们可以直接使用Java编程来对关系数据库进行操作。通过封装,可以使开发人员使用纯Java API完成SQL的执行。
可以理解一下,IO流类是把程序的一头连在文件上进行读写的操作。JDBC sql类是把程序连在数据库上做CRUD的操作。
(前导知识,学习了解数据库的基本操作和SQL语句。)
一、JDBC基本步骤:
JDBC基本操作流程:连接数据库 --> 发送数据请求,即传统的CRUD指令-->返回操作结果集
(1)加载驱动;
//以mysql为例
Class.forName("com.mysql.jdbc.Driver");
(2)创建Connection对象;
Connection conn = DriverManager.getConnection(url, user, password);
(3)创建Statement对象;执行executeUpdate()或executeQurey()获得结果;
Statement st = conn.createStatement();
st.executeUpdate(sql);
// st.executeQuery(sql);
(4)先后关闭Statement对象和Connection对象。
//rs.close();
st.close();
conn.close();
JDBC常用API和方法说明
接口 | 方法 | 说明 |
---|---|---|
Connection | createStatement() | 创建数据库的操作执行对象 |
prepareStatement(String sql) | 创建参数化的预处理执行对象 | |
prepareCall(String sql) | 创建一个 CallableStatement 对象来调用数据库存储过程 | |
close() | 关闭数据库连接 | |
Statement | execute(String sql) | 执行SQL语句,如果返回值是结果集则为true,否则为false |
executeQuery(String sql) | 执行SQL语句,返回值为ResultSet | |
executeUpdate(String sql) | 执行SQL语句,返回值为所影响的行数 | |
close() | 立即关闭Statement 对象,释放JDBC资源 | |
ResultSet | next() | 将游标下移一行,新的当前行有效,则返回 true;如果不存在下一行,则返回 false |
getString(int index) ;getObject(int index) ;getXxx(String name);getXxx(int index) | 获取此 ResultSet 对象的当前行中指定列的值, 分别是不同的数据类型 | |
close() | 立即关闭ResultSet 对象,释放JDBC资源 |
ResultSetMetaData 用于获取关于 ResultSet 对象中列的类型和属性信息的对象,反射封装时用得较多。
二、JDBC封装
1、基本连接类的封装。(试着完善代码)
封装了对数据的基本操作,连接,更新(增加/修改/删除),查询数据库。
public class ConnectionDB {
/**
* 数据库驱动类名称
*/
private static final String DRIVER = "com.mysql.jdbc.Driver";
/**
* 连接字符串
*/
private static final String URL = "jdbc:mysql://localhost:3306/mydb";
/**
* 用户名
*/
private static final String USERNAME = "root";
/**
* 密码
*/
private static final String USERPASSWORD = "root";
/**
* 创建数据库连接对象
*/
private Connection connnection = null;
/**
* 创建PreparedStatement对象
*/
private PreparedStatement preparedStatement = null;
/**
* 创建CallableStatement对象
*/
private CallableStatement callableStatement = null;
/**
* 创建结果集对象
*/
private ResultSet resultSet = null;
static {
try {
// 加载数据库驱动程序
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
System.out.println("load driver failed!");
System.out.println(e.getMessage());
}
}
/**
* 建立数据库连接
* @return 数据库连接
*/
public Connection getConnection() {
try {
// 获取连接
connnection = DriverManager.getConnection(URL, USERNAME,
USERPASSWORD);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return connnection;
}
/**
* insert update delete SQL语句的执行的统一方法
* @param sql SQL语句
* @param params 参数数组,若没有参数则为null
* @return 受影响的行数
*/
public int executeUpdate(String sql, Object[] params) {
// 受影响的行数
int affectedLine = 0;
// to do ...
return affectedLine;
}
/**
* SQL 查询将查询结果直接放入ResultSet中
* @param sql SQL语句
* @param params 参数数组,若没有参数则为null
* @return 结果集
*/
private ResultSet executeQueryRS(String sql, Object[] params) {
// to do...
return resultSet;
}
/**
* SQL 查询将查询结果:一行一列
* @param sql SQL语句
* @param params 参数数组,若没有参数则为null
* @return 结果集
*/
public Object executeQuerySingle(String sql, Object[] params) {
Object object = null;
// to do...
return object;
}
/**
* 获取结果集,并将结果放在List中
* @param sql SQL语句
* @return List 结果集
*/
public List<Object> excuteQuery(String sql, Object[] params) {
// 执行SQL获得结果集
ResultSet rs = executeQueryRS(sql, params);
// to do...
return list;
}
/**
* 存储过程带有一个输出参数的方法
* @param sql 存储过程语句
* @param params 参数数组
* @param outParamPos 输出参数位置
* @param SqlType 输出参数类型
* @return 输出参数的值
*/
public Object excuteQuery(String sql, Object[] params,int outParamPos, int SqlType) {
Object object = null;
return object;
}
/**
* 关闭所有资源
*/
private void closeAll() {
// 关闭结果集对象
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭PreparedStatement对象
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭CallableStatement 对象
if (callableStatement != null) {
try {
callableStatement.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
// 关闭Connection 对象
if (connnection != null) {
try {
connnection.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
}