PreparedStatement的execute方法返回false???
问题发现
在上篇中介绍了使用原始jdbc获取生成的主键,发现了一个问题,在使用execute执行时,它的返回值居然一直都是false,因为在我印象中,不应该返回的是受影响的行数吗???为啥是布尔值,而且是false???
- 问题代码
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.
getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
String sql = "insert into t2 values(null,'张三')";
PreparedStatement ps = conn.prepareStatement(sql);
boolean flag = ps.execute();
ResultSet generatedKeys = ps.getGeneratedKeys();
generatedKeys.next();
System.out.println(flag + ":" + generatedKeys.getInt(1));
问题说明
其实这个不叫问题,是人家返回的一个机制,execute方法执行的语句可以是任何种类的sql语句,一些特别处理过的语句返回多个结果,execute 方法处理这些复杂的语句;executeQuery 和 executeUpdate 处理形式更简单的语句。 execute 方法返回一个 boolean 值,以指示第一个结果的形式。必须调用 getResultSet 或 getUpdateCount 方法来检索结果,并且必须调用 getMoreResults 移动到任何后面的结果返回:如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false,意思就是如果是查询的话返回true,如果是更新或插入的话就返回false了;execute()返回的是一个boolean值,代表两种不同的操作啊,getResultSet()返回的是结果集,而getUpdateCount()返回的是更新的记数。
- 大家可以自己写写代码调试一下,在关键处Evaluate一下,会得到你想要的结果
参考:https://shangrila-kun.github.io//2017/08/15/20170823sql/
学而不思则罔