gpt4 book ai didi

java - 在 Java 中使用 SQL 插入变量

转载 作者:行者123 更新时间:2023-11-30 06:19:36 24 4
gpt4 key购买 nike

我正在编写一个网页,它从表单中获取输入,通过 cgi 将其发送到 java 文件,通过 sql 将输入插入数据库,然后打印出数据库。不过,我在使用变量插入数据库时​​遇到了问题,我想知道是否有人能够帮助我。

String a1Insert = (String)form.get("a1");
String a2Insert = (String)form.get("a2");

这是我从表单获取变量的地方(只要相信它有效,还有更多后端,但我以前使用过它,我知道它可以正确获取变量)。

 String dbURL = "jdbc:derby://blah.blahblah.ca:CSE2014;user=blah;password=blarg";
Connection conn = DriverManager.getConnection(dbURL);
Statement stmt = conn.createStatement();
stmt.executeUpdate("set schema course");
stmt.executeUpdate("INSERT INTO MEMBER VALUES (a1Insert, a2Insert)");
stmt.close();

这是我尝试插入数据库的地方。它给我错误:

Column 'A1INSERT' is either not in any table in the FROM list or appears within a join specification and is outside the scope of the join specification or appears in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or ALTER TABLE statement then 'A1INSERT' is not a column in the target table.

如果有人有任何想法会很可爱 ^.^ 谢谢

最佳答案

java.sql.Statement不支持参数,切换到java.sql.PreparedStatement将允许您设置参数。将 SQL 中的参数名称替换为 ?,并在准备好的语句上调用 setter 方法为每个参数赋值。这看起来像

String sql = "INSERT INTO MEMBER VALUES (?, ?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, "a1");
stmt.setString(2, "a2");
stmt.executeUpdate();

这将执行 SQL

INSERT INTO MEMBER VALUES ('a1', 'a2')

请注意参数索引从 1 开始,而不是 0。另请注意,我不必在字符串上加引号,PreparedStatement 帮我做了。

或者,您可以继续使用 Statement 并在 Java 代码中创建 SQL 字符串,但这会引入 SQL 注入(inject)攻击的可能性。使用 PreparedStatement 设置参数可以避免该问题,因为它会为您处理报价;如果它在参数值中找到引号,它将对其进行转义,这样它就不会影响包含它的 SQL 语句。

Oracle 有一个 tutorial在这里。

关于java - 在 Java 中使用 SQL 插入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22922184/

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