2011-06-17 14 views
1

私はmysqlデータベースに接続しているJavaアプリケーションで作業しています。私は接続してクエリを実行することができますが、私は文字列を取ってSQLクエリとして実行するときに私はこのエラーが発生します。JdbcとMySqlは一緒にうまく遊びたくない

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.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 'INSERT INTO usageData (`COMID`,`Year`,`Month`,`kwhr`,`co2`) 
VALUES ('15650', '2' at line 3 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 
at com.mysql.jdbc.Util.getInstance(Util.java:384) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1664) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1583) 

ベローは、私はこれは、接続の問題ではありません

public static void main(String[] args) throws Exception { 

    String dbms = "mysql"; 
    String serverName = "localhost"; 
    String portNumber = "8889"; 
    String DBName = "ConnectDatabase"; 
    String user = "root"; 
    String password = "root"; 

    ArrayList<Integer> yearList = new ArrayList<Integer>(); 
    ArrayList<CustomerRecord> customerRecordList = getCustomerRecords(args[0], yearList); 
    ArrayList<ClimateRecord> climateRecordList = getClimateRecords(args[1]); 


    StringBuffer buf = new StringBuffer(); 

    for (CustomerRecord record : customerRecordList) { 
     buf.append(customerRecord2SQL(record)); 
    } 

    for (int i = (climateRecordList.size() - 1); i >= 0; i--) { 
     //for (ClimateRecord record : climateRecordList) { 
     ClimateRecord record = climateRecordList.get(i); 
     buf.append(climateRecord2SQL(record)); 
    } 

    buf.append(cityStats(dbms,serverName,portNumber,DBName,user,password)); 
    buf.append(zipStats(dbms,serverName,portNumber,DBName,user,password)); 

    System.out.println(buf.toString()); 

    //here is the code to go ahead and update the database 
    Connection con = null; 

    con = DriverManager.getConnection("jdbc:" + dbms + "://" + serverName + ":" + portNumber + "/" + DBName + "?user="+user+"&password=" + password); 

    Statement stmt = con.createStatement(); 

    stmt.executeUpdate(buf.toString()); 

    BufferedWriter out = new BufferedWriter(new FileWriter(args[2])); 
    out.write(buf.toString()); 
    out.close(); 
} 
+1

この文は何ですか: 'System.out.println(buf.toString());'正確に印刷されますか? – Dan

答えて

2

データベースに接続するために使用しているコードです。つまり、SQL文に何か問題があることを意味します。文をそのままコピーし、データベースで直接実行してみてください。何が間違っているかを確認し、Javaコードで修正してください。

私はフィールド名の周りの一重引用符が空想的だと気付きました。それは問題かもしれません。

+0

いつも私はあなたが正しいと言っている提案に感謝します。私はそれが全体のクエリを印刷して、私は問題なしでphpMyAdminを通してそれを走らせました。 –

+0

同じSQL文であることは間違いありませんか?どのようなデータ型はCOMIDと年ですか?私はあなたが値を引用したことに気付きます。また、なぜフィールド名のファンシーな引用符ですか? –

+0

ええ、私はそれが同じ声明であると確信しています。私はテーブルを切り捨てるだけの簡単なことをやってみました。 2行目には常に同じエラーがスローされます。 –

-1

あなたのクエリは、「INSERT INTO usageData VALUESCOMIDYearMonthkwhrco2)である必要があります。 とbtw COMID、年...これらは何ですか?そしてなぜかわいい引用符...?

+0

これは間違っています。列名と値が混在しているようです。 – Dan

0

ここでは何が起こっているのか、他の誰もが実現しなかったことがあります。 JDBCは、一度に複数のクエリを実行することはありません。私は、動作しない文字列バッファに含まれる数百万のクエリを実行しようとしていました。

+1

ハァッ?あなたの元の質問から、あなたはそれがあなたがやっていることをどのように推測していたでしょうか? – Dan

関連する問題