JDBC核心API-PreparedStatement

1 PreparedStatement接口介绍

PreparedStatement接口是Statement的子接口。用于执行参数化SQL语句。

让我们看一下参数化SQL语句的示例:

String sql="insert into t_user values(?,?,?)";

上面的SQL语句中,参数(?)作为参数的占位符。?的值将通过调用PreparedStatement的setter方法进行设置。

2 为什么使用PreparedStatement?

提高SQL执行性能:如果使用PreparedStatement接口,JDBC程序的性能将更好,因为SQL仅被编译一次即可。

3 如何获取PreparedStatement对象?

Connection接口的prepareStatement() 方法用于返回PreparedStatement的对象。语法为:

public PreparedStatement prepareStatement(String query)throws SQLException{}

4 PreparedStatement接口的方法

下面列出了PreparedStatement接口的重要方法:

方法 说明
public void setInt(int paramIndex, int value) 将int值赋值给指定索引的参数。
public void setString(int paramIndex, String value) 将String值赋值给指定索引的参数。
public void setFloat(int paramIndex, float value) 将float值赋值给指定索引的参数。
public void setDouble(int paramIndex, double value) 将double值赋值给指定索引的参数。
public int executeUpdate() 执行更新类操作。它用于执行insert、update、delete等SQL。
public ResultSet executeQuery() 执行查询操作。它返回一个ResultSet对象。

5 PreparedStatement插入记录

首先创建t_user表,如下所示:

CREATE TABLE `t_user` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `username` varchar(50) DEFAULT NULL,
   `password` varchar(50) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

5.1 编写InsertDemo

package com.yiidian;

import java.sql.*;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class InsertDemo {
    public static void main(String args[])throws Exception {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

            //预编译SQL语句
            PreparedStatement stmt = con.prepareStatement("insert into t_user(username,password) values(?,?)");
            //给SQL的参数赋值
            stmt.setString(1, "rose");
            stmt.setString(2, "123");

            int i = stmt.executeUpdate();
            System.out.println(i + " 条记录被影响");

            con.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

5.2 运行测试

6 PreparedStatement更新记录

6.1 编写UpdateDemo

package com.yiidian;

import java.sql.*;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class UpdateDemo {
    public static void main(String args[])throws Exception {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

            PreparedStatement stmt=con.prepareStatement("update t_user set username=?,password=? where id=?");
            stmt.setString(1,"jack");
            stmt.setString(2,"123");
            stmt.setInt(3,9);

            int i=stmt.executeUpdate();

            System.out.println(i+" 条记录被影响");

            con.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

6.2 运行测试

7 PreparedStatement删除记录

7.1 编写DeleteDemo

package com.yiidian;

import java.sql.*;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class DeleteDemo {
    public static void main(String args[])throws Exception {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

            PreparedStatement stmt=con.prepareStatement("delete from t_user where id=?");
            stmt.setInt(1,9);

            int i=stmt.executeUpdate();

            System.out.println(i+" 条记录被影响");

            con.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

7.2 运行测试

8 PreparedStatement查询记录

8.1 编写SelectDemo

package com.yiidian;

import java.sql.*;

/**
 * 一点教程网 - http://www.yiidian.com
 */
public class SelectDemo{
    public static void main(String args[])throws Exception {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

            PreparedStatement stmt=con.prepareStatement("select * from t_user");

            ResultSet rs=stmt.executeQuery();

            while(rs.next()){
                System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3));
            }

            con.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

8.2 运行测试

推荐好课