【发布时间】:2020-05-02 16:26:17
【问题描述】:
我有一个小问题。我写了一个方法,其中我有一个 SQL 查询,应该在 2 个参数之后输出一个正确的字符串。但是,在调试时,结果不是正确的元素。我不知道为什么会这样。
public static String findRightTemplate(String user_name, int template_id)
throws Exception {
Connection conn = DriverManager.getConnection(
"xxx", "xxx", "xxx");
Statement st = conn.createStatement();
st = conn.createStatement();
ResultSet rs = st.executeQuery(
"SELECT template FROM templates " +
"where template_id=template_id AND user_name=user_name"
);
String temp="";
while(rs.next())
{
temp=rs.getString("template");
}
rs.close();
st.close();
conn.close();
我要求提供用户名和模板 ID,我只想从模板列中获取一个元素。 SQL 查询是正确的。我已经测试过了。但似乎查询贯穿所有具有相同用户名的元素。结果,我只得到最后一个元素,而不是正确的。
更新
【问题讨论】:
-
您的 SQL 服务器将看到以下查询:
SELECT template FROM templates where template_id=template_id AND user_name=user_name您的WHERE条件将始终为真(嗯...除了 NULL)。跨度> -
"结果,我只得到了最后一个元素,而不是正确的那个。" ——这没有意义。关系表没有固有的行顺序;在没有
ORDER BY子句的情况下,查询可以按任何顺序返回行,这也可以随着时间而改变。 -
使用
PreparedStaement并参数化您的查询。 -
@SteveLovell 你为什么要这么建议?
-
请告诉我这不是生产代码。像这样组装你的查询字符串会让你对SQL injection attacks敞开心扉。 (必填xkcd)