Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JDBC设置useCursorFetch=true时,DBLE兼容mysql-connector-java-8.0.27问题 #3420

Closed
xhailiang opened this issue Sep 27, 2022 · 1 comment
Assignees
Labels
bug community issue from community
Milestone

Comments

@xhailiang
Copy link

xhailiang commented Sep 27, 2022

  1. 问题描述:
    使用mysql-connector-java-8.0.27版本,jdbc url 设置useCursorFetch=true 时,某些SQL在prepare 阶段报错。

  2. 版本信息:

  • DBLE : 8.0.27-dble-3.21.10.1-0b245c11a60737aa0d7504de635bb6e89378445d-20220127041458
  • JDBC Connector : mysql-connector-java-8.0.27
  1. 日志信息:
  • general.log
2022-09-23T16:54:19.022  8116 Connect   dble-user@hostname on test_sharding_db using TCP/IP
2022-09-23T16:54:19.023  8116 Query     /* mysql-connector-java-8.0.27 (Revision: e920b979015ae7117d60d72bcc8f077a839cd791) */SELECT  @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_write_timeout AS net_write_timeout, @@performance_schema AS performance_schema, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@transaction_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
2022-09-23T16:54:19.024  8116 Query     SET character_set_results = NULL
2022-09-23T16:54:19.025  8116 Query     SET autocommit=1
2022-09-23T16:54:19.028  8116 Query     select 1
2022-09-23T16:54:19.030  8116 Query     SELECT @@session.transaction_read_only
2022-09-23T16:54:19.030  8116 Query     SELECT @@session.transaction_isolation
2022-09-23T16:54:19.080  8116 Prepare   select

       col1, col2, col3
        from table_name
        where col2 = ?
        and col3 in ('S','F')
        and col4 is not null
2022-09-23T16:54:19.113  8116 Close stmt
此时应用和DBLE都出现报错信息,SQL 没有进入Executed 阶段
  • dble.log
2022-09-23 16:54:19.090  WARN [BusinessExecutor0] (com.actiontech.dble.services.FrontendService.consumeSingleTask(FrontendService.java:195)) - There is an error you may need know.
java.lang.ArrayIndexOutOfBoundsException: 23
        at com.actiontech.dble.backend.mysql.MySQLMessage.read(MySQLMessage.java:61) ~[dble-3.21.10.1.jar:?]
        at com.actiontech.dble.backend.mysql.MySQLMessage.readDate(MySQLMessage.java:265) ~[dble-3.21.10.1.jar:?]
        at com.actiontech.dble.backend.mysql.BindValueUtil.read(BindValueUtil.java:52) ~[dble-3.21.10.1.jar:?]
        at com.actiontech.dble.net.mysql.ExecutePacket.read(ExecutePacket.java:121) ~[dble-3.21.10.1.jar:?]
        at com.actiontech.dble.server.handler.ServerPrepareHandler.execute(ServerPrepareHandler.java:144) ~[dble-3.21.10.1.jar:?]
        at com.actiontech.dble.services.mysqlsharding.ShardingService.stmtExecute(ShardingService.java:369) ~[dble-3.21.10.1.jar:?]
        at com.actiontech.dble.services.mysqlsharding.ShardingService.handleInnerData(ShardingService.java:283) ~[dble-3.21.10.1.jar:?]
        at com.actiontech.dble.net.service.AbstractService.consumeSingleTask(AbstractService.java:184) ~[dble-3.21.10.1.jar:?]
        at com.actiontech.dble.services.FrontendService.consumeSingleTask(FrontendService.java:184) [dble-3.21.10.1.jar:?]
        at com.actiontech.dble.services.FrontendService.execute(FrontendService.java:139) [dble-3.21.10.1.jar:?]
        at com.actiontech.dble.net.executor.FrontendBlockRunnable.run(FrontendBlockRunnable.java:60) [dble-3.21.10.1.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_271]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_271]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_271]
2022-09-23 16:54:19.090  WARN [BusinessExecutor0] (com.actiontech.dble.singleton.ConnectionSerializableLock.unLock(ConnectionSerializableLock.java:70)) - find useless unlock. connection id : 8116 , index : 8

  1. 应用报错信息
Cause: java.sql.SQLException: 23;
uncategorized SQLException; SQL state [HY000]; error code [1105]; 23; nested exception is java.sql.SQLException: 23
  1. jdbc 模拟代码:
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://xxx:8066/schema1?useServerPrepStmts=true&&useAffectedRows=true&allowMultiQueries=true&allowUrlInLocalInfile=true&useCursorFetch=true&serverTimezone=UTC", "test", "111111");
        // time 字段需要是 date 类型
        PreparedStatement ps = conn.prepareStatement("update xxx set time=?");
        ps.setDate(1, new java.sql.Date(System.currentTimeMillis()));
        ps.execute();

        if (null != ps) {
            ps.close();
        }
        if (null != conn) {
            conn.close();
        }
@quexiuping
Copy link
Member

verified on :5.7.21-dble-3.22.11.99-691d1d1345e71f8a5656d395c2b30ee90f907c01-20230105030512

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug community issue from community
Projects
None yet
Development

No branches or pull requests

4 participants