簡體   English   中英

mysql編寫的java語句

[英]mysql prepared statement java

我正在使用我生成的預准備語句,並且我在java拋出的語句中遇到語法錯誤。 然而,當我將PS的toString復制並粘貼到數據庫的phpmyadmin時,它可以完美地執行。 任何想法都可能是錯的,我很難過?

編輯:更改為ps.executeUpdate(查詢); 仍然無法正常工作。

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並執行它工作正常。 我做錯了什么想法?

   com.mysql.jdbc.JDBC4PreparedStatement@40378309: 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服務器版本相對應的手冊,以便在sun.reflect的第1行使用“?,?,?,?,?,?,?,?,?,?,?,?)'附近的正確語法。位於com.mysql的java.lang.reflect.Constructor.newInstance(未知來源)的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知來源)的sun.reflect.NativeConstructorAccessorImpl.newInstance(未知來源)的.NativeConstructorAccessorImpl.newInstance0(本地方法) com.mysql.jdbc.Util.getInstance(Util.java:386)中的.jdbc.Util.handleNewInstance(Util.java:411)位於com的com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)。 mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)位於com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)的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)的com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2678)at com.mysql.jdbc.StatementImpl.exec ute(StatementImpl.java:894)位於cbs.business.internalorders.IOGui的cbs.business.internalorders.Database.addOrder(Database.java:232)的com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732) $ 1.widgetSelected(IOGui.java:205)org.eclipse中的org.eclipse.swt.wts.EventTable.sendEvent(未知來源)位於org.eclipse.swt.wts.wtle上的org.eclipse.swt.widgets.TypedListener.handleEvent(未知來源)位於cbs.business.internalorders.IOGui的org.eclipse.swt.widgets.Display.readAndDispatch(未知來源)的org.eclipse.swt.widgets.Display.runDeferredEvents(未知來源)的.Widget.sendEvent(未知來源)。( IOGui.java:218)at cbs.business.internalorders.InternalOrders.main(InternalOrders.java:15)

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

如果你在其中放入查詢,它將執行兩次。 根據您的情況,您不應該在其中添加查詢。 你需要的就是這樣;

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.
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 (?,?,?,?,?,?,?,?,?,?,?,?)";

即沒有報價。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM