JDBC
JDBC全称:Java DataBase Connectivity;是由SUN公司提供的一套通用的Java连接数据的标准(接口),这套接口用于屏蔽数据库之间的差异(方言),使得Java程序员可以专注于处理数据而不需要考虑数据库之间的差异;
使用JDBC的步骤
1. 加载数据库驱动
2. 获取数据库连接对象
3. 获取处理SQL语句的对象
4. 执行SQL语句
5. 处理结果
6. 关闭资源
案例:
// 1.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
// 3.获取处理sql语句的对象
PreparedStatement stat = conn.PrepareStatement("insert into user(username,password,nickname) values('softeem','soft123','张三')");
// 4.执行sql(当执行结果为resultset(执行select操作时)时返回值为true,其他任何时候都是false)
boolean f = stat.executeUpdate();
// 5.处理结果
System.out.println("执行结果:"+f);
// 6.关闭资源
stat.close();
conn.close();
看完这段代码,相信很多都已经很晕了,毕竟是有点记不住;细心的人会发现,上图中很多代码是不变的,是固定的写法的,因此这样就可以封装起来,需要的时候就去调用就可以了,这样就简单明了;
JDBC封装
定义常量
定义常量,方便后序的修改方便
/**驱动类路径*/
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
/**URL地址*/
private static final String URL = "jdbc:mysql://127.0.0.1:3306/test";
/**登录数据库服务器的账号*/
private static final String USER = "root";
/**登录数据库服务器的密码*/
private static final String PASSWORD = "123456";
获取数据库连接对象
数据库连接对象的语句基本没有需要更改的地方,所以我们可以将其封装起来
/**
* 返回数据库连接对象
* @return
*/
public static Connection getConn(){
try {
return DriverManager.getConnection(URL,USER,PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
关闭资源
当我们操作完成时需要关闭资源,这些方法也是固定的,所以我们可以将其封装起来
/**
* 关闭资源
* @param rs
* @param stat
* @param conn
*/
public static void close(ResultSet rs, Statement stat,Connection conn){
try {
if (rs != null){
rs.close();
}
if (stat != null){
stat.close();
}
if (conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
封装通用的更新操作
更新,删除和修改的操作非常类似,所以我们可以将其一起封装,只需要从外部输入SQL语句和SQL语句需要的参数即可。
具体的实现思维写在了代码的注释上
/**
* 封装通用的更新操作(即通过该方法实现对弈任意数据表的insert,update,delete操作)
* @param sql 需要执行的SQL语句
* @param params 执行SQL语句时需要传递进去参数
* @return 执行结果
*/
public static boolean exeUpdate(String sql,Object... params){
//获取连接对象
Connection conn = getConn();
PreparedStatement ps = null;
try {
//获取预编译对象
ps = conn.prepareStatement(sql);
//执行参数赋值操作
if(Objects.nonNull(params)){
//循环将所有的参数赋值
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
}
//执行更新
return ps.executeUpdate() > 0;
} catch (SQLException e) {
e.printStackTrace();
} finally {
//关闭资源
DBUtils.close(null,ps,conn);
}
return false;
}
这样,我们的更新操作就封装好了。