13.4 执行SQL语句的方式
前面介绍了JDBC
执行查询等示例程序,实际上,JDBC
不仅可以执行查询,也可以执行DDLML
等SQL
语句,从而允许通过JDBC
最大限度地控制数据库。
13.4.1 使用executeUpdate方法执行DDL和DML语句
Statement
提供了三个方法来执行SQL
语句,前面已经介绍了使用executeQuery
来执行查询语句,下面将介绍使用executeLargeUpdate()
或executeUpdate()
来执行DDL
和DML
语句。使用Statement
执行DDL
和DML
语句的步骤与执行普通查询语句的步骤基本相似,区别在于:
- 执行了
DDL
语句后返回值为0
,
- 执行了
DML
语句后返回值为受影响的记录条数。
数据库模式定义语言DDL(Data Definition Language)
,主要由create
(创建)、alter
(修改)、drop
(删除)和truncate
(删除)四个关键字完成。
数据操纵语言(Data Manipulation Language, DML
),由insert
(插入),update
(更新),delete
(删除)
对于一个表:
- 当不再需要该表时, 用
drop
;
- 当你仍要保留该表,但要删除所有记录时,用
truncate
;
- 当你要删除部分记录时,用
delete
.
executeUpdate()方法执行DDL语句
下面程序示范了使用executeUpdate()
方法创建数据表,如果MySQL
驱动支持,也可以使用executeLargeUpdate()
方法。
下面的实例中没有直接把数据库连接信息写在程序里,而是使用一个mysql.ini
文件(就是一个properties
文件)来保存数据库连接信息,mysql.ini
文件中的那内容如下:
1 2 3 4
| driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/select_test user=root pass=root
|
当需要把应用程序从开发环境移植到生产环境时,无须修改源代码,只需要修改mysql.ini
配置文件即可.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import java.util.*; import java.io.*; import java.sql.*;
public class ExecuteDDL { private String driver; private String url; private String user; private String pass; public void initParam(String paramFile) throws Exception { Properties props = new Properties(); props.load(new FileInputStream(paramFile)); driver = props.getProperty("driver"); url = props.getProperty("url"); user = props.getProperty("user"); pass = props.getProperty("pass"); } public void createTable(String sql) throws Exception { Class.forName(driver); try ( Connection conn = DriverManager.getConnection(url, user, pass); Statement stmt = conn.createStatement()) { stmt.executeUpdate(sql); } } public static void main(String[] args) throws Exception { ExecuteDDL ed = new ExecuteDDL(); ed.initParam("mysql.ini"); ed.createTable("create table jdbc_test " + "( jdbc_id int auto_increment primary key, " + "jdbc_name varchar(255), " + "jdbc_desc text);"); System.out.println("-----建表成功-----"); } }
|
运行上面程序,执行成功后会看到select_test
数据库中添加了一个jdbc_test
数据表,这表明JDBC
执行DDL
语句成功。
executeUpdate()方法执行DML语句
使用executeUpdate()
执行DML
语句与执行DDL
语句基本相似,区别是executeUpdate()
执行DDL
语句后返回0
,而执行DML
语句后返回受影响的记录条数。
下面程序将会执行一条insert
语句,这条insert
语句会向刚刚建立的jdbc_test
数据表中插入几条记录。因为使用了带子查询的insert
语句,所以可以一次插入多条语句.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| import java.util.*; import java.io.*; import java.sql.*;
public class ExecuteDML { private String driver; private String url; private String user; private String pass;
public void initParam(String paramFile) throws Exception { Properties props = new Properties(); props.load(new FileInputStream(paramFile)); driver = props.getProperty("driver"); url = props.getProperty("url"); user = props.getProperty("user"); pass = props.getProperty("pass"); } public int insertData(String sql) throws Exception { Class.forName(driver); try ( Connection conn = DriverManager.getConnection(url, user, pass); Statement stmt = conn.createStatement()) { return stmt.executeUpdate(sql); } } public static void main(String[] args) throws Exception { ExecuteDML ed = new ExecuteDML(); ed.initParam("mysql.ini"); int result = ed.insertData("insert into jdbc_test(jdbc_name,jdbc_desc)" + "select s.student_name , t.teacher_name " + "from student_table s , teacher_table t " + "where s.java_teacher = t.teacher_id;"); System.out.println("--系统中共有" + result + "条记录受影响--"); } }
|
运行上面程序,执行成功将会看到jdbc_test
数据表中多了几条记录,而且在程序控制台会看到输出有几条记录受影响的信息。
原文链接: 13.4 执行SQL语句的方式