Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 如何在executeQuery方法中编写sql查询?_Java_Mysql_Jdbc - Fatal编程技术网

Java 如何在executeQuery方法中编写sql查询?

Java 如何在executeQuery方法中编写sql查询?,java,mysql,jdbc,Java,Mysql,Jdbc,我有一个带有字段userId的account\u holder表,我有一个数据集作为数据。我只想从account\u holder中选择一条记录,该记录的userId为data[3]I.e(数据集的4个字段)。我将此问题写为: Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from account_holder where userID = 'data[3]' "); 但是我的rs

我有一个带有字段userId的account\u holder表,我有一个数据集作为数据。我只想从account\u holder中选择一条记录,该记录的userId为
data[3]
I.e(数据集的4个字段)。我将此问题写为:

Statement st = con.createStatement();

ResultSet rs = st.executeQuery("select * from account_holder where userID = 'data[3]' ");

但是我的rs是
null
条目没有进入ResultSet对象rs。请告诉我在executeQuery()方法中使用where子句编写sql查询的正确方法。

您只需在executeQuery方法中更改查询即可

例如:

语句st=con.createStatement(); ResultSet rs=st.executeQuery(“从帐户持有人中选择*,其中userID=”+“数据[3]+”); 也可以运行以下命令:

ResultSet rs=st.executeQuery(“从账户持有人处选择*,其中userID=“+data[3]+”);

正如第一篇帖子所说,这是一种处理方法:

     try {
        Statement statement = connection.createStatement(); // Creating Statement

        // Executing Statement
        ResultSet resultSet = statement.executeQuery("SELECT * FROM account_holder WHERE userID = '" + data[3] + "'");

        // Check if result set has entries
        if (resultSet.first()) // If so the user already exists
            System.out.println("User already exists! " + resultSet.getString("userID"));
        else // If not the user does not exist
            System.out.println("User does not exist!");

        // Clean up
        resultSet.close();
        statement.close();
        connection.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
但在您的上下文中,我实际上建议使用
PreparedStatement

    try {
        // Making statement
        PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM account_holder WHERE userID = ?");
        preparedStatement.setString(1, data[3]); // Set String for the first question mark in Query

        ResultSet resultSet = preparedStatement.executeQuery(); // Executing the Prepared Statement

        // Check if result set has entries
        if (resultSet.first()) // If so the user already exists
            System.out.println("User already exists! " + resultSet.getString("userID"));
        else // If not the user does not exist
            System.out.println("User does not exist!");

        // Clean up
        resultSet.close();
        preparedStatement.close();
        connection.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }

rs
不能为
null
,除非您使用的JDBC驱动程序有缺陷
executeQuery
将返回非空的
ResultSet
或抛出
SQLException
。此外,您当前正在将
userID
与值为
'data[3]
的字符串文字进行比较,这可能会产生一个空结果集。
data
是Java应用程序中的数组还是MySQL数据库中的某个东西?@markrotVeel data是字符串数组。。我正在读取一个输入文件,并将文件内容放入该数据数组,然后将varchar(40)类型的userID字段与数据[3](字符串类型)进行比较,以检查该用户是否已在account_holder表中创建。我正在使用它检查rs是否为空。如果(rs!=null&&rs.next()){非空表示用户已创建}请回答您的问题。不要在评论中添加相关信息。在任何情况下,您都需要仔细阅读。虽然这可能会解决眼前的问题,但此解决方案容易受到SQL注入的攻击。最好使用带有参数的预处理语句。