मैं परिणाम क्वेरी के डेटा को एक स्ट्रिंग चर में स्थानांतरित करने के लिए परीक्षण कर रहा था, लेकिन जब मुझे त्रुटियों का यह गुच्छा मिला, तो मुझे नहीं पता कि ऐसा क्यों हुआ, मैंने 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
1
user962206 1 पद 2011, 16:04
1
कृपया स्टैक ट्रेस पेस्ट करें।
 – 
JBaruch
1 पद 2011, 16:26
मैंने अपना उत्तर अपडेट किया, कृपया जांचें
 – 
user962206
2 पद 2011, 02:07

1 उत्तर

सबसे बढ़िया उत्तर

खोज विधि में आप क्वेरी के लिए 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());

संपादित करें और आपको प्रश्न चिह्न के आसपास के उद्धरणों को भी हटाना होगा

1
Peter Szanto 2 पद 2011, 13:39
मैंने इसे फिर से अपडेट किया, यह काम कर रहा है लेकिन यह मुझे 1 का परिणाम देता रहता है ऐसा क्यों ??
 – 
user962206
1 पद 2011, 16:54
आप किसी उपयोगकर्ता को उसके empID द्वारा चुन रहे हैं, क्या एक परिणाम अपेक्षित परिणाम नहीं है?
 – 
Mark Rotteveel
1 पद 2011, 17:19
1 के परिणाम से आपका क्या तात्पर्य है? क्या आपका मतलब एक ही रिकॉर्ड है? यह अपेक्षित है जैसा कि MarkRotteveel ने बताया है
 – 
Peter Szanto
1 पद 2011, 19:00
1, अपेक्षित परिणाम नहीं है, क्योंकि मेरी तालिका में empID स्ट्रिंग हैं, और यदि आप देख सकते हैं, तो मैंने एक empID की खोज की है जिसका यह मान 2010-01015 है"
 – 
user962206
2 पद 2011, 01:57
इस मामले में समस्या यह है कि आपने इस तरह प्रश्न चिह्न के चारों ओर उद्धरण जोड़े हैं: '?' भले ही पैरामीटर एक स्ट्रिंग है जिसकी आवश्यकता नहीं है। आप बस "सेलेक्ट EMPID, पासवर्ड USER से कर सकते हैं जहाँ empID =? और पासवर्ड =?"
 – 
Peter Szanto
2 पद 2011, 13:38