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
原文地址:https://www.cnblogs.com/afangfang/p/12673123.html