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

标签 java sql derby

我正在编写一个网页,它从表单中获取输入,通过 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/

相关文章:

在客户端和服务器中注意到 java.net.SocketException

java - 理解回溯(迷宫算法)

sql - 如何使用带参数的插入查询?

MySQL\join 2 个表并在一列中显示 2 行的结果

java - 从 Derby 获取 PreparedStatement 查询

java - 使用 Intent 打开 Waze GPS 导航或谷歌地图

java - JUnit AWSCredentials NoClassDefFoundError with LocalStackContainer

sql - MS SQL Server : Operate current select values in other selected columns

java - 错误 XJ001 : Java exception: ': java.lang.StackOverflowError'

java - 如何在 netbeans 的 jtable 中显示查询结果