【发布时间】:2016-01-07 21:22:21
【问题描述】:
所以我有一个通过 JDBC 连接到数据库的 Java 应用程序。我现在要做的是从数据库中获取与 Java 应用程序中的输入匹配的特定条目。
public String getA(String tablename, String input){
String result = null;
try {
String query = ("select * from " +tablename+ " where name = "+input);
rs = stt.executeQuery(query);
while (rs.next()){
String rsh = rs.getString("Name");
result = rsh;
}
} catch (Exception acc_ex){
System.out.println("Acces excpetion in .getA: "+acc_ex);
return null;
} finally {
return result;
}
}
投掷:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '[input-here]' in 'where clause'
其他方法中的查询工作得非常好,以相同的方式构造它们。 有什么想法可以解决这个问题吗? 谢谢
【问题讨论】:
-
永远不要使用 concat 方法构建查询。
-
这里有很多问题。选择 * 很少是一个好的选择。您将表名作为字符串传递,然后执行它。这很容易受到 sql 注入的影响。您需要参数化您的查询。并且不确定您如何不知道表名。 >.
-
所以基本上它在没有连接到互联网的本地服务器上运行,所以没有滥用或 sql 注入的风险,即使我不在乎,因为它是一个简单的学校项目,所以没有人会受到伤害.
-
做一个 System.out.println(query) 并发布它
-
我得到的学校项目,但不要误以为sql注入只能从互联网发生。员工的风险很大。但正如你所说,这是一个学校项目。我建议把它做好仍然是一个好主意,特别是因为它仍然是新的。正如我在执教时告诉孩子们“你玩游戏的方式和练习方式一样”。如果您现在以简单的方式进行操作,那么这种情况很可能会继续下去。
标签: java mysql sql-server jdbc