参数索引超出范围

时间:2018-04-01 12:58:21

标签: java mysql jdbc

我尝试创建一个登录表单,它显示列索引超出范围。我创建了两列,我使用了两列,但显示错误。

String url = "jdbc:mysql://localhost:3306/login_form?useSSL=false";
String name = "Vzlys";
String Pass = "Vzlys@1995";
   try 
    {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(url,name,Pass);
        st = con.prepareStatement("select * from login where username = ? and password = ?");//here login is my table name
        st.setString(1,txtusername.getText());
        st.setString(2,txtpassword.getText());//error occurs here
        rs = st.executeQuery();
        JOptionPane.showMessageDialog(null,"Welcome");
        ferrysql f = new ferrysql();
        f.setVisible(true);
        con.close();
        st.close();
    } 
    catch (Exception e) 
    {
       JOptionPane.showMessageDialog(null,e);
    }

2 个答案:

答案 0 :(得分:2)

在您的代码中:

 st = con.prepareStatement("query");

表示您的查询是:query

但如果你使用;

 String query= "select * from table A where column1 = ?";
 st = con.prepareStatement(query);

注意:在此标题中,查询不在引号内。

希望这会有所帮助。

答案 1 :(得分:0)

  1. st = con.prepareStatement("query"); 上面的行显示您的查询是“查询”而不是您可能已在程序中使用的变量

  2. 这可能是由于您的txtpassword.getText()在行中为空            st.setString(2,txtpassword.getText());

    打印txtusername和txtpassword以检查两个字段是否包含数据,然后再使用preparedStatement

  3. 如果您要检查用户名和密码,则必须使用以下查询

    PreparedStatement st = con.prepareStatement("select * from user where 
    (userName = ? and password = ?");
             st.setString(1,txtusername.getText());
            st.setString(2,txtpassword.getText());
    

    这应该有效