MySQL JDBC row_count()數字不準確的問題
實驗環境.
如果是
Insert,row_count() 為1
Update,row_count() 為2
Update的目標值和原來一樣,row_count() 為0
但如果透過 JDBC 呼叫,最後一種情況也會返回1,這是因為客戶端連線時如果設定了 CLIENT_FOUND_ROWS 標誌,會用 rows found 代替 rows affected 當做返回值,而JDBC預設是會設定該標誌的。在 JDBC 連線字串中指定 useAffectedRows=true 可以取消這個flag。
作為JDBC呼叫,不加useAffectedRows引數
url = "jdbc:mysql://127.0.0.1:3306/" + dbName;
Insert,返回值為1
Update的目標值和原來一樣,返回值為1
Update的目標值和原來不一樣,返回值為2
增加useAffectedRows引數
url = "jdbc:mysql://127.0.0.1:3306/" + dbName+"?useAffectedRows=true";
Insert,返回值為1
Update的目標值和原來一樣,返回值為0
Update的目標值和原來不一樣,返回值為2
參考:
%E6%95%B0%E6%8D%AE%E5%BA%93/2015/08/17/INSERT%20ON%20DUPLICATE%20KEY%20UPDATE%20%E5%87%A0%E4%B8%AA%E8%A6%81%E6%B3%A8%E6%84%8F%E7%9A%84%E9%97%AE%E9%A2%98.html
- create table user_follow_sender(
- UserID bigint not null comment '粉絲的使用者ID',
- FollowUserID bigint not null comment '關注的使用者ID',
- FollowState smallint default 1 comment '關注狀態.1表示有效,0表示取關',
- CreateTime timestamp not null default current_timestamp comment '建立時間',
- UpdateTime timestamp not null default current_timestamp on update current_timestamp comment '更新時間',
- primary key (UserID,FollowUserID)
- ) comment '使用者關注粉絲表.發起方';
- delimiter $$
- create procedure add_follow_sender(
- pUserID bigint,
- pFollowUserID bigint,
- out pRowCount int
- )
- begin
- insert into user_follow_sender(
- UserID,
- FollowUserID,
- FollowState
- )
- values(
- pUserID,
- pFollowUserID,
- 1
- )
- ON DUPLICATE KEY UPDATE
- FollowState=1
- ;
- select row_count() into pRowCount;
- end $$
- delimiter ;
如果是
Insert,row_count() 為1
Update,row_count() 為2
Update的目標值和原來一樣,row_count() 為0
但如果透過 JDBC 呼叫,最後一種情況也會返回1,這是因為客戶端連線時如果設定了 CLIENT_FOUND_ROWS 標誌,會用 rows found 代替 rows affected 當做返回值,而JDBC預設是會設定該標誌的。在 JDBC 連線字串中指定 useAffectedRows=true 可以取消這個flag。
作為JDBC呼叫,不加useAffectedRows引數
url = "jdbc:mysql://127.0.0.1:3306/" + dbName;
- public void test() throws SQLException {
- Connection con = getConnection(dbPrefix + 0);
- con.setAutoCommit(false);
- CallableStatement cs = con.prepareCall("{call add_follow_sender(?,?,?)}");
- cs.setLong(1, 1010001);
- cs.setLong(2, 1010002);
- cs.registerOutParameter(3, Types.INTEGER);
- cs.execute();
- System.out.println( cs.getInt(3));
- con.commit();
- cs.close();
- con.close();
- }
Insert,返回值為1
Update的目標值和原來一樣,返回值為1
Update的目標值和原來不一樣,返回值為2
增加useAffectedRows引數
url = "jdbc:mysql://127.0.0.1:3306/" + dbName+"?useAffectedRows=true";
Insert,返回值為1
Update的目標值和原來一樣,返回值為0
Update的目標值和原來不一樣,返回值為2
參考:
%E6%95%B0%E6%8D%AE%E5%BA%93/2015/08/17/INSERT%20ON%20DUPLICATE%20KEY%20UPDATE%20%E5%87%A0%E4%B8%AA%E8%A6%81%E6%B3%A8%E6%84%8F%E7%9A%84%E9%97%AE%E9%A2%98.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2121455/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MySQL】order by 結果不準確的問題及解決MySql
- Es資料彙總不準確的問題
- ETL過程中資料精度不準確問題
- mysql.user表的資料準確性問題MySql
- iOS --NSDecimalNumber 處理計算精度不準確問題iOSDecimal
- JDBC連線MySQL失效的問題JDBCMySql
- jdbc連線mysql問題-helpJDBCMySql
- 自定義key解決zabbix埠監聽取值不準確的問題
- Mybatis plus 一對多關聯查詢分頁不準確的問題MyBatis
- 解決jdbc不能重連mysql的問題JDBCMySql
- 正確使用MySQL JDBC遊標MySqlJDBC
- ls命令統計檔案數量不準確
- 為什麼php的浮點數運算不準確PHP
- MySQL並行複製延時時間不準確MySql並行
- setInterval()不準確原因分析
- 字串轉數字的問題字串
- float計算不準確的替代方法
- JDBC問題,求助JDBC
- docker下mysql連線數修改後不生效問題的解決DockerMySql
- MySQL裡的found_row()與row_count()MySql
- 有關mysql中ROW_COUNT()的小例子MySql
- 無效數字問題:Oracle-MySQL-PG大不同OracleMySql
- 實踐敏捷估算(1)——不僅僅是估不準的問題敏捷
- 徹底搞懂 PHP 變數結構體,多數文章觀點不準確PHP變數結構體
- JDBC中事務的問題JDBC
- BMP的JDBC問題,請指教JDBC
- jdbc資源的回收問題!JDBC
- JDBC/MYSQL問題 : Unknown system variable 'query_cache_size'JDBCMySql
- Mysql JDBC Url引數說明MySqlJDBC
- MySQL中的FOUND_ROWS()與ROW_COUNT()函式MySql函式
- 【Fenng 】JDBC 的 setTimestamp 效能問題JDBC
- 解決driverClassName: com.mysql.cj.jdbc.Driver報紅問題MySqlJDBC
- set autotrace on 產生不準確的執行計劃
- JDBC連線ORACLE問題JDBCOracle
- mysql的日誌引數修改的問題.MySql
- java解決數字黑洞問題Java
- GCD定時器替換NSTimer不準的問題GC定時器
- MySql 漢字問題? 請高手指點!MySql