【数据库】JDBC下PrepareStatement测试类的添、删、改 和 查的方法

1. 在程序中加载数据库连接驱动类

以下代码的执行结果均在Navicat的mydb数据库的对应表里面进行刷新查看。

创建一个主类

 

package edu.xalead;
public class JDBCTest {
    public static void main(String[] args) {
        //mysql驱动类
        String driverClass = "com.mysql.jdbc.Driver";
​
        try {
            //加载驱动类到虚拟机
            Class.forName(driverClass);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

2 创建数据库连接接口的实现类对象引用

连接到数据库

package edu.xalead;
​
import java.sql.Connection;
import java.sql.DriverManager;
​
public class JDBCTest {
    public static void main(String[] args) {
        //mysql驱动类
        String driverClass = "com.mysql.jdbc.Driver";
        //添加连接需要的三个属性字符串
        String url = "jdbc:mysql://192.168.93.88:3306/mydb";
        String username = "root";
        String password = "";
​
        //数据库连接接口
        Connection conn = null;
        try {
            //加载驱动类到虚拟机
            Class.forName(driverClass);
​
            //连接数据库
            conn = DriverManager.getConnection(url,username,password);
​
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

3. 创建执行sql语句的接口的实现类对象引用

执行语句

package edu.xalead;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTest {
    public static void main(String[] args) {
        //mysql驱动类
        String driverClass = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://192.168.93.88:3306/mydb";
        String username = "root";
        String password = "";
​
        //数据库连接接口
        Connection conn = null;

        //执行sql语句的接口
        Statement st = null;
        try {
            //加载驱动类到虚拟机
            Class.forName(driverClass);
​
            //连接数据库
            conn = DriverManager.getConnection(url,username,password);
​
            //创建语句对象
            st = conn.createStatement();
            String sql = "begin;";
            st.execute(sql);
            sql = "update Account set account=account - 1000 where id=1; ";
            //st.execute(sql);
            //语句对象的executeUpdate(sql)方法会返回执行成功的记录数
            //注意:这个方法执行添删改等会改变数据的sql语句
            int count = st.executeUpdate(sql);


            sql = "update Account set account=account + 1000 where id=2;";
            st.executeUpdate(sql);


            sql = "commit;";
            st.execute(sql);

        } catch (Exception e) {
            String sql = "rollback;";//回滚
            try {
                st.execute(sql);
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            try {
                if(st != null)
                    st.close();
                if(conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

 

4. 对返回结果的语句创建操作结果集的接口的实现类对象引用

ResultSet结果接口的使用

/**
     * 测试查询
     */
    @Test
    public void testQuery(){
        //mysql驱动类
        String driverClass = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://192.168.93.88:3306/mydb";
        String username = "root";
        String password = "";
        //数据库连接接口
        Connection conn = null;
        //执行sql语句的接口
        Statement st = null;
        //操作数据库返回的查询结果的接口
        ResultSet rs = null;
        try {
            //加载驱动类到虚拟机
            Class.forName(driverClass);
​
            //连接数据库
            conn = DriverManager.getConnection(url,username,password);
​
            //创建语句对象
            st = conn.createStatement();
​
            //执行查询SQL语句
            String sql = "select * from emp";
            rs = st.executeQuery(sql); //拿到查询的结果集了
​
            //操作
            while(rs.next()){
                //取列的值
                System.out.println(rs.getInt(1));
                System.out.println(rs.getString("ename"));
                System.out.println(rs.getString(3));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }  finally {
            try {
                if(st != null)
                    st.close();
                if(conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
​
​
​

 

所以我们一般执行查询时,并不会用Statement语句对象,而是用PrepareStatement

4.1 上面的代码都是Statement语句对象执行添、删、改、查的操作

准备测试方法PrepareStatement查询测试

/**
     * 测试PrepareStatement对象
     */
    @Test
    public void testPrepare(){
        //mysql驱动类
        String driverClass = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://192.168.93.88:3306/mydb";
        String username = "root";
        String password = "";
        //数据库连接接口
        Connection conn = null;
        //执行sql语句的接口
        PreparedStatement prst = null;
        //操作数据库返回的查询结果的接口
        ResultSet rs = null;
        try {

            //加载驱动类到虚拟机
            Class.forName(driverClass);
            //连接数据库
            conn = DriverManager.getConnection(url,username,password);
            String sql = "insert into student(code,name,sex,phone,age,enter_time) values(?,?,?,?,?,?)";
            //创建语句对象
            prst = conn.prepareStatement(sql);

            prst.setInt(1,1243);
            prst.setString(2,"lisi");
            prst.setString(3,"M");
            prst.setString(4,"127346754");
            prst.setInt(5,23);
            -- 字段中存在Date日期时间类型的数据时,需要对java.util.Date包装
            prst.setDate(6,new Date(new java.util.Date().getTime()));

            prst.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        }  finally {
            try {
                if(prst != null)
                    prst.close();
                if(conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

 

准备测试方法PrepareStatement(添加)

PrepareStatement执行带参数查询,不需要复杂的拼接字符串,非常快捷方便

 /**
     * preperStatement准备测试方法(添加)
     */
    @Test
    public void testPrepare() throws Exception {
        //Mysql驱动类名字
        String driverCalss = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://192.168.93.88:3306/mydb";
        String username = "root";
        String password = "";

        //数据库库连接接口
        Connection conn = null;
        //执行sql语句的规范
        PreparedStatement prst = null;
        //数据库的结果集接口
        ResultSet rs = null;

        try {
            /*加载驱动类到虚拟机*/
            Class.forName( driverCalss );

            /*连接数据库*/
            conn = DriverManager.getConnection( url, username, password );

            /*执行查询SQL语句*/
            /*创建带参数的字符串*/
            String sql = "insert into student(code,name,sex,phone,enter_time) values(?,?,?,?,?)";

            /*创建语句对象*/
            prst = conn.prepareStatement( sql );

            /*给问号处添加内容*/
            prst.setInt( 1, 1115 );
            prst.setString( 2, "林东" );
            prst.setString( 3, "男" );
            prst.setString( 4, "15829714323" );
            prst.setDate( 5, new Date( new java.util.Date().getTime() ) );

            //该方法不可行,因为返回的是布尔值。
            //           st.execute(sql);

            //添、删、改要用executeUpdate()
            //准备语句对象(切记括号里不写东西)
            //因为准备语句在创建的时候,
            //已经有sql对象了,且已经给了参数。
            prst.executeUpdate();

//            //结果集
//            rs = prst.executeQuery( sql );

//            ///操作
//            while (rs.next()) {
//                //取列的值查询
//                System.out.println( rs.getInt( "empno" ) );
//                System.out.println( rs.getString( "ename" ) );
//                System.out.println( rs.getString( 3 ) );
//            }
        } catch (Exception e) {
            e.printStackTrace();
//             finally {
//            if (prst != null) {
//                prst.close();
//                if (conn != null) {
//                    conn.close();
//                }
//            }
//        }
        }
    }

 

 准备测试方法PrepareStatement(删除)

/**
     * preperStatement准备测试方法(删除)
     */
    @Test
    public void testPrepare3() {
        //Mysql驱动类名字
        String driverCalss = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://192.168.93.88:3306/mydb";
        String username = "root";
        String password = "";

        //数据库库连接接口
        Connection conn = null;
        //执行sql语句的规范
        PreparedStatement prst = null;
        //数据库的结果集接口
        ResultSet rs = null;

        try {
            /*加载驱动类到虚拟机*/
            Class.forName( driverCalss );

            /*连接数据库*/
            conn = DriverManager.getConnection( url, username, password );

            /*执行查询SQL语句*/
            /*创建带参数的字符串*/
            String sql = "delete from student where name = ? and sex = ?";

            /*创建语句对象*/
            prst = conn.prepareStatement( sql );

            /*给删除问号处内容*/
            prst.setString( 1, "汪洋" );
            prst.setString( 2, "男" );

            //该方法不可行,因为返回的是布尔值。
            //           st.execute(sql);

            //添、删、该要用executeUpdate()
            //准备语句对象(切记括号里不写东西)
            //因为准备语句在创建的时候,
            //已经有sql对象了,且已经给了参数。
            prst.executeUpdate();

//            //结果集
//            rs = prst.executeQuery( sql );

//            ///操作
//            while (rs.next()) {
//                //取列的值查询
//                System.out.println( rs.getInt( "empno" ) );
//                System.out.println( rs.getString( "ename" ) );
//                System.out.println( rs.getString( 3 ) );
//            }
        } catch (Exception e) {
            e.printStackTrace();
//             finally {
//            if (prst != null) {
//                prst.close();
//                if (conn != null) {
//                    conn.close();
//                }
//            }
//        }
        }
    }

 

 准备测试方法PrepareStatement(更新)

 /**
     * preperStatement准备测试方法(更新)
     */
    @Test
    public void testPrepare2() throws Exception {
        //Mysql驱动类名字
        String driverCalss = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://192.168.93.88:3306/mydb";
        String username = "root";
        String password = "";

        //数据库库连接接口
        Connection conn = null;
        //执行sql语句的规范
        PreparedStatement prst = null;
        //数据库的结果集接口
        ResultSet rs = null;

        try {
            /*加载驱动类到虚拟机*/
            Class.forName( driverCalss );

            /*连接数据库*/
            conn = DriverManager.getConnection( url, username, password );

            /*执行查询SQL语句*/
            /*创建带参数的字符串*/
            String sql = "update student set name = ? where code = ?";

            /*创建语句对象*/
            prst = conn.prepareStatement( sql );

            /*给问号处添加内容*/
            prst.setString( 1, "汪洋" );
            prst.setInt( 2, 1116 );

            //该方法不可行,因为返回的是布尔值。
            //           st.execute(sql);

            //添、删、该要用executeUpdate()
            //准备语句对象(切记括号里不写东西)
            //因为准备语句在创建的时候,
            //已经有sql对象了,且已经给了参数。
            prst.executeUpdate();

//            //结果集
//            rs = prst.executeQuery( sql );

//            ///操作
//            while (rs.next()) {
//                //取列的值查询
//                System.out.println( rs.getInt( "empno" ) );
//                System.out.println( rs.getString( "ename" ) );
//                System.out.println( rs.getString( 3 ) );
//            }
        } catch (Exception e) {
            e.printStackTrace();
//             finally {
//            if (prst != null) {
//                prst.close();
//                if (conn != null) {
//                    conn.close();
//                }
//            }
//        }
        }
    }

 

 

5. JDBC事务管理

jdbc中的事务管理是由连接对象来负责的

示例:

package edu.xalead;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
​
public class JDBCTest1 {
    public static void main(String[] args) {
        //mysql驱动类
        String driverClass = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://192.168.93.88:3306/mydb";
        String username = "root";
        String password = "";
​
        //数据库连接接口
        Connection conn = null;
        //执行sql语句的接口
        Statement st = null;
        try {
            //加载驱动类到虚拟机
            Class.forName(driverClass);
​
            //连接数据库
            conn = DriverManager.getConnection(url,username,password);
​
            //创建语句对象
            st = conn.createStatement();
            conn.setAutoCommit(false);//设置自动提交为false,也就是开启了事务
            String sql = null ;
            sql = "update Account set account=account - 1000 where id=1; ";
            st.execute(sql);
            sql = "update Account set account=account + 1000 where id=2;";
            st.execute(sql);
            //提交事务
            conn.commit();
        } catch (Exception e) {
            try {
                //回滚事务
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            try {
                if(st != null)
                    st.close();
                if(conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
​
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_临渔_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值