MySQL学习笔记(10)

使用PreparedStatement实现CRUD操作(增删改查)

PreparedStatement:Statement的子接口

使用PreparedStatement的原因是Statement存在一些弊端,将会在稍后阐释

此外,还有CallableStatement用于执行SQL存储过程。在本内容中暂不涉及

Statement 示例

用户名 密码 是否正确

1. 需要拼串

假设使用statement执行SQL语句

Select user, password from table_user where user = 'AA' and password = '123456';

那么,实际上使用statement的代码内容为:

String sql = "
SELECT user,password FROM user_table WHERE USER = 
'" + userName + "' 
AND 
PASSWORD = 
'" + password + "'
";

如上所示,使用statement时,需要执行拼串操作,这对于编写而言比较难懂

2. (实际问题) SQL注入

String sql = "SELECT user,password FROM user_table WHERE USER = '1' or ' AND PASSWORD = ' ='1' or '1' = '1'";

当使用statement时,会发现就算本身并没有创建用户,依然会有可能登陆成功,这是一项比较严重的弊端

避免SQL注入:使用Preparedstatement替换statement

Prepared Statement 使用

1. 获取连接

直接使用前文的第五种连接方式,将void中的内容复制进来即可

2. 预编译SQL数据,填充占位符

首先在字符串中编写SQL语句

            //预编译statement语句,返回PreparedStatement实例
            String sql = "insert into customers(name, email,birth) values (?,?,?)";
//?:占位符
            p1 = connection.prepareStatement(sql); //p1 = preparedStatement

可以看到上文中出现了名为占位符的特殊符号,占位符的使用和mysql中的通配符相似,下面需要使用具体的信息填充占位符

  //5.填充占位符
            p1.setString(1,"羊胎素");
            p1.setString(2,"[email protected]");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            java.util.Date date = sdf.parse("2022-2-22");
            p1.setDate(3,new Date(date.getTime()));

 在填充年月日时,可以预先使用SimpleDateFormat限定日期格式方便填充

3. 执行操作

使用

 p1.execute();

对上述资源进行操作 

4. 关闭资源

如上所述,需要关闭的资源为:PreparedStatement和数据库连接,所以只需要执行这两个资源的关闭即可

p1.close();
connection.close();

 最后,在整个代码加入try&catch即可

最终写好的文件会以文件形式上传

封装数据库连接

使用前文的内容已经可以使用preparedStatement对mysql数据库进行见到那操作,但是如果每次都使用大量代码获取和关闭连接未免稍显麻烦。因此,可以将获取连接和关闭连接的过程封装在一个单独的文件中,以方便操作

你可能感兴趣的:(mysql,学习,java)