JDBC(2)—Statement

  1. 介绍:
    获取到数据库连接之后,就可以对数据库进行一些增、删、改操作,但是却不能进行查询操作。
    增删改操作是程序到数据库的一个操作过程,但是查询是程序到数据库——数据库返回到程序的一个过程。

  2. 步骤:

    • 步骤:
    • 1.获取数据库连接
    • 2.准备插入的语句
    • 3.执行插入、删除、修改
    • 3_1.获取操作SQL语句的Statement对象(通过Connection的createStatement()方法来获取)
    • 3_2.调用Statement对象的executeUpdate(sql),执行SQL语句进行插入
    • 4.关闭Statement对象
    • 5.关闭数据库连接
  3. 注意:
    • 1.Statement用于执行SQL语句的对象
    • 1_1.通过Connection的createConnection()方法来获取
    • 1_2.通过executeUpdate(sql),可以执行sql语句
    • 1_3.传入的sql可以是INSERT、UPDATE、DELETE,但不能是SELECT
    • 2.Connection、Statement都是应用程序和服务器的连接资源,使用后一定要关闭
    • 3.关闭的顺序,先关闭后获取的,即:先Statement后Connection
  4. 实例:

例一

    @Test
    public void testStatement() throws Exception{
        Connection conn = null;
        Statement statement = null;
        try {
            //1.获取数据库连接
            conn = connection_1.getDriverManager();
            //2.准备插入的语句
            //增
            String sql = "INSERT INTO CUSTOMERS (NAME,AGE,BIRTH,address) " +
                    "VALUES ('张辽','13','2004-05-12','河北省')";
            //删
            String sql1 = "DELETE FROM CUSTOMERS WHERE id = 1 ";
            //改
            String sql2 = "UPDATE CUSTOMERS SET NAME = '张辽' WHERE id = '5'";
            //3_1.获取操作SQL语句的Statement对象
            statement = conn.createStatement();
            //3_2.调用Statement对象的executeUpdate(sql)方法,执行SQL语句进行插入
            statement.execute(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(statement != null){
                //4.关闭statement对象
                try {
                    statement.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                //5.关闭数据库连接
                try {
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }   
            }
        }
    }
  1. 工具类TestTools中的一些获取结果集的方法
/**
     * 2.操作数据库,包括增、删、改操作。
     * 获取数据库链接(Connection)之后,使用(Statement)操作数据库,对数据库进行增删改操作。
     */
    public static void getStatement(){
        Connection conn = null;
        Statement statement = null;
        try {
            //1.获取数据库连接
            conn = TestTools.getConnection();
            //2.准备插入的语句
            //增
            String sql1 = "INSERT INTO CUSTOMERS (NAME,AGE,BIRTH,address) " +
                    "VALUES ('王五','23','1995-05-12','河南省')";
            //删
            String sql2 = "DELETE FROM CUSTOMERS WHERE id = 1 ";
            //改
            String sql3 = "UPDATE CUSTOMERS SET NAME = '张辽' WHERE id = '5'";
            //3_1.获取操作SQL语句的Statement对象
            statement = conn.createStatement();
            //3_2.调用Statement对象的executeUpdate(sql)方法,执行SQL语句进行插入
            statement.execute(sql1);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //4.关闭连接
            TestTools.release(statement, conn);
        }
    }

    /**
     * 2_1.通用方法,对2.方法进行了通用性的修改,功能不变包括增、删、改操作。使用Statement进行数据表更新,包括增、删、改操作,但不包括查询。
     * 获取数据库链接(Connection)之后,使用(Statement)操作数据库,对数据库进行增删改操作。
     */
    public static void update(String sql){
        Connection conn = null;
        Statement statement = null;
        try {
            //1.获取数据库连接
            conn = TestTools.getConnection();
            //2.获取操作SQL语句的Statement对象
            statement = conn.createStatement();
            //3.调用Statement对象的executeUpdate(sql)方法,执行SQL语句进行插入
            statement.execute(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //4.关闭连接
            TestTools.release(statement, conn);
        }
    }
    /**
     * 2_2.通用方法,对2_1.方法进行了修改,功能不变包括增、删、改操作。使用PreparedStatement进行数据表更新。
     * Object ... args:表示可变参数。
     * preparedstatement.executeUpdate();该方法用于更新。
     * preparedstatement.executeQuery();该方法用于查询。
     */
    public static void update(String sql ,Object ... args){
        //1.获取链接
        Connection conn = null;
        //2.获取Preparedtatement对象
        PreparedStatement preparedstatement = null;
        try {
            conn = TestTools.getConnection();
            preparedstatement = conn.prepareStatement(sql);
            //3.由于是可变参数,所以使用for循环,设置sql语句的占位符
            for(int i = 1; i < args.length; i++){
                preparedstatement.setObject(i+1, args[i]);
            }
            //4.执行更新
            preparedstatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //5.关闭连接
            TestTools.release(preparedstatement, conn);
        }

    } 
原文地址:https://www.cnblogs.com/tengpengfei/p/10454024.html