jdbc クエリを実行しようとしています。これが私のコードです
Timestamp timeStamp = new Timestamp(svnLog.getTime().getTime());
String query = "Insert into transaction (RevisionId, AuthorId, LogMessage, Time) values (?,?,?,?) ";
System.out.println("The query is " + query + svnLog.getRevisionId() + "," + svnLog.getAuthorId() + "," + svnLog.getLogMessage() + "," + timeStamp);
try {
PreparedStatement stmt = connManager.getConnection().prepareStatement(query);
stmt.setLong(1, svnLog.getRevisionId());
stmt.setString(2, svnLog.getAuthorId());
stmt.setString(3, svnLog.getLogMessage());
stmt.setTimestamp(4, timeStamp);
System.out.println("After binding " + stmt.toString());
これにより、次の例外がスローされます。
After binding com.mysql.jdbc.PreparedStatement@478e4327: Insert into transaction (RevisionId, AuthorId, LogMessage, Time) values (214,'mknauer','Initial import.','2007-03-01 06:39:21.128')
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
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317)
at dataminer.db.Transactiondb.addTransaction(Transactiondb.java:40)
at dataminer.svn.download.SVNLogManager.processTransaction(SVNLogManager.java:45)
at dataminer.svn.download.SVNLogManager.processSvnLog(SVNLogManager.java:26)
at dataminer.svn.download.SVNHistoryDownloadMgr.main(SVNHistoryDownloadMgr.java:160)
バインド後に準備されたステートメントを印刷しました。コマンドラインで実行すると、印刷されたクエリは正常に機能します。解決策が文字エンコーディングの my.cnf ファイルを変更することであった他のいくつかの投稿でこのエラーを見ました。この2行をこのファイルに追加しました
character_set_server=utf8
collation_server=utf8_general_ci
エラーは解決しませんでした。