在Access 2007数据库中存储Swing中的JTextArea

时间:2012-06-28 03:39:26

标签: java sql database swing jtextarea

我目前正在用Java编写一个应用程序,该应用程序从/向Swing GUI组件预先输入/输出,并从本地Microsoft Access 2007数据库存储/检索此数据。一切顺利,除非我尝试使用来自JTextArea的输入更新记录,该输入将存储在Text或Memo字段中。我可以从JTextField中获取输入,但是我在UPDATE语句中得到“SQLException:语法错误”。使用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语句中的语法错误”。所以我知道我的问题与数据库表的布局无关;请求的表和列存在且可以访问。

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

2 个答案:

答案 0 :(得分:1)

我不知道someString是什么,但我认为它包含换行符等等,因此当设置为JTextField时,当设置为{{{}时,它将被“展平” 1}}它不会。因此,在获取时,您将拥有两个不同的字符串,一个可以正常工作,另一个则会导致语法错误。

无论是什么情况,您都应该escape将字符串保存到数据库中,否则您将面临SQL injection的风险。这也将确保您的方法适用于两个组件(尽管由于上述原因,确切的字符串可能仍然不同)。

答案 1 :(得分:1)

我同意mgibsonbr,它对SQL Injection很有用。这是关于如何使用它们的另一个tutorial

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

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