JDBC Template PreparedStatementCallback error HELP?

I was testing to transfer data of the result query to a String variable but when I did I received this bunch of errors, I don't have any idea why did this occured, I tested my query in mysql and it worked, but how come in my code isn't? here's my test code

   package test;
import dao.FinanceDao;
import javax.swing.JTextArea;
import java.util.Scanner;
import java.util.List;
import javax.swing.JOptionPane;
import domainmodel.User;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class TestDrive {

    public static void main(String[] args){
        String employeeID = null;
        String password = null;
        JTextArea text = new JTextArea();
        FinanceDao finance = new FinanceDao();
        DataSource  dataSource = SourceObj.getSource();

        finance.setDataSource(dataSource);

        /*Scanner input = new Scanner(System.in);
        System.out.println("Enter your Choice for Employee ID");
        String empID = input.nextLine();
        System.out.println("Enter your choice for Password");
        String password = input.nextLine();
        finance.Add(empID,password);
        */
        String idNumber = JOptionPane.showInputDialog("Enter Employee ID to Search");

        List<User> test = finance.select(idNumber,"51010");
        for(User u: test){
        employeeID = u.getEmpID();
        password = u.getPassword();
        if(employeeID == null){
            text.setText("No Result");
        }else{
            text.setText("\tEmployeeID: "+employeeID+"\n\tPassword: "+password);
            }
        }

        UI U = new UI(text);
    }
}

and this one

package dao;

import javax.sql.DataSource;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import dao.mapper.UserRowMapper;
import domainmodel.User;

public class FinanceDao implements Manage {

    private DataSource ds;

    @Override
    public void setDataSource(DataSource ds) {
        this.ds = ds;

    }

    @Override
    public void Add(String empID, String password) {
        JdbcTemplate Add = new JdbcTemplate(ds);
        Add.update("INSERT INTO user (empID,password) VALUES(?,?)",
        new Object[] { empID, password });
    }

    @Override
    public void Delete(String empID , String password) {
        JdbcTemplate Delete = new JdbcTemplate(ds);
        Delete.update("Delete from User where emp_id = '?'",new Object[]{empID});
    }


    public List<User> select(String empID,String password) {
        JdbcTemplate select = new JdbcTemplate(ds);
        return select
                .query(
                        "SELECT EMPID ,PASSWORD from  USER where empID = '?' AND password = ?",
                        new Object[] {empID , password},
                        new UserRowMapper());
    }

}

the error

EDIT and this is my error

Dec 2, 2011 6:02:29 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
Dec 2, 2011 6:02:34 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
Dec 2, 2011 6:02:34 AM org.springframework.jdbc.support.SQLErrorCodesFactory <init>
INFO: SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT EMPID ,PASSWORD from  USER where empID = '?' AND password = ?]; SQL state [S1009]; error code [0]; Parameter index out of range (2 > number of parameters, which is 1).; nested exception is java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:120)
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:276)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:553)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:587)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:616)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:624)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:656)
    at dao.FinanceDao.select(FinanceDao.java:36)
    at test.TestDrive.main(TestDrive.java:32)
Caused by: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3729)
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3713)
    at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4553)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:236)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:94)
    at org.springframework.jdbc.core.ArgPreparedStatementSetter.setValues(ArgPreparedStatementSetter.java:51)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:592)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:537)
    ... 6 more

Answers


In the search method where do you pass empID to the query?

    @Override
    public List<User> Search(String empID) {
        JdbcTemplate search = new JdbcTemplate(ds);
        return search.query("Select empID from user where empID = '?'",
        new UserRowMapper());
    }

to me that looks rather suspicious. Shouldn't it be something like

        return search.query("Select empID from user where empID = ?", new Object[]{empID}),new UserRowMapper());

EDIT and also you need to remove the quotes around the question mark


Need Your Help

Where is global.asax.cs in Visual Studio 2010

c# .net asp.net visual-studio global-asax

I don't have a Global Application class code-behind any more inside my installed templates. All I have is Global.asax. I find more comfortable working with Global.asax.cs.

Writing full 100+ lines of html to a file with php

php html function fwrite

I have a system set up where, when the user registers, it creates a custom directory for them and then inside that directory it creates a file called index.html. I would like to write an entire HTM...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.