2013-08-03 85 views
0

如果我跑我的主類,我得到這個錯誤:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:在SQL語法錯誤

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 customerLogin(companyName,username,password) values('Big Company','D' at line 1 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359) 
    at dao.CustomerContactDAO.performUpdate(CustomerContactDAO.java:175) 
    at dao.DAOTemplate.executeUpdate(DAOTemplate.java:27) 
    at dao.CustomerContactDAO.addCustomerContact(CustomerContactDAO.java:88) 
    at test.Test.main(Test.java:29) 

這是在我的DAO代碼。我認爲錯誤是在這些代碼行中,但我不知道它是哪一個:

public boolean addCustomerContact(CustomerContact c) { 
    setQuery("insert into customerContact(companyName,lastName,firstName,email,telNum,local,cellNum) values(?,?,?,?,?,?,?);" 
      + "insert into customerLogin(companyName,username,password) values(?,?,?)"); 
    queries.add(getQuery()); 

    KeyValuePair onePair; 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.STRING); 
    onePair.setValue(c.getCompanyName()); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.STRING); 
    onePair.setValue(c.getLastName()); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.STRING); 
    onePair.setValue(c.getFirstName()); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.STRING); 
    onePair.setValue(c.getEmail()); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.INT); 
    onePair.setValue(c.getTelNum() + ""); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.INT); 
    onePair.setValue(c.getLocal() + ""); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.STRING); 
    onePair.setValue(c.getCellNum() + ""); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.STRING); 
    onePair.setValue(c.getCompanyName()); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.STRING); 
    onePair.setValue(c.getUsername()); 
    getParameters().add(onePair); 

    onePair = new KeyValuePair(); 
    onePair.setKey(KeyValuePair.STRING); 
    onePair.setValue(c.getPassword()); 
    getParameters().add(onePair); 
    return executeUpdate(); 
} 

回答

2

您試圖在一次執行中執行兩個查詢。這是JDBC不允許的。一次執行應該是唯一的一個語句。某些驅動程序允許它,但你需要啓用了連接屬性,例如爲MySQL是allowMultiQueries,看到http://dev.mysql.com/doc/refman/5.6/en/connector-j-reference-configuration-properties.html

allowMultiQueries
Allow the use of ';' to delimit multiple queries during one statement (true/false), defaults to 'false', and does not affect the addBatch() and executeBatch() methods, which instead rely on rewriteBatchStatements.

不過我強烈建議爲兩個單獨的語句來執行(可選在交易中)。這是JDBC兼容的,並將在所有數據庫上工作。

相關問題