Java中的PreparedStatement接口

PreparedStatement接口继承自Statement接口,用于执行含有或不含有参数的预编译的SQL语句。相对于Statement接口用于执行静态SQL语句,PreparedStatement接口中的SQL语句是预编译的,重复执行的效率会比较高。


PreparedStatement对象用Connection接口中的prepareStatement方法所创建。如:

为SQL语句insert创建一个PreparedStatement对象。5个问号用作参数的占位符分别代表Contacts中一条记录的Name,PhoneNumber,Email,QQ,Note的值。

PreparedStatement preparestatement = connection.prepareStatement("insert into Contacts(Name,PhoneNumber,Email,QQ,Note) values(?,?,?,?,?)");

为SQL语句select语句创建一个PreparedStatemen对象。这条语句中的问号则代表Contacts中的Name的值。

PreparedStatement preparestatement = connection.prepareStatement("select * from Contacts where Name=?");


作为Statement接口的子接口,PreparedStatement接口继承了Statement接口中定义的所有方法,同时还提供在PreparedStatement对象中设置参数的方法。这些方法用来在执行语句或过程之前设置参数的值。一般的设置方法为:

setX(int parameterIndex,X value);

X是参数类型,parameterIndex为语句中的下标(下标从1开始)。比如将参数"Jack"传递给PreparedStatement对象中Name的占位符:

preparedstatement.setString(1, "Jack");

在设置完参数后就可以调用方法executeQuery()或者executeUpdate()执行预备好的语句,使用哪个方法取决于PreparedStatemen对象的功能,查询还是更新。只是这两个方法不需要参数,这与Statement接口中的同名方法不同。因为在创建的时候就已经指定了SQL语句。


以下是参考代码:

public void DriverJdbc() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动程序
            System.out.println("Ok");
            //建立连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost/Contacts?serverTimezone=UTC", "root", "Cc229654512");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
//插入数据
    public void UsePreparedStatement() {
        DriverJdbc();
        try {
            PreparedStatement preparedstatement = connection.prepareStatement("insert into Contacts(Name,PhoneNumber,Email,QQ,Note) values(?,?,?,?,?)");
            //设置参数
            preparedstatement.setString(1, "Jack");
            preparedstatement.setString(2, "12345678912");
            preparedstatement.setString(3, "2233@126.com");
            preparedstatement.setString(4, "1234");
            preparedstatement.setString(5, "蒙面超人");
            //调用executeUpdate()方法
            preparedstatement.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
//查询数据
    public void UsePreparedStatementOut(){
        DriverJdbc();
        try {
            PreparedStatement preparedstatement = connection.prepareStatement("select * from Contacts where Name=?");
            //设置参数
            preparedstatement.setString(1, "Jack");
            //调用executeQuery()方法
            ResultSet resultset=preparedstatement.executeQuery();
            if(resultset.next()){
                resultset.previous();
                while(resultset.next()){
                    System.out.println(resultset.getString(1) + "\t" + resultset.getString(2) + "\t" + resultset.getString(3) + "\t" + resultset.getString(4) + "\t"
                            + resultset.getString(5));
                }
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }


参考资料:Java语言程序设计(进阶篇)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值