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

摘要:
在mysql中,如果我们修改了一段数据的原始值,并且修改后的值是一致的,那么受影响的行数将返回为0。执行上面的java代码很好,理论上会返回0。然而,在多次执行和测试之后,返回值总是1。UseUnicode=true&characterEncoding=UT8&serverTimezone=UTC&useEffectedRows=true ps:事实上,sqlserver和Oracle没有匹配的行号和受影响的行号,并且返回的都是受影响的行数,受影响行数与mysql的匹配行号值一致。因此,为了确保三个数据库的一致性,通常不建议添加useEffectedRows=true

 先不说那么多,把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通过jdbc访问mysql,update数据返回值的思考第1张

很好,那么执行上面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数据返回值的思考》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇pyCharm最新2017激活码目录穿越漏洞下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL 字段类型占用空间

MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。首先来看下各类型的存储需求(即占用空间大小): 数值类型存储需求 列类型 存储需求 TINYINT 1个字节 SMALLINT 2个字节 MEDIUMINT 3个字节 INT, INTEGER 4个字节 BIGINT 8个字节 FLOAT(p) 如果0 &...

JDBC面试问题

1. 什么是JDBC API,何时使用它? Java DataBase Connectivity API允许我们使用关系数据库。JDBC API接口和类是part java.sql和javax.sqlpackage的一部分。我们可以使用JDBC API来获取数据库连接,在数据库服务器中运行SQL查询和存储过程并处理结果。 JDBC API的编写方式允许我...

EasySharding.EFCore 如何设计使用一套代码完成的EFCore Migration 构建Saas系统多租户不同业务需求且满足租户自定义分库分表、数据迁移能力?

下面用一篇文章来完成这些事情 多租户系统的设计单纯的来说业务,一套Saas多租户的系统,面临很多业务复杂性,不同的租户存在不同的业务需求,大部分相同的表结构,那么如何使用EFCore来完成这样的设计呢?满足不同需求的数据库结构迁移 这里我准备设计一套中间件来完成大部分分库分表的工作,然后可以通过自定义的Migration 数据库文件来迁移构建不同的租户数据...

根据javabean转换为mysql建表语句与mapper内容

一般上,我们会使用数据库表转换为javabean、dao、或是mapper,就叫逆向工程。做项目时一般也是先设计数据库,再进行系统开发,所以一般使用逆向工程。 但我这边由于工作临时的需要,需要将javabean转换为建表语句和Mybatis的Mapper文件,于是上网搜了一下,大部分是做一个工具类进行bean解析输出的。 根据自身项目命名设计要求,将jav...

MariaDB日志文件、备份与恢复

1. 数据库的6种日志        数据库有6种日志,分别是:查询日志、慢查询日志、错误日志、二进制日志、中继日志以及事务日志。 1> 查询日志   查询日志记录每一条sql语句,建议不开启,因为如果访问量较大,会占用相当大的资源,影响性能。 查询日志的开启:        编辑配置文件:/etc/my.cnf.d/server.cnf vim /...

mysql中的mysql_real_connect连接参数设置

在前一篇文章中,讲述了如何进行mysql源程序代码的编译链接,但是没有讲述运行情况,在按照上一篇文章代码下进行编译运行后,发现无法链接数据库文件,显然是在mysql_real_connect()函数中出现了问题。在mysql的英文手册中找到关于mysql_real_connect()的如下描述: //函数原型描述MYSQL*mysql_real_con...