2017-04-13 362 views
0

Javaコードでこのエラーの意味を理解できません。インデックスにINまたはOUTパラメータがありません。12

private static final String INPUT_FILE = "res/resprop.txt"; 
private static final String SELECT_MAX_ID = "SELECT MAX(ID) FROM RES"; 
private static final String INSERT_STMT = "INSERT INTO RES(ID, LEGALDESCRIPTION, ADDRESS, QUADRANT, ZONE, ASKINGPRICE, COMMENTS, AREA, BATHROOMS, BEDROOMS, GARAGE) values(?,?,?,?,?,?,?,?,?,?,?)"; 
private static final String UPDATE_STMT = "UPDATE RES SET ID = ?, LEGALDESCRIPTION = ?, ADDRESS = ?, QUADRANT = ?, ZONE = ?, ASKINGPRICE = ?, COMMENTS = ?, AREA = ?, BATHROOMS = ?, BEDROOMS = ?, GARAGE = ? where ID = ?"; 
private static final String SELECT_ID_STMT = "SELECT * FROM RES where ID = ?"; 
private static final String SELECT_LEGALDESCRIPTION_STMT = "SELECT * FROM RES where LEGALDESCRIPTION = ?"; 
private static final String SELECT_QUADRANT_STMT = "SELECT * FROM RES where QUADRANT = ?"; 
private static final String SELECT_PRICE_STMT = "SELECT * FROM RES where ASKINGPRICE = ?"; 

"int rowCount = pStat.executeUpdate();"という行にエラーがスローされます。

なぜ問題があるのか​​分かりませんが、inまたはoutパラメータについて聞いたことがありません。さらに、java.sql.SQLExceptionと呼ばれます。

あなたが更新クエリの実行に PreparedStatementに12パラメータを渡すので、以下に示すように、それを追加する必要があり
private boolean updatePreparedStatement(ResidentialProperty rp) 
{ 
    try 
    { 

     PreparedStatement pStat = conn.prepareStatement(UPDATE_STMT); 
     pStat.setLong(1, rp.getId()); 
     pStat.setString(2, rp.getLegalDescription()); 
     pStat.setString(3, rp.getAddress()); 
     pStat.setString(4, rp.getQuadrant()); 
     pStat.setString(5, rp.getZone()); 
     pStat.setDouble(6, rp.getAskingPrice()); 
     pStat.setString(7, rp.getComments()); 
     pStat.setDouble(8, rp.getArea()); 
     pStat.setDouble(9, rp.getBathrooms()); 
     pStat.setInt(10, rp.getBedrooms()); 
     pStat.setString(11, rp.getGarage()+""); 

     int rowCount = pStat.executeUpdate(); 

     System.out.println("row count = "+ rowCount); 
     pStat.close(); 
     return rowCount == 1; 

    } 
    catch(SQLException e) 
    { 
      e.printStackTrace(); 
    } 
    return false; 

} 

java.sql.SQLException: Missing IN or OUT parameter at index:: 12 
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1752) 
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3444) 
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530) 
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350) 
at saitMLS.persistance.property.ResidentialPropertyBroker.updatePreparedStatement(ResidentialPropertyBroker.java:221) 
at saitMLS.persistance.property.ResidentialPropertyBroker.persist(ResidentialPropertyBroker.java:263) 
at saitMLS.problemDomain.property.UserInterface$1.actionPerformed(UserInterface.java:670) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6533) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6298) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4889) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4711) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2746) 
at java.awt.Component.dispatchEvent(Component.java:4711) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
+1

_fullとexact_例外とstacktraceを表示します。また、あなたのクエリの '? 'の数を数え、それらの'?'を記入するのに使った項目の数を数えれば、問題が見えるかもしれません... – csmckelvey

+1

あなたの 'UPDATE_STMT'は** 12 **'? 'プレースホルダ。しかし、あなたはあなたの呼び出しの前に11を設定します。 'pStat.setLong(12、rp.getId());' –

+0

ありがとう! –

答えて

2

pStat.setLong(12, rp.getId()); 

しかし、私が提案する、より良い方法は、あなたのドンであり、 「tはあなたのUPDATE_STMT声明の中で(すなわち、第一パラメータとして)再IDを設定されているので、以下に示すようにコードを変更する必要があります。

pStat.setString(1, rp.getAddress()); 
    pStat.setString(2, rp.getQuadrant()); 
    //add others here 
    pStat.setString(10, rp.getGarage()+""); 
    pStat.setLong(11, rp. getId()); 

QUERY:

UPDATE_STMT = "UPDATE RES SET LEGALDESCRIPTION = ?, 
ADDRESS = ?, QUADRANT = ?, ZONE = ?, ASKINGPRICE = ?, COMMENTS = ?, 
AREA = ?, BATHROOMS = ?, BEDROOMS = ?, GARAGE = ? where ID = ?"; 
+0

ありがとうございます!それはうまくいった。 –

+0

上記の私の意見は分かりましたか?もう一度idを設定していますが、これは不要です。 – developer

+0

また、もし私が助けがあれば、私の答えをupvoteして受け入れることができます – developer

関連する問題