当在Android应用程序中执行对SQLite数据库的查询时,什么会被认为是最佳实践? 从AsyncTask的doInBackground运行插入,删除和select查询是否安全? 或者我应该使用UI线程? 我想数据库查询可以是“沉重的”,不应该使用UI线程,因为它可以locking应用程序 – 导致应用程序不响应 (ANR)。 如果我有几个AsyncTasks,他们应该共享一个连接还是应该打开一个连接? 有没有这些情况下的最佳做法?
在MySQL中,你可以像这样插入多行: INSERT INTO 'tablename' ('column1', 'column2') VALUES ('data1', 'data2'), ('data1', 'data2'), ('data1', 'data2'), ('data1', 'data2'); 然而,当我尝试做这样的事情时,我得到一个错误。 是否有可能在SQLite数据库中一次插入多行? 这是什么语法?
优化SQLite是棘手的。 C应用程序的批量插入性能可以从每秒85次插入到每秒超过96,000次插入! 背景:我们正在使用SQLite作为桌面应用程序的一部分。 我们有大量的configuration数据存储在XML文件中,这些数据被parsing并加载到SQLite数据库中,以便在初始化应用程序时进一步处理。 SQLite对于这种情况非常理想,因为它速度很快,不需要专门的configuration,数据库作为单个文件存储在磁盘上。 理由: 最初,我对我所看到的performance感到失望。 事实certificate,SQLite的性能可能会有很大的不同(对于批量插入和select),这取决于数据库的configuration方式以及如何使用API。 找出所有的select和技巧并不是一件简单的事情,所以我认为创build这个社区维基条目与Stack Overflow读者分享结果是很谨慎的,以便为其他人省去相同调查的麻烦。 实验:我不是简单地谈论一般意义上的性能提示(即“使用事务!” ),而是最好编写一些C代码并实际测量各种选项的影响。 我们将从一些简单的数据开始: 多伦多市全部交通时间表的28 MB TAB分隔文本文件(约865,000条logging) 我的testing机器是运行Windows XP的3.60 GHz P4。 该代码与Visual C ++ 2005一起编译为“发布”,具有“完全优化”(/ Ox)和优先快速代码(/ Ot)。 我正在使用SQLite“Amalgamation”,直接编译到我的testing应用程序。 SQLite版本我碰巧有一点老(3.6.7),但我怀疑这些结果将是相当于最新版本(请留下评论,如果你不这么认为)。 我们来写一些代码! 代码:一个简单的C程序,逐行读取文本文件,将string拆分为值,然后将数据插入到SQLite数据库中。 在这个“基准”版本的代码中,数据库被创build,但是我们不会实际插入数据: /************************************************************* Baseline code to experiment with SQLite performance. Input data is a 28 MB TAB-delimited text file of the complete Toronto Transit System schedule/route […]
我已经创build了一个SQLite数据库。 我想用我的Android项目使用这个数据库文件。 我想将这个数据库与我的应用程序绑定。 应用程序如何访问这个数据库并将其用作其数据库,而不是创build一个新的数据库?
正如标题所暗示的,我想select用GROUP BY分组的每一组行的第一行。 具体来说,如果我有一个purchases表,看起来像这样: SELECT * FROM purchases; id | 客户| 总 — + ———- + —— 1 | 乔| 五 2 | 莎莉| 3 3 | 乔| 2 4 | 莎莉| 1 我想查询每个customer所做的最大购买( total )的id 。 像这样的东西: SELECT FIRST(id), customer, FIRST(total) FROM purchases GROUP BY customer ORDER BY total DESC; FIRST(id)| 客户| FIRST(总) ———- + […]
我在我的SQLiteOpenHelper onCreate()创build我的表,但收到 SQLiteException: no such table 要么 SQLiteException: no such column 错误。 为什么? 注意: (这是每周几十个类似问题的汇总总结,试图在这里提供一个“规范的”社区wiki问题/答案,以便所有这些问题都可以被引导到一个很好的参考)。
我正在尝试在Android中执行以下SQL查询: String names = "'name1', 'name2"; // in the code this is dynamically generated String query = "SELECT * FROM table WHERE name IN (?)"; Cursor cursor = mDb.rawQuery(query, new String[]{names}); 但是,Android不会用正确的值替换问号。 我可以做到以下,但是,这不防止SQL注入: String query = "SELECT * FROM table WHERE name IN (" + names + ")"; Cursor cursor = mDb.rawQuery(query, null); 我怎样才能解决这个问题,并能够使用IN子句?
我已经非常熟悉关系数据库,过去曾经使用SQLite (和其他数据库)。 但是, Core Data有一定的吸引力,因此我正在考虑花一些时间来学习它,以便在下一个应用程序中使用。 通过SQLite使用Core Data有什么好处,反之亦然? 每个的优点/缺点是什么? 我发现当苹果公司没有将其用于诸如Mail.app或iPhoto.app这样的旗舰应用程序时,很难证明学习Core Data的成本 – 而是选择了SQLite数据库。 SQLite也广泛用于iPhone上。 那些熟悉这两者的人可以评论一下他们的经验吗? 也许和大多数事情一样,这个问题比只使用一个更深。
我想在sqlite中使用正则表达式,但我不知道如何。 我的表有一个字符串这样的列:“3,12,13,14,19,28,32”现在,如果我键入“其中x LIKE'3”“我也得到包含像13或32 ,但我想只得到具有该字符串中的值3的行。 有谁知道如何解决这个问题?
在我的应用程序中,我从图库上传图像,我想将这个图像存储在SQLite数据库。 如何在数据库中存储位图? 我将位图转换为字符串并将其保存在数据库中。 从数据库中检索它时,我无法将该字符串分配给ImageView,因为它是一个字符串。 Imageupload12 .java: public class Imageupload12 extends Activity { Button buttonLoadImage; ImageView targetImage; int i = 0; Database database = new Database(this); String i1; String img; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main5); buttonLoadImage = (Button) findViewById(R.id.loadimage); targetImage = (ImageView) findViewById(R.id.targetimage); Bundle b = getIntent().getExtras(); if (b != null) { img […]