我尝试创建一个登录表单,它显示列索引超出范围。我创建了两列,我使用了两列,但显示错误。
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);
}
答案 0 :(得分:2)
在您的代码中:
st = con.prepareStatement("query");
表示您的查询是:query
但如果你使用;
String query= "select * from table A where column1 = ?";
st = con.prepareStatement(query);
注意:在此标题中,查询不在引号内。
希望这会有所帮助。
答案 1 :(得分:0)
st = con.prepareStatement("query");
上面的行显示您的查询是“查询”而不是您可能已在程序中使用的变量
这可能是由于您的txtpassword.getText()
在行中为空
st.setString(2,txtpassword.getText());
打印txtusername和txtpassword以检查两个字段是否包含数据,然后再使用preparedStatement
如果您要检查用户名和密码,则必须使用以下查询
PreparedStatement st = con.prepareStatement("select * from user where
(userName = ? and password = ?");
st.setString(1,txtusername.getText());
st.setString(2,txtpassword.getText());
这应该有效