【问题标题】:Stumped SQL Exception for JDBCJDBC 的 SQL 异常
【发布时间】:2011-06-12 04:35:36
【问题描述】:

我正在尽我所能让 JDBC 工作,现在唯一让我难过的是这个异常,我不知道:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: 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 '????????????????' at line 1
    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
    com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
    com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
    com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
    com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1890)
    com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3523)
    com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2386)
    com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2163)
    com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:794)
    com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:374)
    com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    java.sql.DriverManager.getConnection(libgcj.so.10)
    java.sql.DriverManager.getConnection(libgcj.so.10)

我正在使用它来连接...

Class.forName("com.mysql.jdbc.Driver");
DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "username", "password");

非常感谢!

【问题讨论】:

  • 似乎连接已打开,但查询语法有问题。问号的数量表明它可能是在列表中动态创建的(类似于 (?,?,?) 中的东西)格式错误。请问可以发帖吗?
  • 请提供更多细节。似乎您有某种编码错误。您的 SQL 和数据库的默认编码是什么?
  • @Steven:堆栈跟踪确认此异常是在调用getConnection() 时引发的,而不是在executeQuery() 左右。
  • 不幸的是我在这方面有点新手......但我只想说我没有使用查询,我在 DriverManager.getConnection(); 之后得到了这个异常;
  • FWIW(它可能不值多少钱),过去我在 GCJ 上遇到过很多麻烦(我假设您正在使用它,因为您的堆栈转储顶部指示 libgcj) ,以至于最好使用专有软件而不是沉浸在我的理想主义的光芒中:-) 不能肯定地说这是一个 GCJ 问题(因为我的问题是很久以前的)但第一件事 我会用“真正的”JRE 来测试它。

标签: java mysql jdbc mysql-error-1064 connector


【解决方案1】:

这些是相关部分:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: 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 '????????????????' at line 1
    ...
    com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1890)
    ...
    java.sql.DriverManager.getConnection(libgcj.so.10)

这些问号表示在查询配置客户端字符集期间存在严重的字符编码问题。

作为第一次尝试,打开my.cnf 文件并确保存在以下两个条目:

character_set_server=utf8
collation_server=utf8_general_ci

作为第二次尝试,将 GCJ 替换为更强大的 OpenJDKOracle (Sun) JDK。众所周知,GCJ 有其古怪之处。

【讨论】:

  • 好的,所以我刚刚在 /ect/mysql/my.cnf 打开了 my.cnf 文件,并为这两个条目执行了 CTRL+F,但我都没有找到它们。我应该在哪里添加这些条目,可能不仅仅是在文件中的任何地方添加它吗?
  • 是的,只是 slap 他们 :) 前后换行。无论如何我都会更换GCJ。你现在和未来的许多烦恼都会像阳光下的雪一样消失。
  • 好吧,我把它拍了进去,现在我需要重新启动 MySQL 服务器来完成这项工作,因为它还没有工作。另外,当我在 BASH 中输入“java”时,我得到 gij,这就是你替换它的意思吗... gij 和 GCJ 是一样的吗?
  • @Aero 是的,你必须重启 MySQL。
  • 非常感谢,my.cnf 条目成功了……你不知道这有多令人沮丧……我现在可以去吃晚饭了。 :)
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多