【问题标题】:Storing JTextArea from Swing in an Access 2007 database将 Swing 中的 JTextArea 存储在 Access 2007 数据库中
【发布时间】:2012-06-29 13:37:05
【问题描述】:

我目前正在用 Java 编写一个应用程序,该应用程序执行 Swing GUI 组件的输入/输出,并从本地 Microsoft Access 2007 数据库存储/检索这些数据。一切都很顺利,除非我尝试使用来自要存储在文本或备注字段中的 JTextArea 的输入来更新记录。我可以很好地接收来自 JTextField 的输入,但我得到一个“SQLException:UPDATE 语句中的语法错误”。使用 JTextArea。

这是有问题的代码:

/* <in_some_method> */
myJTextArea.setText(someString); // the components can have the exact
myJTextField.setText(someString); // same string and still have problems

saveEdit(myTable, myColumn, myJTextField.getText(), myID); // this works fine
saveEdit(myTable, myColumn, myJTextArea.getText(), myID); // this throws an exception
/* </in_some_method> */

/* the update method */
public void saveEdit(String table, String column, String value, long id) {
    String query = "UPDATE " + table + " ";
    query += "SET " + column + " = '" + value + "', "
    query +=  "UpdatedAt = Now() ";
    query += "WHERE ID = " + id;

    try {
        // conn is a working connection to the database
        Statement s = conn.createStatement();

        // execute the query
        s.executeUpdate(query);

        // close open database handle
        s.close();

    } catch (Exception ex) {
        System.err.println(ex);
    }
}

几件事:

  • 我认为与数据库中字段的数据类型不存在;我已经尝试过 Memo 和 Text 的类型,两者都可以使用 JTextField,但都不能使用 JTextArea。

  • 如前所述,异常是“SQLException:UPDATE 语句中的语法错误”。所以我知道我的问题与数据库表的布局无关;请求的表和列存在并且可以访问。

有人有什么想法吗?任何帮助将不胜感激。

【问题讨论】:

  • myJTextArea.getText() 的值是多少?

标签: java sql database swing jtextarea


【解决方案1】:

我同意 mgibsonbr 的观点,即 SQL 注入很容易受到攻击。这是另一个关于如何使用它们的tutorial

但是对于您的直接问题,鉴于使用文本字段的 getText() 检索的字符串已经有效,您是否尝试过存储使用 getText() 从 JTextArea 检索的字符串并检查它是什么?或者甚至尝试在 JTextArea 的 getText 方法上调用 trim 函数,这样就没有空格等。

也许没有为 JTextArea 正确设置 someString?

【讨论】:

    【解决方案2】:

    我不知道someString 是什么,但我敢打赌它包含换行符之类的,所以当设置为JTextField 时,它会“变平”,而设置为JTextArea 时它不会.因此,在获取时,您将有两个不同的字符串,一个可以正常工作,另一个会导致语法错误。

    无论是哪种情况,您都应该在将字符串保存到数据库之前escape,否则您将面临SQL injection 的风险。这也将确保您的方法对两个组件都能正常工作(尽管由于上述原因,确切的字符串可能仍然不同)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2012-11-07
      相关资源
      最近更新 更多