dreamweaver 网站导航/南京seo网站优化
在java.sql包中已经提供了一个Statement数据操作接口实现数据的CRUD操作,那么为什么又在java.sql.包里面提供有另外一个PreparedStatement接口实现数据操作呢?如果要想解决当前的疑问,首先最佳的做法是来研究-.下Statement操作问题。
Statement使用问题分析
Statement接口是JDBC之中提供的标准数据操作接口,并且在这个接口中可以直接执行SQL语句,但是在使用这个接口会有一个非常麻烦的问题:它必须执行标准的SQL语句,而sql语句中的数据通常是不固定的。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class JDBCDemo {public static final String DRIVER = "com.mysql.cj.jdbc.Driver"; //数据库的驱动程序public static final String URL="jdbc:mysql://localhost:3306/yootk"; //连接地址public static final String USER = "root"; //用户名public static final String PASSWORD = "mysqladmin"; //密码public static void main(String[] args) throws Exception{String name = "张三";int age = 16; //年龄String birthday = "2000-1-1"; //问题1:日期要使用字符串保存double salary = 6900; //工资String note = "张三是一个很自律的人"; //说明Class.forName(DRIVER); //将数据的驱动程序加载到容器内部Connection connection = DriverManager.getConnection(URL,USER,PASSWORD); //获取数据库的连接Statement statement = connection.createStatement(); //创建数据库的操作对象//sql插入字段代码,在以后填写sql语句时如果需要换行,最佳的做法是在前后多加一个空格String sql = " INSERT INTO user(name,age,birthday,salary,note) VALUES " +" ('"+name+"',"+age+",+'"+birthday+"',+"+salary+",+'"+note+"') "; //问题2:代码非常难读//所有的数据库更新处理都会有一个影响的数据行数信息提示,而此时的返回值就是影响的数据行的个数据int count = statement.executeUpdate(sql); //执行sql并返回更新的数据行数System.out.println("【数据更新操作影响行数】"+count);//如果现在直接关闭了数据库的连接,整个数据库所有的Statement对象也就自动关闭了connection.close(); //及时关闭}}
【数据更新操作影响行数】1
发现三个问题:
- 问题1:日期要使用字符串保存
- 问题2:代码非常难读
- 如果在输入的内容中包含单引号或者双引号则无法执行:如name = "Mr'李"。
对于当前给定的程序SQL语句来讲,最大的问题出现在拼凑之后的SQL是错误的,因为这个时候给出的SQL语句中多了--个单引号“'”,而在SQL语法里面单引号所的是字符串的分隔符。即使现在整个的程序可以正常的执行,但是也会发现这种利用拼凑的方式实现的SQL从结构上来讲是非常难以维护的。所以为了解决这些问题才推出了-一个新的接口一- PreparedStatement, 在实际项目开发过程之中基本上使用最多的数据操作接口就是PreparedStatement。