java通过jdbc访问mysql,update数据返回值的思考

Posted 段江涛IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java通过jdbc访问mysql,update数据返回值的思考相关的知识,希望对你有一定的参考价值。

 先不说那么多,把Java代码贴出来吧。

public static void main(String[] args) throws InterruptedException, IOException {
    try {

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://172.23.88.107:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
        dataSource.setUsername("root");
        dataSource.setPassword("zdsoft");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        int res= jdbcTemplate.update("update student set name=\'李四\',age=12 where id=25");
        System.out.println(res);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }  
    
}

我们知道。在mysql中,如果我们修改一条数据的原始值和修改后值是一致的,那么就会返回影响的行数为0

很好,那么执行上面java的代码,理论上就会返回0。但是经过多次执行、多次测试,返回的始终是1。这就让人很不解了,后来翻看了相关资料,原来jdbc默认返回的是匹配的行数(而不是影响的行数)。因此如果我们想要返回影响的行数,可以在url连接地址里面加上useAffectedRows=true就可以了。

url:jdbc:mysql://172.23.88.107:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useAffectedRows=true

 

ps:其实sqlserver和Oracle就没有匹配的行数和影响的行数的说法,返回的都是影响的行数,而影响的行数和mysql的匹配行数的值是一致的。所以为了保证三种数据库的一致性,一般还是不建议加useAffectedRows=true

以上是关于java通过jdbc访问mysql,update数据返回值的思考的主要内容,如果未能解决你的问题,请参考以下文章

Java通过JDBC进行简单的增删改查(以MySQL为例)

java,jdbc,大量数据update更新效率很慢,哪位大神可怜可怜我吧

为啥必须将表中的至少一列(在 MySQL 中)分配为 PRIMARY KEY,以便表通过 JDBC 接受 UPDATE 和 INSERT 语句?

JAVA通过·JDBC标准链接MySQL数据库

mysql数据库__Jdbc直接操作__Statement__update

廖雪峰Java15JDBC编程-3JDBC接口-2JDBC更新