gpt4 book ai didi

java - JDBC 模板PreparedStatementCallback 错误帮助?

转载 作者:太空宇宙 更新时间:2023-11-04 08:26:48 26 4
gpt4 key购买 nike

我正在测试将结果查询的数据传输到字符串变量,但是当我这样做时,我收到了一堆错误,我不知道为什么会发生这种情况,我在 mysql 中测试了我的查询并且它有效,但我的代码中怎么没有呢?这是我的测试代码

   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);
}
}

还有这个

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());
}

}

错误

编辑这是我的错误

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

最佳答案

在搜索方法中,您将 empID 传递给查询的哪里?

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

对我来说这看起来相当可疑。难道不应该是这样吗

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

编辑并且您还需要删除问号周围的引号

关于java - JDBC 模板PreparedStatementCallback 错误帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8341080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com