2013-01-03 3 views
1

나는 생성 한 준비된 문장으로 작업 중이며 java가 던진 문장에 구문 오류가 발생합니다. 그러나 PS의 toString을 복사하여 데이터베이스의 phpmyadmin에 붙여 넣으면 완벽하게 실행됩니다. 어떤 생각이 잘못된 것일까 요, 나는 상당히 엉망이 되었습니까?mysql prepared statement java

편집 : 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()이 앞에옵니다. 그리고 내가 말했듯이, 만약 내가 phpmyadmin에 toString의 관련 부분을 붙여 넣기 복사하고 그것을 잘 작동합니다. 내가 뭘 잘못하고 있는지 알 겠어?

[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 구문에 오류가;1시에 MySQL 서버 버전에 해당하는 설명서에서 올바른 구문을 사용하여 '?,?,?,?,?,?,?,?,?,?,?)'근처에서 사용할 수 있는지 확인하십시오. java.lang.reflect.Constructor.newInstance에서 sun.reflect.DelegatingConstructorAccessorImpl.newInstance에서 sun.reflect.NativeConstructorAccessorImpl.newInstance (알 소스) (알 소스)에서 sun.reflect.NativeConstructorAccessorImpl.newInstance0 (기본 방법) (알 수없는 소스) com.mysql.jdbc.Util.handleNewInstance (Util.java:411) com.mysql.jdbc.Util.getInstance (Util.java:386) com.mysql.jdbc.SQLError.createSQLException (SQLError.java:1053) at com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java : 4096) com.mysql.jdbc.MysqlIO.sqlQueryDirect에서 com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:2490에서 com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:4028)) (AT MysqlIO.java:2651) at 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 (알 수없는 소스)(알 수없는 소스) 에서 org.eclipse.swt.widgets.Widget.sendEvent (알 수없는 소스) 에서 org.eclipse.swt.widgets.EventTable.sendEvent (알 수없는 소스) org.eclipse.swt.widgets.Display.runDeferredEvents (알 수없는 소스) (IOGui.java:218)에서 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 주문 (orderNumber, productNumber, 수량, 주문자, 어셈블러," + "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.