我正在寻找一个完整的教程,它不仅告诉我如何执行一个查询,而且还包括如何设置整个事情,包括设置库,创build数据库等等。 我在哪里可以find它?
我想在我的应用程序中创build一个SQLite数据库,该数据库包含三个表格,我将在表格中添加数据并稍后使用它们。 但我喜欢保持数据库,就好像当第一次安装应用程序时,它会检查数据库是否存在,如果存在,它会更新它,否则创build一个新的数据库。 进一步,我正在做一个数据库类,以方便我的应用程序,所以我不会创build一个活动,我的数据库创build。 如果有可能的build议,请与我分享
我应该在哪里调用close()代码? LogCat返回这个错误: close()从来没有显式调用数据库android.database.sqlite.DatabaseObjectNotClosedException:应用程序没有closures在这里打开的游标或数据库对象 错误是这样的: > 12-16 17:24:50.886: ERROR/Database(10982): close() was never explicitly called on database '/data/data/com.psyhclo/databases/calls.db' 12-16 17:24:50.886: ERROR/Database(10982): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 12-16 17:24:50.886: ERROR/Database(10982): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1827) 12-16 17:24:50.886: ERROR/Database(10982): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820) 12-16 17:24:50.886: ERROR/Database(10982): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854) 12-16 17:24:50.886: ERROR/Database(10982): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847) 12-16 17:24:50.886: […]
我有一个表的消息与列ID(主键,自动增量)和内容(文本)。 我有一个用户列用户名(主键,文本)和哈希。 消息由一个发件人(用户)发送给多个收件人(用户),而收件人(用户)可以有多个消息。 我创build了一个Message_Recipients表,它有两列:MessageID(指的是Messages表和Recipient的ID列(指Users表中的username列)。这个表代表了收件人和消息之间的多对多关系。 所以,我有这个问题。 新消息的ID将在存储在数据库中之后创build。 但是我怎样才能持有我刚添加的MessageRow的引用来检索这个新的MessageID呢? 我总是可以在数据库中search当前添加的最后一行,但是可能会在multithreading环境中返回不同的行? 编辑:据我所知,SQLite你可以使用SELECT last_insert_rowid()。 但是,我怎样从ADO.Net中调用这个语句呢? 我的持久性代码(消息和消息接收者是DataTables): public void Persist(Message message) { pm_databaseDataSet.MessagesRow messagerow; messagerow=messages.AddMessagesRow(message.Sender, message.TimeSent.ToFileTime(), message.Content, message.TimeCreated.ToFileTime()); UpdateMessages(); var x = messagerow;//I hoped the messagerow would hold a //reference to the new row in the Messages table, but it does not. foreach (var recipient in message.Recipients) { var row […]
如何改变sqlite中的列? 这是在Postgresql ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL; 我相信在sqlite中没有ALTER COLUMN,只有ALTER TABLE被支持。 任何想法? 谢谢!
我想以编程方式从Android file system删除数据库文件? 我可以有一个shell脚本启动adb轮stream在Android空间运行一个shell脚本来删除数据库吗? 我可以从一个JUnittesting用例(用system()调用)完成这个工作吗? 如何在Android中删除整个数据库? 我需要使整个事情消失,所以我可以testing数据库的创build。 我可以放桌子,但这还不够。 这是在模拟器中,而不是在电话上。
我正在用SQLite开发一个应用程序作为数据库,并且在理解如何在multithreading中使用它时遇到了一些麻烦(不幸的是,其他堆栈溢出问题都没有帮助我)。 我的用例:数据库有一个表,我们称它为“A”,它具有不同的行组(基于它们的一列)。 我有从表A读取内容的应用程序的“主线程”。此外,我偶尔决定更新某一组行。 要做到这一点,我想产卵一个新的线程,删除组的所有行,并重新插入它们(这是在我的应用程序的上下文中执行它的唯一方法)。 这可能发生在同一时间不同的群体,所以我可能有2+线程试图更新数据库。 我从每个线程使用不同的事务,IE在每个线程的更新周期开始,我有一个开始。 实际上,每个线程实际上所做的就是调用“BEGIN”,从数据库中删除所有需要“更新”的行,并用新值插入它们(这是在我的上下文中必须完成的方式应用)。 现在,我正试图了解如何执行此操作。 我试过阅读(堆栈溢出,SQLite网站上的其他答案),但我还没有find所有的答案。 以下是我想知道的一些事情: 我是否需要调用“open”并从每个线程创build一个新的sqlite结构? 我是否需要为所有这些添加任何特殊的代码,或者它足以产生不同的线程,更新行,这很好(因为我使用不同的交易)? 我看到了一些关于不同锁types的事情,以及我可能会通过调用某些API来获得“SQLite繁忙”的事实,但老实说,当我需要考虑所有这些时,我没有看到任何完整的解释。 我需要吗? 如果有人能够回答问题/指出我的方向是一个好的资源,我会非常感激。 更新1:从目前为止我读过的所有东西,似乎不能有两个线程谁将要写入数据库文件。 请参阅: http : //www.sqlite.org/lockingv3.html 。 在第3.0节中:保留锁意味着进程正在计划在将来的某个时刻写入数据库文件,但是它目前只是从文件中读取数据。 尽pipe多个SHARED锁可以与一个RESERVED锁共存,但一次只能有一个RESERVED锁。 这是否意味着我可能只会产生一个线程来每次更新一组行? 也就是说,有一些轮询线程决定我需要更新一些行,然后创build一个新的线程来做到这一点,但一次只能有一个? 因为它看起来像我创build的任何其他线程将只是得到SQLITE_BUSY,直到第一个线程完成,无论如何。 我的理解是否正确? 顺便说一句,感谢迄今为止的答案,他们已经帮了很多。
我有这个查询,在MySQL中工作正常 SELECT ((ACOS(SIN(12.345 * PI() / 180) * SIN(lat * PI() / 180) + COS(12.345 * PI() / 180) * COS(lat * PI() / 180) * COS((67.89 – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344) AS distance, poi.* FROM poi WHERE lang='eng' HAVING distance<='30' 距离以公里为单位,input为lat=12.345 , lon=67.89 […]
我有一个巨大的表 – 3600万行 – 在SQLite3。 在这个非常大的表中,有两列 散列 – 文本 d – 真实 但是,一些行是重复的。 也就是说,哈希和d都具有相同的值。 另外,如果两个哈希值相同,则d的值也是相同的,但是两个相同的ds并不意味着两个相同的哈希值 无论如何,我想删除重复的行。 我没有主键列,因为我是个白痴。 什么是最快的方法来做到这一点? 编辑: delete from dist where rowid not in (select max(rowid) from dist group by hash); 似乎做的伎俩。
本周我一直在学习关于ContentProvider的所有内容,并使用SQLiteOpenHelper类来pipe理提供者内部数据库的创build和升级。 具体来说,我一直在通过sdk的samples目录中的NotePad例子。 现在,我可以看到SQLiteOpenHelper有一个close()方法。 我知道,将闲置的数据库打开是不好的做法,可能导致内存泄漏,而不是(除非这个讨论是朝着正确的方向进行的)。 如果我在一个Activity中使用这个类,那么我只需要在onDestroy()方法中调用close()方法,但据我所知,ContentProvider没有活动所用的生命周期。 NotePad的代码似乎永远不会调用close(),所以我想假设它由SQLiteOpenHelper或其他一些难题处理,但我真的很想知道。 我不太相信样例代码,或者… 问题摘要:我们应该什么时候closures供应商的数据库?