2013-01-03 148 views
1

我正在使用我生成的準備好的語句,並且我在java拋出的語句上出現語法錯誤。然而,當我複製並粘貼到數據庫的phpmyadmin的PS的toString,它完美無瑕地執行。任何想法可能是錯誤的,我相當難住?mysql準備語句java

edit:changed to ps.executeUpdate(query);仍然不起作用。

public int addOrder(Order order){ 
    int rs=false; 
    try { 
     String query = "INSERT INTO `orders`(`orderNumber`, `productNumber`, `quantity`, `orderer`, `assembler`, " 
       + "`meshType`, `beadType`, `beadCount`, `notes`, `dateCompleted`, `dateSubmitted`, `isComplete`) " 
       +"VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"; 
     PreparedStatement ps = con.prepareStatement(query); 
     ps.setString(1, order.getOrderNumber()); 
     ps.setInt(2, order.getProductNumber()); 
     ps.setInt(3, order.getQuantity()); 
     ps.setString(4, order.getOrderer()); 
     ps.setString(5, order.getAssembler()); 
     ps.setString(6, order.getMesh()); 
     ps.setString(7, order.getBeadType()); 
     ps.setInt(8, order.getBeadCount()); 
     ps.setString(9, order.getNotes()); 
     ps.setLong(10, order.getDateCompleted().getTime()); 
     ps.setLong(11, order.getDateSubmitted().getTime()); 
     ps.setBoolean(12, order.getIsComplete()); 
     System.out.println(ps.toString()); 
     rs = ps.executeUpdate(query); 

    } 
    catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return rs; 
} 

我得到的錯誤消息,在addOrder的ps.toString()前面。就像我說的,如果我複製粘貼toString的相關部分到phpmyadmin並執行它的工作正常。我做錯了什麼想法?

[email protected]: INSERT INTO 
`orders`(`orderNumber`, `productNumber`, `quantity`, `orderer`, 
`assembler`, `meshType`, `beadType`, `beadCount`, `notes`, 
`dateCompleted`, `dateSubmitted`, `isComplete`) VALUES 
('',251,1,'Mark','','Other','LBB',150,'this is a 
test',1357249393009,1357249393010,0) 

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您在您的SQL語法錯誤 ;請檢查對應於您的 MySQL服務器版本的手冊,以便在 的第1行在 '?,?,?,?,?,?,?,?,?,?,?)附近使用正確的語法。 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法) 在sun.reflect.NativeConstructorAccessorImpl.newInstance(未知 來源)在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 來源)在java.lang.reflect.Constructor.newInstance(未知源) 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:1053) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java: 4096)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)at com.mysql.jdbc.MysqlIO.sqlQueryDirect( MysqlIO.java:2651) com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2728)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2678)at com.mysql.jdbc。 StatementImpl.execute(StatementImpl.java:894)at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732)at cbs.business.internalorders.Database.addOrder(Database.java:232)at cbs。 business.internalorders.IOGui $ 1.widgetSelected(IOGui.java:205)at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source) org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)at cbs.business.internalorders.IOGui。(IOGui.java:218)at cbs.business.internalorders.InternalOrders.main(InternalOrders.java: 15)

+0

不要使用單引號,但反引號:'\'訂單\''應該是「訂單」或者它只是一個複製和粘貼的情況。 – RealHowTo

+0

我刪除了反引號,仍然得到相同的結果。 – john

+1

你可以發表表格結構嗎? – jlordo

回答

0

我終於找到了我的解決方案,出於某種原因,它不喜歡我的setStrings,所以我設置了很長的路,並得到它的工作。謝謝!

0
String query = "INSERT INTO `orders`(`orderNumber`, `productNumber`, `quantity`, `orderer`, `assembler`, " 
      + "`meshType`, `beadType`, `beadCount`, `notes`, `dateCompleted`, `dateSubmitted`, `isComplete`) " 
      +"VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"; 

應該讀

String query = "INSERT INTO orders(orderNumber, productNumber, quantity, orderer, assembler, " 
      + "meshType, beadType, beadCount, notes, dateCompleted, dateSubmitted, isComplete) " 
      +"VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"; 

即沒有引號。

+0

我從查詢中刪除了引號,仍然得到相同的結果。這是我的新字符串查詢。字符串查詢=「INSERT INTO訂單(訂單號,產品編號,數量,訂單,彙編程序,」 +「meshType,beadType,beadCount,notes,dateCompleted,dateSubmitted,isComplete)」+「VALUES(?,?,?,?,? ,,,,,,,)「???????; – john

+0

試着把它當作一個正常的陳述來看看是否給你不同的東西。 – BevynQ

+0

我做了一個正常的聲明,並使其工作。 – john

2

@TheCapn的刪除答案几乎是正確的。將executeQuery(query)更改爲executeUpdate(),不帶參數。

0

我認爲這個錯誤可能來自數據類型轉換。你可以嘗試不使用參數並直接設置值?我之前在ADO.NET中遇到過類似的問題。

0

如果你把查詢放在裏面,它會執行兩次。在你的情況下,你不應該把查詢放在裏面。你所需要的就是這樣;

ps.executeUpdate(query); <-- remove 'query' 

//should be like this 
ps.executeUpdate(); 

executeQuery(); //Generally this use for select statement. The output will be in Resultset. 

executeUpdate(); //Generally this use for insert, update, delete and drop table. 

execute(); //If you don't know which method to be used for executing your SQL statements, you can use this.