2011-01-20 60 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已知有其古怪之處。