PreparedStatement 的简单使用

PreparedStatement 的简单使用

是什么 ?

  • PreparedStatement是一个继承自Statement的接口,它可以预编译SQL语句

为什么出现 ?

Statement的不足:

1、大量字符串拼接,代码可读性降低;

2、sql注入

sql注入是 ?一个bug

通过字符串的拼接,可以得到一个恒等的sql语句,可以跳过某些判断

  • Statement多了提供参数化查询的特性

有什么优势 ?

  • 创建PreparedStatement时,将SQL查询作为参数传递
    这个PreparedStatement包含一个预编译的SQL查询,所以当PreparedStatement被执行时,DBMS可以只运行查询,而不是首先编译它。
  • 我们可以使用相同的PreparedStatement,并在执行时提供不同的参数
  • preparedstatement的一个重要优点是它们可以防止SQL注入攻击

该接口的使用

tips:
以下代码中包含工具类的使用,异常也没有做相应处理。

1、建立链接

// 1、建立连接
connection = JDBCUtil.getConnection();

2、写SQL语句

// 2、写SQL
String sql = "select * from account where username = ? and password = ?";

3、创建PreparedStatement对象预编译

// 3、预编译
pstmt = connection.prepareStatement(sql);

4、对占位符赋值(执行参数)

// 4、占位符赋值
pstmt.setString(1,username);
           pstmt.setString(2,password);

image

5、执行SQL

// 5、正式执行 sql
ResultSet resultSet1 = pstmt.executeQuery();

PreparedStatement的一些方法

  • setlnt(int, int):该方法可用于在给定的参数索引处设置整型值。
  • setString (int, string):这个方法可以用来在给定的参数索引处设置字符串值。
  • setFloat(int, float):这个方法可以用来在给定的参数索引处设置float值。
  • setDouble (int, double):该方法可用于在给定的参数索引处设置一个双精度值。
  • executeUpdate():该方法可用于创建、删除、插入、更新、删除等。返回int类型,指受影响的行数(即更新计数)。
  • executeQuery():在执行选择查询时返回ResultSet的一个实例。

关闭连接

不要忘了关闭连接哇~~

小例子

/**
* 查询 id = 1 学生的总成绩
*/
    @Test
    public void testPst(){
            // 建立连接
            Connection conn = JDBCUtil.getConnection();
            String sql = "SELECT stu.name,sum(sc.score)\n" +
                    "FROM student stu\n" +
                    "LEFT JOIN scores sc ON sc.s_id = stu.id\n" +
                    "LEFT JOIN course c ON sc.c_id = c.id\n" +
                    "WHERE stu.id = 1";

            // 预编译
            PreparedStatement pst = conn.prepareStatement(sql);
          // 执行SQL
            ResultSet res = pst.executeQuery();
            while (res.next()){
                        // 我把这里的一个参数看作是你想查看的信息
                String name = res.getString("stu.name");
                int sum = res.getInt("sum(sc.score)");
                System.out.println(name + " " + sum);
            }
 @Test
    public void testPst02(){
        /**
         * 增加老师
         */
            Connection conn = JDBCUtil.getConnection();
            String sql = "INSERT INTO teacher VALUES(7,\"李老师\")";

            PreparedStatement pst = conn.prepareStatement(sql);
            int i = pst.executeUpdate();  // 这里返回值是整数 ~
            if (i == 1) {
                System.out.println("更新成功!");
            }
	}

或者这样:

参考:https://www.geeksforgeeks.org/how-to-use-preparedstatement-in-java/

posted @ 2022-08-19 14:50  来日可追  阅读(172)  评论(0编辑  收藏  举报