【问题标题】:java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; Mysqljava.sql.SQLSyntaxErrorException:您的 SQL 语法有错误; mysql
【发布时间】:2019-12-03 06:16:33
【问题描述】:

我正在努力使用 HikariCP + 直接 SQL 查询执行。我在创建表格时遇到错误。如果我复制 SQL 查询并在 MYSQL COMMAND 中执行,它可以工作,但不能来自 java。

错误: java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在附近使用的正确语法

版本:

  • HikariCP- 编译组:'com.zaxxer',名称:'HikariCP',版本: '3.3.1'
  • MYSQL Driver- 编译组:'mysql',名称:'mysql-connector-java',版本:'8.0.15'

  • MYSQL SERVER - docker 运行 --name mysql -p 3306:3306 -e ALLOW_EMPTY_PASSWORD=yes -e MYSQL_DATABASE=tp --rm bitnami/mysql

我不知道它提到的查询有什么问题。我已经尝试了所有可能的方法。

   root
     CID-{} 2019-07-25 11:30:24,235 [DEBUG] - [Driver class com.mysql.cj.jdbc.Driver found in Thread context class loader sun.misc.Launcher$AppClassLoader@6d06d69c] - HikariConfig:900
     CID-{} 2019-07-25 11:30:24,518 [DEBUG] - [HikariPool-1 - configuration:] - HikariConfig:1020
     CID-{} 2019-07-25 11:30:24,536 [DEBUG] - [allowPoolSuspension.............false] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,536 [DEBUG] - [autoCommit......................true] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,542 [DEBUG] - [catalog.........................none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,543 [DEBUG] - [connectionInitSql...............none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,543 [DEBUG] - [connectionTestQuery.............none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,544 [DEBUG] - [connectionTimeout...............30000] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,544 [DEBUG] - [dataSource......................none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,545 [DEBUG] - [dataSourceClassName.............none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,546 [DEBUG] - [dataSourceJNDI..................none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,548 [DEBUG] - [dataSourceProperties............{password=<masked>, prepStmtCacheSqlLimit=2048, cachePrepStmts=true, prepStmtCacheSize=250}] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,549 [DEBUG] - [driverClassName................."com.mysql.cj.jdbc.Driver"] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,550 [DEBUG] - [healthCheckProperties...........{}] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,550 [DEBUG] - [healthCheckRegistry.............none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,551 [DEBUG] - [idleTimeout.....................600000] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,554 [DEBUG] - [initializationFailTimeout.......1] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,554 [DEBUG] - [isolateInternalQueries..........false] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,556 [DEBUG] - [jdbcUrl.........................jdbc:mysql://localhost:3306] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,556 [DEBUG] - [leakDetectionThreshold..........0] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,557 [DEBUG] - [maxLifetime.....................1800000] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,557 [DEBUG] - [maximumPoolSize.................10] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,557 [DEBUG] - [metricRegistry..................none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,558 [DEBUG] - [metricsTrackerFactory...........none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,558 [DEBUG] - [minimumIdle.....................10] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,559 [DEBUG] - [password........................<masked>] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,559 [DEBUG] - [poolName........................"HikariPool-1"] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,560 [DEBUG] - [readOnly........................false] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,561 [DEBUG] - [registerMbeans..................false] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,561 [DEBUG] - [scheduledExecutor...............none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,562 [DEBUG] - [schema..........................none] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,562 [DEBUG] - [threadFactory...................internal] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,563 [DEBUG] - [transactionIsolation............default] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,563 [DEBUG] - [username........................"root"] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,564 [DEBUG] - [validationTimeout...............5000] - HikariConfig:1052
     CID-{} 2019-07-25 11:30:24,567 [INFO ] - [HikariPool-1 - Starting...] - HikariDataSource:80
     CID-{} 2019-07-25 11:30:27,299 [DEBUG] - [HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@42d8062c] - HikariPool:566
     CID-{} 2019-07-25 11:30:27,303 [INFO ] - [HikariPool-1 - Start completed.] - HikariDataSource:82
     CID-{} 2019-07-25 11:30:27,306 [DEBUG] - [ SQl QUERY : [CREATE SCHEMA IF NOT EXISTS ${schemaName} ;]] - Sql2:76
     CID-{} 2019-07-25 11:30:27,306 [DEBUG] - [ SQl QUERY : [CREATE SCHEMA IF NOT EXISTS ${schemaName} ;]] - Sql2:76
     CID-{} 2019-07-25 11:30:27,337 [DEBUG] - [ SQl QUERY : [CREATE SCHEMA IF NOT EXISTS REFS ;]] - Sql2:79
     CID-{} 2019-07-25 11:30:27,337 [DEBUG] - [ SQl QUERY : [CREATE SCHEMA IF NOT EXISTS REFS ;]] - Sql2:79
     CID-{} 2019-07-25 11:30:27,407 [DEBUG] - [HikariPool-1 - Pool stats (total=1, active=1, idle=0, waiting=0)] - HikariPool:417
     CID-{} 2019-07-25 11:30:27,439 [DEBUG] - [ SQl QUERY : [USE ${schemaName}; CREATE TABLE IF NOT EXISTS ${tableName} (ID VARCHAR(50) NULL, CONTENT TEXT NULL, MODIFIED_DATE timestamp DEFAULT CURRENT_TIMESTAMP);]] - Sql2:76
     CID-{} 2019-07-25 11:30:27,439 [DEBUG] - [ SQl QUERY : [USE ${schemaName}; CREATE TABLE IF NOT EXISTS ${tableName} (ID VARCHAR(50) NULL, CONTENT TEXT NULL, MODIFIED_DATE timestamp DEFAULT CURRENT_TIMESTAMP);]] - Sql2:76
     CID-{} 2019-07-25 11:30:27,441 [DEBUG] - [ SQl QUERY : [USE REFS; CREATE TABLE IF NOT EXISTS KUMARREFS (ID VARCHAR(50) NULL, CONTENT TEXT NULL, MODIFIED_DATE timestamp DEFAULT CURRENT_TIMESTAMP);]] - Sql2:79
     CID-{} 2019-07-25 11:30:27,441 [DEBUG] - [ SQl QUERY : [USE REFS; CREATE TABLE IF NOT EXISTS KUMARREFS (ID VARCHAR(50) NULL, CONTENT TEXT NULL, MODIFIED_DATE timestamp DEFAULT CURRENT_TIMESTAMP);]] - Sql2:79
     CID-{} 2019-07-25 11:30:27,508 [INFO ] - [HikariPool-1 - Shutdown initiated...] - HikariDataSource:350
     CID-{} 2019-07-25 11:30:27,509 [DEBUG] - [HikariPool-1 - Before shutdown stats (total=1, active=0, idle=1, waiting=0)] - HikariPool:417
     CID-{} 2019-07-25 11:30:27,550 [DEBUG] - [HikariPool-1 - Closing connection com.mysql.cj.jdbc.ConnectionImpl@42d8062c: (connection evicted)] - PoolBase:129
     CID-{} 2019-07-25 11:30:27,571 [DEBUG] - [HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@3ceaa46] - HikariPool:730
     CID-{} 2019-07-25 11:30:27,580 [DEBUG] - [HikariPool-1 - Closing connection com.mysql.cj.jdbc.ConnectionImpl@3ceaa46: (connection evicted)] - PoolBase:129
     CID-{} 2019-07-25 11:30:27,581 [DEBUG] - [HikariPool-1 - After shutdown stats (total=0, active=0, idle=0, waiting=0)] - HikariPool:417
     CID-{} 2019-07-25 11:30:27,582 [INFO ] - [HikariPool-1 - Shutdown completed.] - HikariDataSource:352
     java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE IF NOT EXISTS KUMARREFS (ID VARCHAR(50) NULL, CONTENT TEXT NULL, MO' at line 1
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
        at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:782)
        at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:666)
        at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95)
        at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java)
        at com.test.ref.sql2.Sql2.executeStatement(Sql2.java:86)

【问题讨论】:

  • 根据完整的错误消息,您可能在CREATE TABLE IF NOT EXISTS KUMARREFS 之前缺少;
  • 您实际上可以将您的问题简化为错误消息和查询。其余的不相关。
  • CREATE TABLE IF NOT EXISTS KUMARREFS 前有分号。我认为它会帮助其他人看到我的配置。

标签: mysql sql jdbc hikaricp


【解决方案1】:

一个故障排除技巧是将您的查询打印到您的控制台。这将显示您的查询是否真的与您在 MYSQL COMMAND 中直接使用的 SQL 查询相同。

我最近一直在使用 MSQL 做很多工作,这个故障排除技巧修复了我的很多类似错误。

【讨论】:

    【解决方案2】:

    我的问题已解决。问题是我们不能在执行 jdbc 时使用两个查询。 删除 USE REFS 后;都很好。

    错误

    USE REFS; CREATE TABLE IF NOT EXISTS KUMARREFS (ID VARCHAR(50) NULL, CONTENT TEXT NULL, MODIFIED_DATE timestamp DEFAULT CURRENT_TIMESTAMP);

    工作

    CREATE TABLE IF NOT EXISTS ${tableName} (ID VARCHAR(50) NULL, CONTENT TEXT NULL, MODIFIED_DATE timestamp DEFAULT CURRENT_TIMESTAMP);

    【讨论】:

      猜你喜欢
      • 2017-09-07
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 2014-10-25
      相关资源
      最近更新 更多