一、执行DDL语句
数据定义语言(Data Definition Language),在JDBC中需要获取Statement类对象,然后使用Statement类对象发起
现在尝试通过JDBC在数据库中创建表:
// 参数:
这里使用了Statement类的executeUpdate()方法来执行DDL语句,这个方法对于 SQL 数据操作语言 (DML) 语句,将返回行计数。由于这个示例是创建一张表,所以executeUpdate()方法返回0。
二、执行DML语句
数据操纵语言(Data Manipulation Language),JDBC同样使用Statement类的executeUpdate()方法来执行DML语句。
现在尝试往刚才创建的Student表中插入一条数据:
//省略参数代码。。。
执行成功,打印count输出1,表示影响了数据表中的一行记录。
查看数据表果然插入了一条记录:
三、执行DQL语句
查询语言(Data Query Language),需要通过Statement类的executeQuery()方法来执行SQL查询语句。
下面尝试使用DQL语句查询Student表的内容:
//省略参数代码。。。
查询结果:
executeQuery()方法会返回一个ResultSet对象,需要借助ResultSet的next()方法来做移动游标的操作,以遍历查询结果的每一行记录。另外ResultSet有诸如getXXX()的方法用于取得每一行记录中的每一个分量。
四、使用预编译的方式执行SQL语句(推荐)
PreparedStatement类(Statement类的子类)发送SQL语句,PreparedStatement类使用预编译的方式来构建JAVA应用程序和数据库的交互。
现在使用预编译SQL的方法向Student表中插入一行记录:
//省略参数代码。。。
插入一条记录成功!
PreparedStatement与Statement的区别在于:
- 语法不同:PreparedStatement可以使用预编译的sql,而Statment只能使用静态的sql
- 效率不同: PreparedStatement可以使用sql缓存区,效率比Statment高。(预编译SQL语句被缓存在数据库中,JAVA程序只需要传送参数给数据库,减少了数据传输量。)
- 安全性不同: PreparedStatement可以有效防止sql注入,而Statment不能防止sql注入。
综上,因此强烈推荐使用预编译SQL的方式来与数据库进行交互。
当然PreparedStatement也能用于执行DDL与DQL,现在使用预编译SQL的方式来查询Student表中Sno字段为"201215129"的学生的姓名:
//省略参数代码。。。
控制台输出结果:
查询结果正确!