我有这个sql语句:
selectAllUsersByCriteria = 连接.prepareStatement( “从用户那里选择*?=?” );
下面的方法运行该语句:
public ArrayList getUsersByCriteria(String 1criteria, String 2criteria)
{
ArrayList results = null;
ResultSet resultSet = null;
thử
{
selectAllUsersByCriteria.setString( 1, 1criteria);
selectAllUsersByCriteria.setString( 2, 2criteria);
// executeQuery returns ResultSet containing matching entries
resultSet = selectAllUsersByCriteria.executeQuery();
results = new ArrayList< User >();
while ( resultSet.next() )
{
results.add( new User( resultSet.getString( "userName" ),
resultSet.getString( "Password" ),
resultSet.getBoolean( "AdminRights" ),
resultSet.getDouble( "Balance" )
) );
} // end while
} // end try
catch ( SQLException sqlException )
{
sqlException.printStackTrace();
} // end catch
finally
{
thử
{
resultSet.close();
} // end try
catch ( SQLException sqlException )
{
sqlException.printStackTrace();
close();
} // end catch
} // end finally
return results;
}
这不起作用。我猜这是第一个?这就是问题所在。不是可以设置 WHERE 吗?作为一个 ?。是否可以通过其他方式解决。
这是我想显示的一个表格,但它应该只显示遵循它的用户满足两个条件。
您需要将列名称直接注入(inject)到字符串中。这将使您面临 SQL 注入(inject)攻击,因此我建议查询(并且可能缓存)表的架构信息(具体在 INFORMATION_SCHEMA.COLUMNS
中找到)。
这样,您可以通过查看用户提交的列名称是否在可用列列表中来确保用户提交的列名称与表中的列名称之一相匹配,然后再将其注入(inject)到脚本中。
Tôi là một lập trình viên xuất sắc, rất giỏi!