PreparedStatement的execute方法返回false???

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/

学而不思则罔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值