我正在尝试将String
sql插入我的数据库.该字符串可能包含" ' ".
当我现在尝试将其插入我的数据库时,我收到此错误:
[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()
你绝对应该在这里使用一个准备好的语句,它可以解决在插入时正确转义单引号的问题.像这样的东西:
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)
但是,我不建议这样做,因为这可能会适得其反,具体取决于你已经有多少单引号.使用准备好的声明是更好的方法.
归档时间: |
|
查看次数: |
93 次 |
最近记录: |