JDBC | 3 - PreparedStatement |

Statement 的执行模式采用拼凑字符串的形式,不适合处理一些敏感性字符。

PreparedStatement 执行的是一个完整的具备特殊占位标记的 SQL 语句,并且可以动态地设置所需要的数据。

使用 PreparedStatement 的优点

代码拥有更好的可读性和可维护性。

尽可能提升性能。用Statement对象时,每次执行一个 SQL 命令,都会对它进行解析编译。而使用 PreparedStatement 时,数据库会对 SQL 语句进行预编译,下次执行相同的 SQL 语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率

极大地提高了安全性。传递给 PreparedStatement 对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。从安全性上来看, PreparedStatement 是通过 ? 来传递参数的,避免了拼 sql 而出现 sql 注入的问题,所以安全性较好。

import java.sql.*;

public class Main {
    private static final String DBDRIVER = "com.mysql.jdbc.Driver";
    private static final String DBURL = "jdbc:mysql://localhost:3306/TEACH?characterEncoding=utf-8&useSSL=true";
    private static final String DBUSER = "root";
    private static final String DBPASSWORD = "newpass";
    public static void main(String[] args) throws Exception{
        // 加载数据库驱动程序
        Class.forName(DBDRIVER);

        // 连接数据库
        Connection connection = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
        System.out.println(connection);

        String sql = "INSERT into ELECTIVE VALUES (?,?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,"100");
        preparedStatement.setString(2,"D");
        preparedStatement.setString(3,"99");
        preparedStatement.executeUpdate();

        String sql2 = "SELECT SNO,CNO,SCORE FROM ELECTIVE";
        PreparedStatement preparedStatement1 = connection.prepareStatement(sql2);
        ResultSet resultSet = preparedStatement1.executeQuery();
        while (resultSet.next()){
            String SNO = resultSet.getString("SNO");
            String CNO = resultSet.getString("CNO");
            String SCORE = resultSet.getString("SCORE");
            System.out.println(SNO + " " + CNO + " " + SCORE);
        }
        // 关闭连接
        connection.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值