SQL插入'

Bui*_*_20 1 java sql sqlite

我正在尝试将Stringsql插入我的数据库.该字符串可能包含" ' ".

当我现在尝试将其插入我的数据库时,我收到此错误:

[SQLITE_ERROR] SQL错误或丢失的数据库(近"字符后" ":语法错误)

功能调用:

  Main.execute("INSERT INTO Projektname(projektname) VALUES('" + txtFd_name.getText() + "');");
Run Code Online (Sandbox Code Playgroud)

Main.execute:

public static void execute(String query){
        class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:D:\\user\\eclipse-workspace\\S2LDB.db");
        Statement stat = conn.createStatement();
        stat.execute(query);
}
Run Code Online (Sandbox Code Playgroud)

我尝试过 org.apache.commons.text.StringEscapeUtils.escapeJava()

Tim*_*sen 9

你绝对应该在这里使用一个准备好的语句,它可以解决在插入时正确转义单引号的问题.像这样的东西:

String sql = "INSERT INTO Projektname(projektname) VALUES(?)";

try (Connection conn = this.connect();
    PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setString(1, txtFd_name.getText());
        pstmt.executeUpdate();
} catch (SQLException e) {
    System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

如果您必须继续使用当前的方法,那么您可以尝试手动将所有单引号加倍.所以这可能会使您当前的插入工作:

String name = txtFd_name.getText().replaceAll("'", "''");
String sql = "INSERT INTO Projektname(projektname) VALUES('" + name + "');");
Main.execute(sql);
Run Code Online (Sandbox Code Playgroud)

但是,我不建议这样做,因为这可能会适得其反,具体取决于你已经有多少单引号.使用准备好的声明是更好的方法.