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

Java 在Access 2007数据库中存储Swing中的JTextArea,java,sql,database,swing,jtextarea,Java,Sql,Database,Swing,Jtextarea,我目前正在用Java编写一个应用程序,它可以从Swing GUI组件执行输入/输出,并从本地Microsoft Access 2007数据库存储/检索这些数据。一切都进行得很顺利,除了当我试图用来自JTextArea的输入更新记录时,该区域将存储在文本或备忘录字段中。我可以很好地从JTextField接收输入,但是我得到了一个带有JTextArea的“SQLException:Syntax error in UPDATE statement” 以下是出现问题的代码: /* <in_some

我目前正在用Java编写一个应用程序,它可以从Swing GUI组件执行输入/输出,并从本地Microsoft Access 2007数据库存储/检索这些数据。一切都进行得很顺利,除了当我试图用来自JTextArea的输入更新记录时,该区域将存储在文本或备忘录字段中。我可以很好地从JTextField接收输入,但是我得到了一个带有JTextArea的“SQLException:Syntax error in UPDATE statement”

以下是出现问题的代码:

/* <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);
    }
}
/**/
myJTextArea.setText(someString);//组件可以具有精确的
myJTextField.setText(someString);//相同的字符串仍然存在问题
保存编辑(myTable,myColumn,myJTextField.getText(),myID);//这个很好用
保存编辑(myTable,myColumn,myJTextArea.getText(),myID);//这会引发异常
/*  */
/*更新方法*/
公共void saveEdit(字符串表、字符串列、字符串值、长id){
String query=“更新”+表+”;
查询+=“设置”+列+“=”+“值+”,“
query+=“UpdatedAt=Now()”;
查询+=”其中ID=“+ID;
试一试{
//conn是与数据库的工作连接
语句s=conn.createStatement();
//执行查询
s、 执行更新(查询);
//关闭打开的数据库句柄
s、 close();
}捕获(例外情况除外){
系统错误打印项次(ex);
}
}
两件事:

  • 我认为它不存在于数据库中字段的数据类型中;我尝试了Memo和Text两种类型,都使用JTextField,都不使用JTextArea

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


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

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


不管是什么情况,在将字符串保存到数据库中之前,都应该先保存字符串,否则会有丢失字符串的风险。这也将确保您的方法在这两个组件上都能正常工作(尽管由于上述原因,确切的字符串可能仍然不同)。

我同意mgibsonbr的观点,即它是不受SQL注入影响的。这是关于如何使用它们的另一个问题

然而,对于您眼前的问题,考虑到使用textfield的getText()检索的字符串已经工作,您是否尝试过存储使用getText()从JTextArea检索的字符串并检查它是什么?或者甚至尝试调用JTextArea的getText方法上的trim函数,这样就不会有空格等


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

myJTextArea.getText()的值是多少?