昨天遇到调试代码的时候遇到一个问题,很坑爹。
不知道是只坑了我这样的菜鸟,还是有其他朋友也被坑了。
所以贴出来说说。代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class UpdateSqlDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名
String url = "jdbc:mysql://127.0.0.1:3306/test";
// MySQL配置时的用户名
String user = "root";
// Java连接MySQL配置时的密码
String password = "now.cn123";
try {
// 加载驱动程序
Class.forName(driver);
// 连续数据库
Connection conn = DriverManager.getConnection(url, user, password);
if (!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");
// statement用来执行SQL语
Statement statement = conn.createStatement();
// 要执行的SQL语句
String sqlUpdate = "update student set stuName = 'Jaky' where class = 5 ";//用execute执行结果恒为false
String sqlQuery = "select * from student where id=1 limit 1";
executeBoolean(statement,sqlUpdate);//execute执行update 返回 恒为false
executeInt(statement,sqlUpdate);//executeUpdate执行update 返回影响行数
executeBoolean(statement,sqlQuery);//execute执行select 返回值恒为true
// executeInt(statement,sqlQuery);//executeUpdate执行select 报错
} catch (Exception e) {
e.printStackTrace();
}
}
//用execute方法执行sql 返回 boolean
public static boolean executeBoolean(Statement sm,String sql)throws Exception{
System.out.println(sm.execute(sql));
return sm.execute(sql);
}
//用executeUpdate执行sql
public static int executeInt(Statement sm,String sql)throws Exception{
System.out.println(sm.executeUpdate(sql));
return sm.executeUpdate(sql);
}
}
昨天被坑的情况就是在执行 sqlUpdate语句的时候根据execute执行的结果来判断是否更新成功.
结果坑爹的一直报错。但数据又改对了,郁闷了好久。
注:executeUpdate执行update语句,返回的int值为行数,该行数是指符合sql语句条件的行数,
而不是真正意义上修改过得行数。
比如上面代码中的sqlUpdate 语句,执行第一遍返回的值为2
执行第二次返回的值还是2,不管执行多少次都是返回2
数据在第一次更新的时候已经update了,但是根据where条件找到的还是两条记录,所以返回2