【发布时间】:2020-10-12 19:26:30
【问题描述】:
EDIT :: 关闭结果集和查询语句解决了我的问题
我正在尝试通过 java 和 sqlite 构建一个聊天应用程序。当我尝试将新记录插入数据库中的表时,我面临数据库锁定错误消息。在这里我尝试在他们第一次注册时添加新用户:
public void addNewUser(String username,String password) {
StringBuilder sb=new StringBuilder("INSERT INTO loginInfo VALUES('");
sb.append(username);
sb.append("','");
sb.append(password);
sb.append("')");
try {
Statement statement = connection.createStatement();
statement.execute(sb.toString());
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
我首先检查 dosUserExist() 函数中是否已经存在相同的用户名:
private void handleSignup(String[] tokens) throws IOException, SQLException {
if(tokens.length==3){
String username=tokens[1];
String password=tokens[2];
String msg=null;
if(!dataSource.doesUserExists(username)) {
msg="signup successful\n";
this.login=username;
dataSource.addNewUser(username,password);
}
else msg="signup unsuccessful\n";
this.send(msg);
}
}
我收到以下错误消息:
org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
at org.sqlite.core.DB.newSQLException(DB.java:1010)
at org.sqlite.core.DB.newSQLException(DB.java:1022)
at org.sqlite.core.DB.execute(DB.java:861)
at org.sqlite.core.CoreStatement.exec(CoreStatement.java:80)
at org.sqlite.jdbc3.JDBC3Statement.execute(JDBC3Statement.java:53)
在执行所有其他查询后,我已关闭该语句。我该怎么做才能解决这个错误?
【问题讨论】:
-
我们需要更多代码来给出答案。另外,不要将原始字符串发送到您的数据库!!!!您的聊天应用程序将持续大约 5 分钟,您将成为 SQL 注入的受害者。说真的,解决这个问题。 owasp.org/www-community/attacks/SQL_Injection
-
是否使用准备好的语句足以避免注入?我添加了更多代码
-
请在您的问题中添加您创建连接的方式,并阅读stackoverflow.com/questions/13891006/…