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.utils;

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 (conn != 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 (conn != null)
                ps.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            if (rs != null)
                rs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

PreparedStatement实现表数据的增删改 & 封装数据库链接和关闭操作

上一篇:mysql慢查询分析工具比较与实战


下一篇:Redis的 RDB和 AOF持久化的区别