Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Struts2:将SQL查询保存到数据库中_Java_Sql - Fatal编程技术网

Java Struts2:将SQL查询保存到数据库中

Java Struts2:将SQL查询保存到数据库中,java,sql,Java,Sql,在my Struts2 Java web应用程序中,允许用户查询数据库。例如,用户需要获取名为“Charles”的员工详细信息。然后,他/她可以选择报告列和条件(firstname='Charles') 一旦用户给出上述输入,就需要将相关的SQL查询保存到数据库中 e.g. SQL -> SELECT * FROM employee WHERE firstname='Charles' 以下是我在动作课上尝试的内容 try { connection = DriverMana

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

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

e.g. SQL -> SELECT * FROM employee WHERE firstname='Charles'
以下是我在动作课上尝试的内容

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作为数据库

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

有任何解决此问题的建议吗?

切勿使用用户提供值的字符串串联来构建SQL语句。
绝不使用任何非整数值的字符串串联来构建SQL语句。
您将面临攻击和/或SQL语句错误。
黑客会因为你允许他们窃取你的所有数据而爱上你,而邪恶的黑客会破坏或删除你的所有数据,同时在他们去银行的路上疯狂地嘲笑你

使用
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();
}

如果你现在开始,考虑一些10年更新的事情,比如JPA 2。