我在Unity中创建了一个sqlite数据库...并尝试连接此函数。
void AddScores(string conn)
{
IDbConnection dbconn;
dbconn = (IDbConnection)new SqliteConnection(conn);
dbconn.Open();
using(IDbCommand dbCmd = dbconn.CreateCommand())
{
// string sqlQuery = "SELECT Id FROM PickAndPlace ";
string sqlQuery= "INSERT INTO PickAndPlace (Id) VALUES (324)";
dbCmd.CommandText = sqlQuery;
using(IDataReader reader = dbCmd.ExecuteReader())
{
while (reader.Read())
{
print(reader.GetInt32(0));
}
dbconn.Close();
reader.Close();
dbCmd.Dispose();
}
}
}
如果我尝试插入值,则以下代码无效...并且显示此错误“数据库文件已锁定: 数据库已锁定“但如果我尝试选择,这样可以正常工作。那么我的错误在哪里?
答案 0 :(得分:0)
Sqlite通常接受单个"连接"。一旦一个应用程序连接到数据库,这意味着只是获取一个写锁定,没有其他应用程序可以访问它进行写入,但可以访问它进行读取。这就是你所看到的行为。有关其工作原理,各种锁定状态等的详细信息,请参阅File Locking And Concurrency Control in SQLite Version 3。
但原则上,您只能打开一个连接。所以不知怎的,你有不止一个。您忘记关闭某些连接,或者多个线程或应用程序正在尝试修改它。或者可能发生了一些错误并使锁定文件处于错误状态。