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
In the search method where do you pass empID to the query?
to me that looks rather suspicious. Shouldn’t it be something like
EDIT
and also you need to remove the quotes around the question mark