Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 格式化准备好的语句以查询数据库_Java_Database_Prepared Statement_Resultset - Fatal编程技术网

Java 格式化准备好的语句以查询数据库

Java 格式化准备好的语句以查询数据库,java,database,prepared-statement,resultset,Java,Database,Prepared Statement,Resultset,我正在做一个创建登录页面的项目。为此,我使用一个数据库来存储用户信息。到目前为止,我的数据库中有四列:用户名、密码、电子邮件和管理员 现在,我在使用准备好的语句/结果集格式访问该数据库时遇到问题。现在我进入第三次返回,打印输入的用户名和密码,然后生成一个错误。我是否将准备好的报表格式设置错误 好的,根据之前的回答,我已经更正了大部分代码谢谢,现在我在打印结果集时出现了以下错误: java.sql.SQLException:列索引超出范围,2>1 有什么想法吗 我的代码: Properti

我正在做一个创建登录页面的项目。为此,我使用一个数据库来存储用户信息。到目前为止,我的数据库中有四列:用户名、密码、电子邮件和管理员

现在,我在使用准备好的语句/结果集格式访问该数据库时遇到问题。现在我进入第三次返回,打印输入的用户名和密码,然后生成一个错误。我是否将准备好的报表格式设置错误

好的,根据之前的回答,我已经更正了大部分代码谢谢,现在我在打印结果集时出现了以下错误:

java.sql.SQLException:列索引超出范围,2>1

有什么想法吗

我的代码:

    Properties props = new Properties();
    props.setProperty("user", "root");
    props.setProperty("password", "root");
    props.setProperty("databaseName", "dbname");

    String ret = ERROR;
    Connection myCon = null;
    try{
        System.out.println("got here 1!");
        Class.forName ("com.mysql.jdbc.Driver").newInstance();

        System.out.println("got here 2!");
        myCon = DriverManager.getConnection("jdbc:mysql://ipaddresshere:3306/dbname",props);

        System.out.println("got here 3!");
        System.out.println(username);
        System.out.println(password);
        String dbQuery = "SELECT count(*) FROM loginTestTable where username = "+username+" AND password = "+password+"";

        //PreparedStatement prep = myCon.prepareStatement(dbQuery);" 
        PreparedStatement ps = myCon.prepareStatement(dbQuery);

        ps.setString(1, username);
        ps.setString(2, password);

        ResultSet result = ps.executeQuery();
        System.out.println("got here 4!");

        while (result.next()) {
            System.out.println("got here 5!");
            ret = SUCCESS;
            System.out.println("username: "+result.getString(1)+" password: "+result.getString(2)+" email: "+result.getString(3));
            if(result.getString(4).toLowerCase()=="YES"){
                ret = "admin";
            }
        }
    }catch(Exception e){
        System.out.println("arg there be an error me matey!");
        ret = ERROR; 
    }finally{
        if(myCon!=null){
            try{
                myCon.close();
            }catch (Exception e){

            }
        }
    }
    return ret;

您的代码存在多个问题:

首先,您缺少用户名和密码的引号

其次,除非您使用占位符定义查询,否则PreparedStatementsetString方法无效?像

第三,决不能将字符串与等式==运算符进行比较。使用String.equals作为

更改行:

String dbQuery = "SELECT count(*) FROM loginTestTable where username = "+username+" AND password = "+password+"";
作者:


非常有用,但当我进入System.out.println时,用户名:+result.getString1+密码:+result.getString2;我还是会扔一个error@Missmuffut,这是因为您选择了Count*而不是table columns。切换到从…选择*。。。获取所有值。
String dbQuery = "SELECT count(*) FROM loginTestTable " +
                 "where username = ? AND password = ?";
// also note you need toUpperCase() here
"YES".equals(result.getString(4).toUpperCase());
String dbQuery = "SELECT count(*) FROM loginTestTable where username = "+username+" AND password = "+password+"";
String dbQuery = "SELECT count(*) FROM loginTestTable where username = ? AND password = ?";