Java 如何在executeQuery方法中编写sql查询?
我有一个带有字段userId的account\u holder表,我有一个数据集作为数据。我只想从account\u holder中选择一条记录,该记录的userId为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
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注入的攻击。最好使用带有参数的预处理语句。