2011-01-20 62 views
2

我想我只能得到一个JDBC的工作,那就是绊倒我现在唯一的事情是这样的例外,我不知道的想法:难倒SQL异常的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"); 

非常感谢!

+2

看起来连接已打开,但查询语法存在问题。问号的数量表明它可能是一个动态创建的列表(类似于(?,?,?))中的格式不正确。你可以发布查询吗? – StevenWilkins 2011-01-20 02:31:19

+0

请详细说明。好像你有某种编码错误。什么是你的SQL和你的数据库的默认编码? – xiaowl 2011-01-20 02:31:40

回答

7

这些都是相关部分:

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 

至于第二次尝试,通过OpenJDKOracle (Sun) JDK这是方式更强大的替代GCJ。 GCJ已知有其古怪之处。