将数据库连接方法和资源关闭方法封装在一个类中,之后直接调用方法来实现数据库的连接和资源的关闭
对数据库进行操作,必然是需要用到数据库连接以及关闭,所以将两个方法封装在utils包下的JDBCUtils.Class中。
数据库连接方法如下:
public static Connection getConnection() throws Exception {
InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(inputStream);
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String Driver = properties.getProperty("Driver");
Class.forName(Driver);
Connection conn = DriverManager.getConnection(url,user,password);
return conn;
}
数据库以及各类资源关闭方法如下:
public static void closeResourse(Connection conn, PreparedStatement ps){
try {
if(ps != null)
ps.close();
if(conn !=null)
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
利用Preparestatement实现向Customers数据库中插入一条记录
1.连接数据库。
2.获取Preparement实例。写出插入记录的sql语句,利用Connetion类中的prepareStatement()方法获取PrepareStatement实例。(预编译sql语句)
3.填充占位符。占位符的索引应该从1开始,每一个数字对应的是第几个占位符
4.利用ps.execute()方法执行sql语句
5.关闭资源
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JDBCUtils.getConnection();
/*
获取PreparedStatement实例
*/
String sql = "insert into customers(name,email,birth) values(?,?,?)";
ps = conn.prepareStatement(sql);
ps = conn.prepareStatement(sql);
/*
填充占位符
*/
ps.setString(1,"gyx");
ps.setString(2,"gyx@.com");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd");
java.util.Date data = sdf.parse("2001--04--15");
ps.setDate(3,new Date(data.getTime()));
/*
执行sql
*/
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResourse(conn,ps);
}
利用PrepareStatement实现对Customers数据库的修改、删除操作
相比于对Customers数据库的插入记录操作,修改和删除操作实现的步骤基本相同。只是执行的sql语句不同。
Connection conn = null;
PreparedStatement ps = null;
try {
/*
获取数据库连接
*/
conn = JDBCUtils.getConnection();
/*
预编译sql语句,返回PreparedStatement实例
*/
//修改记录
String sql = "update customers set name = ? where id = ?";
//删除记录
String sql = "delete from customers where id = ?";
ps = conn.prepareStatement(sql);
/*
填充占位符
*/
ps.setString(1,"莫扎特");
ps.setInt(2,18);
/*
执行sql语句
*/
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}finally {
/*
关闭连接
*/
JDBCUtils.closeResourse(conn,ps);
}
针对于不同表的通用增删改操作
数据库中往往都有多张表,所以将执行sql语句和占位符的个数作为参数封装在一个方法中,然后调用改方法。可以来实现我们对数据库中的不同的表进行增删改
public void testUpdate(String sql,Object ...args){//sql中占位符的个数与可变形参的个数相同
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JDBCUtils.getConnection();
//预编译sql语句
ps = conn.prepareStatement(sql);
//填充占位符
for(int i=0;i< args.length;i++){
ps.setObject(i+1,args[i]);
}
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResourse(conn,ps);
}
}
测试调用如下:
@Test
public void testConmmonUpdate(){
String sql = "delete from customers where id = ?";
testUpdate(sql,3);
String sql = "update `order` set order_name = ? where order_id = ?";
testUpdate(sql,"DD","2");
}