executeQuery
用于产生单个结果集语句(ResultSet),这个方法只能用于SELECT语句。
ResultSet executeQuery(String sql) throws SQLException; 这个是他的接口,发现返回值是ResultSet
String driver = "com.mysql.jdbc.Driver";
String username = "root";
String password = "a1b2c3";
String connrctionUrl = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
// Stop1: 注册数据库驱动
Class.forName(driver);
// Stop2: 获取数据库的连接
conn = DriverManager.getConnection(connrctionUrl, username, password);
// Stop3: 执行sql 语句
String sql = "UPDATE `book` set `number` = 3 WHERE `id` = 8";
Statement stmt = conn.createStatement();
stmt.executeQuery(sql);
会抛出java.sql.SQLException: Can not issue data manipulation statements with executeQuery().异常
结论 :executeQuery只能进行SELECT,从而得到结果集对象,测试DELETE,UPDATE,INSERT操作都会抛出异常。
executeUpdate
int executeUpdate(String sql) throws SQLException;这个是他的接口,发现返回值是int
// Stop1: 注册数据库驱动
Class.forName(driver);
// Stop2: 获取数据库的连接
conn = DriverManager.getConnection(connrctionUrl, username, password);
// Stop3: 执行sql 语句
String sql = "UPDATE `book` set `number` = 3 WHERE `id` = 8";
String sql1 = "SELECT * FROM book";
String sql2 = "INSERT INTO `book` VALUES (DEFAULT,'JSP程序设计',12,85.3,'计算机','1.jpg')";
String sql3 = "DELETE FROM `book` WHERE `id` = 1;";
Statement stmt = conn.createStatement();
//查询
//stmt.executeUpdate(sql1); 抛出异常 java.sql.SQLException: Can not issue SELECT via executeUpdate() or executeLargeUpdate().
//修改
//int count = stmt.executeUpdate(sql);
//得到收到影响的行数,无异常抛出。
//插入
//int count = stmt.executeUpdate(sql2);
//得到受影响行数,无异常抛出。
//删除
//int count = stmt.executeUpdate(sql3);
//得到受影响行数,无异常抛出
结论:executeUpdate 用来执行修改,插入,删除操作,执行SELECT会抛出异常
execute
boolean execute(String sql) throws SQLException;这是他的接口,发现返回值是boolean
// Stop1: 注册数据库驱动
Class.forName(driver);
// Stop2: 获取数据库的连接
conn = DriverManager.getConnection(connrctionUrl, username, password);
// Stop3: 执行sql 语句
String sql = "UPDATE `book` set `number` = 2 WHERE `id` = 9";
String sql1 = "SELECT * FROM book";
String sql2 = "INSERT INTO `book` VALUES (DEFAULT,'JSP程序设计',12,85.3,'计算机','1.jpg')";
String sql3 = "DELETE FROM `book` WHERE `id` = 1;";
Statement stmt = conn.createStatement();
boolean isOk = stmt.execute(sql);
if(isOk)
{
System.out.println("isOK");
}
else
{
System.out.println("error");
}
//执行sql语句(改操作) 发现返回 false 输出 error 但是数据库中的内容发生了变化
//执行sql1(查操作)语句 发现返回true 输出 isOK
//执行sql2(插入操作)语句 发现返回false, 输出 error,但是数据库中的内容发生了变化。
//执行sql3(删除操作)发现返回false 输出error,但是数据库中的内容发生了变化
//到此百思不得解呀,所以查询了相关资料,发现execute的返回值原来是用于判断是 否返回了ResultSet结果集对象所以有了续集。
既然是用于判断有没有结果集,那么我就稍微做一个小小的测试吧!
//查询是肯定有结果集对象的,因为我数据库中存在数据。
// Stop1: 注册数据库驱动
Class.forName(driver);
// Stop2: 获取数据库的连接
conn = DriverManager.getConnection(connrctionUrl, username, password);
conn = DriverManager.getConnection(connrctionUrl, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = null; //结果集对象
ResultSetMetaData rsmd = null ; //ResultSetMetaData是用于分析结果集的元数据接口
int colNumConut = 0;
boolean isOk = stmt.execute(sql1);
if(isOk)
{
rs = stmt.getResultSet();
rsmd = rs.getMetaData();
colNumConut = rsmd.getColumnCount();
}
else
{
System.out.println("error");
}
//遍历打印数据
while( rs.next() )
{
for(int i=0; i<colNumConut; i++ )
{
System.out.print(rs.getString(i+1) + "\t" );
}
System.out.println();
}
输出结果:
8 红楼梦 2 31.88 经典文学 7.jpg
9 测试 2 34.00 测试 2.jpg
10 测试 10 56.80 计算机编程 a.jpg
11 测试 1 1.00 测试 2.jpg
12 JAVA高级编程 20 33.30 计算机 3.jpg
13 t 3 3.00 3 3
34 test1 1 1.00 test1 1.jpg
36 JSP程序设计 12 85.30 计算机 1.jpg
37 JSP程序设计 12 85.30 计算机 1.jpg
结论:execute可以用来执行任意SQL语句,返回一个boolean的值,表明该语句是否返回了一个结果集对象ResultSet。通常一般没有必要去使用execute。 excuteQuery,executeUpdate适合于很多场景的使用。那么我们什么时候该使用execute呢?那就是你也不知道sql语句是什么类型的时候,就用execute吧