PreparedStatement实现表数据的增删改 & 封装数据库链接和关闭操作
PreparedStatement实现表数据的增删改
PreparedStatementUpdateTest
package com.aff.PreparedStatement; import java.io.InputStream; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.text.SimpleDateFormat; import java.util.Properties; import org.junit.Test; import com.aff.utils.JDBCUtils; //使用PreparedStatementUpdateTest,实现数据表的增删改查操作 //增 删 改 不需要返回的 void //查询 需要返回的 public class PreparedStatementUpdateTest { //测试通用的增删改方法 @Test public void testCommonUpdate() throws Exception{ // String sql= "delete from customers where id = ?"; // update(sql, 4); String sql ="update `order` set order_name=? where order_id =?"; update(sql, "文静",2); } // 通用的增删改操作 public void update(String sql, Object... args) {//sql中占位符的个数与可变形参的长度一致 // 1.获取数据库连接 Connection conn = null; // 2.预编译sql语句,返回PreparedStatement实例 PreparedStatement ps = null; try { conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); // 3.填充占位符 for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]);//小心参数声明错误 } // 4.执行 ps.execute(); System.out.println("执行成功"); } catch (Exception e) { e.printStackTrace(); }finally { // 5.资源的关闭 JDBCUtils.closeResource(conn, ps); } } // 修改customer表的一条记录 @Test public void testUpdate() { // 1.获取数据库连接 Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.getConnection(); // 2.预编译sql语句,返回PreparedStatement实例 String sql = "update customers set name = ?where id =?"; ps = conn.prepareStatement(sql); // 3.填充占位符 ps.setString(1, "何苗");// 可以使用setObject 如:ps.setObject(1, "何苗"); ps.setInt(2, 18); // 4.执行 ps.execute(); System.out.println("修改成功"); } catch (Exception e) { e.printStackTrace(); }finally { // 5.资源的关闭 JDBCUtils.closeResource(conn, ps); } } // 向customer表添加一条记录 @Test public void testInsert() { // 3.获取连接 Connection conn = null; // 为占位符 PreparedStatement ps = null; try { // 1.读取配置文件中的4个基本信息,通过类加载器 // InputStream is = // TestConnection.class.getClassLoader().getResourceAsStream("jdbc.properties"); InputStream is =ClassLoader.getSystemClassLoader()
.getResourceAsStream("jdbc.properties"); Properties pro = new Properties(); // 加载is这个文件 pro.load(is); // 读取其中的配置信息 String user = pro.getProperty("user"); String url = pro.getProperty("url"); String password = pro.getProperty("password"); String driverClass = pro.getProperty("driverClass"); // 2.加载驱动 Class.forName(driverClass); conn = DriverManager.getConnection(url, user, password); System.out.println(conn); // 4.预编译sql语句,返回preparedStatement的实例 String sql = "insert into customers(name,email,birth)values(?,?,?)";// ? ps = conn.prepareStatement(sql); // 5.填充占位符 ps.setString(1, "芳芳"); ps.setString(2, "2662123933@qq.com"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = sdf.parse("1996-3-4"); ps.setDate(3, new Date(date.getTime())); // 6.执行操作 ps.execute(); System.out.println("插入成功"); } catch (Exception e) { e.printStackTrace(); } finally { // 7.资源的关闭 try { if (conn != null) ps.close(); } catch (Exception e) { e.printStackTrace(); } try { if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } } }
封装数据库链接和关闭操作
JDBCUtils
package com.aff.util; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Properties; //操作数据库的工具类,一般都是静态方法 //获取数据库连接 public class JDBCUtils { // 返回Connection public static Connection getConnection() throws Exception { // 1.读取配置文件中的4个基本信息,通过类加载器 InputStream is = ClassLoader.getSystemClassLoader()
.getResourceAsStream("jdbc.properties"); Properties pro = new Properties(); // 加载is这个文件 pro.load(is); // 读取其中的配置信息 String user = pro.getProperty("user"); String url = pro.getProperty("url"); String password = pro.getProperty("password"); String driverClass = pro.getProperty("driverClass"); // 2.加载驱动 Class.forName(driverClass); // 3.获取连接 Connection conn = DriverManager.getConnection(url, user, password); return conn; } // 关闭数据库的连接和PreparedStatement的操作 // PreparedStatement是statement的子接口,所以下面的参数也可以写Statement public static void closeResource(Connection conn, PreparedStatement ps) { // 7.资源的关闭 try { if (ps != null) ps.close(); } catch (Exception e) { e.printStackTrace(); } try { if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } public static void closeResource(Connection conn, PreparedStatement ps, ResultSet rs) { // 7.资源的关闭 try { if (ps != null) ps.close(); } catch (Exception e) { e.printStackTrace(); } try { if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } try { if (rs != null) rs.close(); } catch (Exception e) { e.printStackTrace(); } } }
All that work will definitely pay off