gpt4 book ai didi

java - Struts2 : Save SQL query in the database

转载 作者:行者123 更新时间:2023-12-02 04:12:49 24 4
gpt4 key购买 nike

在我的 Struts2 Java Web 应用程序中,允许用户查询数据库。例如,用户需要获取名字等于“Charles”的员工详细信息。然后她/他可以选择报告列和条件 (firstname='Charles')。

一旦用户给出上述输入,就需要将相关的 SQL 查询保存到数据库中。

e.g. SQL -> SELECT * FROM employee WHERE firstname='Charles'

这是我在 Action 课中尝试的内容。

try {
connection = DriverManager.getConnection(
SelectAction.getDatabase(), SelectAction.getUser(),
SelectAction.getPassword());

if (connection != null) {

System.out.println("Database connection established!");

stmt = connection.createStatement();

String sql = "INSERT INTO reports (report_id, sql) values ('" + reportId + "', '" + sqlQ + "');";
System.out.println("sql--->" + sql);
// Executing query
stmt.executeQuery(sql);

return SUCCESS;

} else {
System.out.println("----Failed to make connection!");
return ERROR;
}
} catch (SQLException e) {
System.out.println("Connection Failed!!");
e.printStackTrace();
return SUCCESS;
}

这是我的插入查询。

INSERT INTO reports (report_id, sql) values ('mynewreport', 'SELECT * FROM employee WHERE firstname='Charles'');

我的控制台中出现以下错误。

ERROR: syntax error at or near "Charles"

我认为这里我使用的是字符串,因此问题出在引号(')上。我使用 postgreSQL 作为数据库。

有什么建议可以解决这个问题吗?

最佳答案

切勿使用用户提供的值的字符串串联来构建 SQL 语句。
切勿使用任何非整数值的字符串串联来构建 SQL 语句。
您将使自己对 SQL Injection 保持开放的态度 攻击和/或 SQL 语句错误。
黑客会喜欢你允许他们窃取你的所有数据,而邪恶的人会破坏或删除你的所有数据,同时在去银行的路上疯狂地 mock 你。

使用PreparedStatement和参数标记。

String sql = "INSERT INTO reports (report_id, sql) values (?, ?)";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, reportId);
stmt.setString(2, sqlQ);
stmt.executeUpdate();
}

关于java - Struts2 : Save SQL query in the database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com