正如我从SQLite FAQ中读到的那样,它支持多个进程读取(SELECT),并且在任何时刻只支持一个进程写入(INSERT、UPDATE、DELETE)数据库:
如果已经在同一个数据库上执行了另一个写入SQLiteCommand的操作,那么这个过程是否会自动工作,并且写入SQLiteCommand只需等待?
又或者它会抛出异常?什么样的?
对不起,我没有找到关于这个机制的信息:)
我发现有帖子说异常将用特定的错误代码引发
那个说法正确吗?
我自己调查过:
我创建了一个示例SQLite数据库C:\123.db
,其中有一个表categories
,该表包含两个字段:id
(uniqueidentifier)和name
(nvarchar)。
然后,我编写了一些多线程代码来模拟对数据库的多次写访问(如果使用此代码,请不要忘记向项目添加system.data.sqlite
引用):
using System;
using System.Data.SQLite;
using System.Threading.Tasks;
namespace SQLiteTest
{
class Program
{
static void Main(string[] args)
{
var tasks = new Task[100];
for (int i = 0; i < 100; i++)
{
tasks[i] = new Task(new Program().WriteToDB);
tasks[i].Start();
}
foreach (var task in tasks)
task.Wait();
}
public void WriteToDB()
{
try
{
using (SQLiteConnection myconnection = new SQLiteConnection(@"Data Source=c:\123.db"))
{
myconnection.Open();
using (SQLiteTransaction mytransaction = myconnection.BeginTransaction())
{
using (SQLiteCommand mycommand = new SQLiteCommand(myconnection))
{
Guid id = Guid.NewGuid();
mycommand.CommandText = "INSERT INTO Categories(ID, Name) VALUES ('" + id.ToString() + "', '111')";
mycommand.ExecuteNonQuery();
mycommand.CommandText = "UPDATE Categories SET Name='222' WHERE ID='" + id.ToString() + "'";
mycommand.ExecuteNonQuery();
mycommand.CommandText = "DELETE FROM Categories WHERE ID='" + id.ToString() + "'";
mycommand.ExecuteNonQuery();
}
mytransaction.Commit();
}
}
}
catch (SQLiteException ex)
{
if (ex.ReturnCode == SQLiteErrorCode.Busy)
Console.WriteLine("Database is locked by another process!");
}
}
}
}
请注意,不需要为SQLiteException
检索整数ErrorCode-您可以使用一个特殊的枚举returncode
字段。这里描述了所有代码。
希望这些信息能对某人有所帮助。
问题内容: 我想通过可手动运行以更新数据的PHP脚本将表格从CSV文件导入SQLite DB。 以下是我要实现的目标的列表: 将旧表(称为“ produkte”)重命名为product-currentdate(或删除表) 然后从CSV文件导入文件(分隔并使用ISO 8859-1字符集/ CSV文件的第一行包含表标题) 将日期保存在表“产品”中 我发现了一个由于某种原因无法运行的脚本: 我希望有人知
问题内容: 我是PHP和SQL领域的一名新开发人员。到目前为止,我只完成了Objective- C编程。但是,我的一个项目要求我拥有一个在线数据库,我需要从我的应用程序访问该数据库。我打算使用该框架来远程访问数据库,如下所示: 但这是行不通的,因为我联系了我的托管服务提供商,并且他们已经对其进行了设置,因此我无法从外部主机访问我的数据库(出于安全性考虑)。因此,我将不得不寻找替代方案。我唯一想到的
问题内容: 我正在寻找一种使用Swift代码在我的应用程序中访问SQLite数据库的方法。 我知道我可以在Objective C中使用SQLite包装器并使用桥接头,但是我希望能够完全在Swift中完成此项目。如果可以的话,有没有办法做到这一点,有人可以将我指向一个引用,该引用显示了如何提交查询,检索行等。 问题答案: 虽然您可能应该使用许多SQLite包装器之一,但如果您想知道如何自己调用SQL
本文向大家介绍C#中嵌入SQLite数据库的简单方法,包括了C#中嵌入SQLite数据库的简单方法的使用技巧和注意事项,需要的朋友参考一下 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要
我正在尝试从承载在MLab上的MongoDB访问该文档,但在访问带有_id的文档时出现以下错误。以下是供您参考的代码 但在尝试访问URL时出现以下错误:http://localhost:3000/api/v1/todo/5870f7f1f36d2872530d26f1 TypeError:hex不是函数处的函数。从(本机)at函数。from(本机)位于C:\Kamlesh\Angular2\mea
WeX5.Baas服务详解 视频地址:http://pan.baidu.com/s/1jHB5XMA baas.net 版:Bass for .NET 1 概述 本案例实现了对takeout_order(外卖订单表)表的分页查询、关键字检索和修改保存的能力,数据库表结构参见WeX5自带的mysql数据库。 案例代码分为服务端和客户端两部分: 服务端包含一个servlet(com.