13.4.2 使用execute方法执行SQL语句
Statement
的execute()
方法几乎可以执行任何SQL
语句,但它执行SQL
语句时比较麻烦,通常没有必要使用execute()
方法来执行SQL
语句,使用executeQuery()
或executeUpdate()
方法更简单。但如果不清楚SQL
语句的类型,则只能使用execute
方法来执行该SQL
语句了。
使用execute()
方法执行SQL
语句的返回值是boolean
值,它表明执行该SQL
语句是否返回了ResultSet
对象。那么如何来获取执行SQL
语句后得到的ResultSet
对象呢? Statement
提供了如下两个方法来获取执行结果。
方法 |
描述 |
getResultSet() |
获取该Statement 执行查询语句所返回的ResultSet 对象。 |
getUpdateCount() |
获取该Statement 执行DML 语句所影响的记录行数 |
下面程序示范了使用Statement
的execute()
方法来执行任意的SQL
语句,执行不同的SQL
语句时产生不同的输出。
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| import java.util.*; import java.io.*; import java.sql.*;
public class ExecuteSQL { 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 executeSql(String sql) throws Exception { Class.forName(driver); try ( Connection conn = DriverManager.getConnection(url, user, pass); Statement stmt = conn.createStatement()) { boolean hasResultSet = stmt.execute(sql); if (hasResultSet) { try ( ResultSet rs = stmt.getResultSet()) { ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); while (rs.next()) { for (int i = 0; i < columnCount; i++) { System.out.print(rs.getString(i + 1) + "\t"); } System.out.print("\n"); } } } else { System.out .println("该SQL语句影响的记录有" + stmt.getUpdateCount() + "条"); } } } public static void main(String[] args) throws Exception { ExecuteSQL es = new ExecuteSQL(); es.initParam("mysql.ini"); System.out.println("------执行删除表的DDL语句-----"); es.executeSql("drop table if exists my_test"); System.out.println("------执行建表的DDL语句-----"); es.executeSql("create table my_test" + "(test_id int auto_increment primary key, " + "test_name varchar(255))"); System.out.println("------执行插入数据的DML语句-----"); es.executeSql("insert into my_test(test_name) " + "select student_name from student_table"); System.out.println("------执行查询数据的查询语句-----"); es.executeSql("select * from my_test"); } }
|
运行上面程序,会看到使用Statement
的不同方法执行不同SQL
语句的效果。执行DDL
语句显示受影响的记录条数为0;执行DML
语句显示插入、修改或删除的记录条数;执行查询语句则可以输出查询结果。
提示
上面程序获得SQL
执行结果时没有根据各列的数据类型调用相应的getXxx()
方法而是直接使用getString()
方法来取得值,这是可以的。 ResultSet
的getString()
方法几乎可以获取除Blob
之外的任意类型列的值,因为所有的数据类型都可以自动转换成字符串类型。
原文链接: 13.4.2 使用execute方法执行SQL语句