[英]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.