Prepared SQL Exception "No Input Parameters"

so I am trying to extract data from the database. Maybe I looked at him too much, but I can not find the problem.

The connection is excellent, the instruction is correct (works with static data), and the data from the object is Itemcorrect.

This tells me that there are no input parameters for the instruction. The exception is the method getSelectPrepareStatement(). The code:

 public Result[] getItemsFromInput(Item item) throws SQLException {
    PreparedStatement statement;
    ArrayList<Result> results = new ArrayList<Result>();
    String query =  "SELECT Code1, Name, A.Code2 " +
                    "FROM ItemTable A " +
                    "INNER JOIN CategoryTable B " +
                    "ON A.CatCode = B.CatCode" +
                    "AND B.ID LIKE '?'";
    statement = getSelectPrepareStatement(query, item.getTail().getId()+"%");

    ...

    rs = queryForResultSet(statement);

    while(rs.next()) {
        results.add(new Result(
                rs.getString("ItemName"),
                rs.getInt("ItemCode"),
                rs.getString("ClassCode")));
    }

    return results.toArray(new Result[results.size()]);
}

Getting PreparedStatement with the values ​​set here:

private PreparedStatement getSelectPrepareStatement(String SQL, String data) throws SQLException {
    PreparedStatement pStmt = conn.prepareStatement(SQL);
    pStmt.setString(1, data);

    return pStmt;
}

An exception occurs when invoked pStmt.setString(1, data);, although I set the instruction as a paragraph.

Error:

    java.sql.SQLException: No input parameters.
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedResultSet.noStateChangeException(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedPreparedStatement.setString(Unknown Source)
        at connection.Communicator.getSelectPrepareStatement(Communicator.java:306)
        at connection.Communicator.getItemsFromInput(Communicator.java:56)
        at frame.PromotionsDialog$1.propertyChange(PromotionsDialog.java:126)
        at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:328)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:303)
        at java.awt.Component.firePropertyChange(Component.java:8402)
        at javax.swing.JComponent.firePropertyChange(JComponent.java:4494)
        at frame.DataPanel$1.actionPerformed(DataPanel.java:130)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
        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:6505)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
        at java.awt.Component.processEvent(Component.java:6270)
        at java.awt.Container.processEvent(Container.java:2229)
        at java.awt.Component.dispatchEventImpl(Component.java:4861)
        at java.awt.Container.dispatchEventImpl(Container.java:2287)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
        at java.awt.Container.dispatchEventImpl(Container.java:2273)
        at java.awt.Window.dispatchEventImpl(Window.java:2719)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:688)
        at java.awt.EventQueue$3.run(EventQueue.java:686)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
        at java.awt.EventQueue$4.run(EventQueue.java:702)
        at java.awt.EventQueue$4.run(EventQueue.java:700)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
    Caused by: java.sql.SQLException: No input parameters.
        at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
        ... 51 more
    Caused by: ERROR 07009: No input parameters.
        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
        at org.apache.derby.impl.sql.GenericParameterValueSet.checkPosition(Unknown Source)
        at org.apache.derby.impl.sql.GenericParameterValueSet.getParameterForSet(Unknown Source)
        ... 47 more
+5
source share
3 answers

This is a problem in your SQL.

AND B.ID LIKE '?'

- ?, . , , , B.ID - .

:

AND B.ID LIKE ?

.

+8

?

Try

String query =  "SELECT Code1, Name, A.Code2 " +
                    "FROM ItemTable A " +
                    "INNER JOIN CategoryTable B " +
                    "ON A.CatCode = B.CatCode" +
                    "AND B.ID LIKE ?%";
    statement = getSelectPrepareStatement(query, item.getTail().getId()+"");
+4

Try removing single quotes from the anchor parameter. This is what PreparedStatement does for you.

String query =  "SELECT Code1, Name, A.Code2 " +
                "FROM ItemTable A " +
                "INNER JOIN CategoryTable B " +
                "ON A.CatCode = B.CatCode" +
                "AND B.ID LIKE ?";
+1
source

All Articles