标签: sqlite

在C#中使用SQLite.NET获取最后一个插入ID

我有一个简单的问题,一个不那么简单的解决方案......我目前正在将一些数据插入到这样的数据库中:

                kompenzacijeDataSet.KompenzacijeRow kompenzacija = kompenzacijeDataSet.Kompenzacije.NewKompenzacijeRow();
                kompenzacija.Datum = DateTime.Now;
                kompenzacija.PodjetjeID = stranka.id;
                kompenzacija.Znesek = Decimal.Parse(tbZnesek.Text);

                kompenzacijeDataSet.Kompenzacije.Rows.Add(kompenzacija);

                kompenzacijeDataSetTableAdapters.KompenzacijeTableAdapter kompTA = new kompenzacijeDataSetTableAdapters.KompenzacijeTableAdapter();
                kompTA.Update(this.kompenzacijeDataSet.Kompenzacije);

                this.currentKompenzacijaID = LastInsertID(kompTA.Connection);
Run Code Online (Sandbox Code Playgroud)

最后一行非常重要.为什么我提供连接?那么有一个名为last_insert_rowid()的SQLite函数可以调用并获取最后一个插入ID.问题是它绑定到一个连接,.NET似乎重新打开并关闭每个数据集操作的连接.我以为从表适配器获取连接会改变一些事情.但事实并非如此.

有谁知道如何解决这个问题?也许从哪里获得持续的连接?或者更优雅的东西?

谢谢.

编辑:

这也是事务的问题,如果我想使用事务,我需要相同的连接,所以这也是一个问题......

c# sql sqlite

22
推荐指数
4
解决办法
4万
查看次数

从SQLite数据库表中删除所有表行

我想删除我从SQLite数据库表中输入的所有行.表名是tbltask.我试图删除表并从表中删除*,但那些给了我运行时错误.我想在Button OnClickListner事件中触发此事件.

以下代码是我尝试的:

String delete = "DELETE FROM "+DATABASE_TABLE;
db.rawQuery(delete, null);
db.delete(DATABASE_TABLE, null, null);
Run Code Online (Sandbox Code Playgroud)

logcat的:

11-15 17:45:04.660: DEBUG/AndroidRuntime(300): Shutting down VM
11-15 17:45:04.660: WARN/dalvikvm(300): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): FATAL EXCEPTION: main 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): java.lang.NullPointerException 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at database.com.android.DatabaseAccess.drop(DatabaseAccess.java:258) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at com.android.ExtraActivity$3$1.onClick(ExtraActivity.java:61) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at android.os.Looper.loop(Looper.java:123) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-15 17:45:04.710: ERROR/AndroidRuntime(300): at java.lang.reflect.Method.invokeNative(Native Method) 
11-15 …
Run Code Online (Sandbox Code Playgroud)

sqlite android sql-delete

22
推荐指数
1
解决办法
6万
查看次数

为什么选择SELECT 0,...而不是SELECT

假设我有一个包含表的SQLite数据库:

sqlite> create table person (id integer, firstname varchar, lastname varchar);
Run Code Online (Sandbox Code Playgroud)

现在我想得到表中的每个条目.

sqlite> select t0.id, t0.firstname, t0.lastname from person t0;
Run Code Online (Sandbox Code Playgroud)

这很好用,这就是我要用的.但是,我使用了生成SQL的Apple(Core Data)框架.此框架生成略有不同的SQL查询:

sqlite> select 0, t0.id, t0.firstname, t0.lastname from person t0;
Run Code Online (Sandbox Code Playgroud)

此框架生成的每个SQL查询都以"select 0"开头.这是为什么?

我尝试使用explain命令来查看最新情况,但这是不确定的 - 至少对我而言.

sqlite> explain select t0.id, t0.firstname, t0.lastname from person t0;
addr        opcode      p1          p2          p3          p4          p5          comment   
----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------
0           Trace       0           0           0                       00          NULL      
1           Goto        0           11          0                       00          NULL      
2           OpenRead    0           2           0 …
Run Code Online (Sandbox Code Playgroud)

sql sqlite core-data

22
推荐指数
2
解决办法
2万
查看次数

使用Javascript直接在浏览器中读取Sqlite3的最佳方法是什么?

对于我们的一个Insights平台,我们计划在后台生成摘要SQLite3数据库,并将其作为图表在浏览器上呈现.目前,我们打算服务于服务于数据需求的服务器端端点.

我们希望通过完全消除服务器端端点来进一步优化这一点.我们很好(从安全角度来看)直接在S3上公开SQLite3并读取javascript模块并生成图表.

SQLite3文件预计相当小 - 可能是4-6列,也许是10-500行数据,并且所有这些文件只包含一个表.测试运行表明文件大小小于15KB.我们不打算在浏览器上编写或操作SQLite3.我们不需要将它作为WebSQL或IndexedDB表单在浏览器上缓存,但如果需要,我们可以使用它们.

从我的网络搜索中,我们无法找到可以读取SQLite3文件并查询结果的Javascript库.如果您知道任何可以执行此操作的JavaScript库,请告诉我们.

另一方面,如果你认为我们不应该出于任何原因这样做,那么请把它们作为评论/答案抛出,因为这是我们第一次尝试的东西,似乎有点不合适-box,欢迎反馈!

javascript sqlite

22
推荐指数
2
解决办法
2万
查看次数

跨多个服务器复制sqlite数据库的方法

我正在开发一个分布式的应用程序,我有一个必须在分布式服务器之间共享的SQLite数据库.如果我在serverA中,并且更改sqlite行,则此更改必须立即在其他服务器中,但如果服务器处于脱机状态,然后它在线,则必须更新所有信息等于其他服务器.

我正在尝试使用小型SQLite数据库开发HA服务.

我正在考虑像MongoDB或ReThinkDB这样的东西,因为复制工作正常,我有独立的服务器在线数据.

有一个库或其他SQL方法在服务器之间共享数据?

提前致谢.

sqlite replication high-availability distributed-computing rethinkdb

22
推荐指数
3
解决办法
3万
查看次数

在VS 2013中缺少SQLite数据提供程序

我正在使用VS 2013来开发Win 8.1应用程序.我选择处理SQLite,但是当我尝试添加新连接来管理我的数据库时,我找不到数据提供程序.

任何帮助表示赞赏

sqlite dataprovider visual-studio

22
推荐指数
2
解决办法
3万
查看次数

如何删除表内连接与Sqlite中的其他表?

我的查询:

DELETE a FROM TR_ContactResultRecord  a
INNER JOIN TR_Case  b on (a.FireStationCode=b.FireStationCode and a.CaseNo=b.CaseCode )
WHERE b.Update_DateTime <=20140628134416
Run Code Online (Sandbox Code Playgroud)

它显示错误: [Err] 1 - near "a": syntax error

如何删除表内连接与Sqlite中的其他表?

sqlite

22
推荐指数
2
解决办法
1万
查看次数

当py.test静默挂起时该怎么办?

在使用py.test时,我有一些测试可以正常运行SQLite但在我切换到Postgresql时静默挂起.我该如何调试这样的东西?是否有"详细"模式我可以运行我的测试,或设置断点?更一般地说,当pytest无声地停止时,标准的攻击计划是什么?我已经尝试使用pytest-timeout,并使用$ py.test --timeout = 300运行测试,但测试仍然挂起,屏幕上没有任何活动

sqlite postgresql timeout hang pytest

22
推荐指数
4
解决办法
9425
查看次数

与SQLite的DLL地狱

我们的一些用户遇到了在运行时加载的sqlite.interop.dll版本的问题,这是一个真正令人头疼的问题.

背景:为AnyCPU构建的WPF应用程序,使用SQlite .NET和sqlite.interop.dll版本1.0.89进行部署.我们部署x86和x64 dll,并使用SQLite附带的延迟加载.直到最近,当我们开始从通常最近购买新戴尔机器的用户那里获得一些支持问题时,情况一直很好.似乎有一个旧版本的sqlite.interop.dll(v.1.0.80),不知何故,它的加载优先于我们发布的版本.我们得到的错误是缺少入口点'sqlite3_changes_interop'.

我们尝试过的:

  1. 将安装程序更改为在安装期间将相应的dll(x86/64)复制到与可执行文件相同的目录(即没有单独的x86/x64文件夹).这意味着我们不再使用延迟加载,因为可执行目录中提供了正确的dll(尽管我们没有在sqlite.net中明确禁用延迟加载机制).这不能解决问题..

  2. 应用程序首次加载时显式加载sqlite.interop.dll.同样,这似乎没有解决问题.

似乎dll加载位置的排序近年来有所改变,我可能没有很好的处理它.我总是假设可执行文件目录中的一个dll会得到第一个首选项,并且一个已经显式加载的dll会阻止在应用程序生命周期内重新加载相同的dll,所以对于我的生活,我无法理解这里发生了什么.

任何人都可以了解这里可能发生的事情吗?问题进一步复杂化的事实是我无法在本地重现问题 - 例如,在我的系统路径中放入错误的dll版本等.这让我觉得GAC可能会发挥作用?

真的坚持这个,所以任何帮助都会很棒.

另外 - 作为最后的手段 - 我可能会考虑恢复到相同的1.0.80版本,这样我们就不会遇到这个问题.有谁知道我们可以在哪里找到旧版本的sqlite.net和sqlite.interop.dll?

编辑 - 一些其他信息:

冲突是由与Dell Backup and Recovery一起安装的sqlite.interop.dll版本1.0.80的副本引起的.这安装在所有新戴尔计算机上,在这种计算机上安装我们软件的用户都遇到此问题.此Dell软件还使用System.Data.SQLite.dll.

正确版本的sqlite.interop.dll与我们的可执行文件位于同一目录中,我对dll加载的所有了解都表明应该优先加载它.

虽然我们还没有能够在本地重现该问题,但看起来interop.dll的错误版本不在路径上.此外,Dell备份实用程序在启动时自动运行.有没有人知道任何可能的机制,这可能会挂钩到DLL加载请求和提供错误的文件?

目前的思路是我们可以构建自己的System.Data.SQLite.dll并将interop加载代码更改为特定命名的版本(例如sqlite.interop.1.0.89.dll).不是一个很好的解决方案,但..

.net c# sqlite dll

22
推荐指数
1
解决办法
2093
查看次数

数据库未在OnePlus Two中正确复制

我正在创建一个Android应用程序,我正在使用sqlite数据库.因为我已经在项目的资产文件夹中放置了一个sqlite文件,我在使用下面的代码首次执行应用程序时将此文件复制到手机.

 private void copyDataBase() throws IOException {
    new File(DB_PATH).mkdirs();
    InputStream myInput = appContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream myOutput = new FileOutputStream(outFileName);
    byte[] buffer = new byte[1024];
    int length;

    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    myOutput.flush();
    myOutput.close();
    myInput.close();
}
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误.

 09-21 18:03:56.841: E/SQLiteLog(7850): (1) no such table: tbl_player
Run Code Online (Sandbox Code Playgroud)

但是这个表存在于资产文件中.所以我使用这种方法从手机中获取数据库文件.

public static void exportDB(String databaseName, Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = …
Run Code Online (Sandbox Code Playgroud)

sqlite android assets oneplustwo

22
推荐指数
2
解决办法
1207
查看次数