我正在尝试学习SQLite,我正在构建一个iPhone应用程序.但是我想在我的构建应用程序中添加一个SQLite数据库.我有三个教程,但我不清楚该代码.
如何将SQLite数据库添加到我的构建应用程序?样本代码会是什么样的?
使用sqlite3,如果我的查询是
SELECT * FROM table WHERE title LIKE '%x%'
它将匹配包含的字符串x.我想创建x一个可绑定的参数,如:
SELECT * FROM table WHERE title LIKE '%x?%'
但是,这不起作用,因为''形成一个字符串文字.有没有办法逃避?文字内部?我知道我可以构建可绑定参数来包含%然后使用
SELECT * FROM table WHERE title LIKE ?
但是在处理SQL注入而不是绑定接口方面,这会将责任转移到我的代码中.这有更好的解决方案吗?
我有一个SQL表,它由以下代码创建:
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + SUBJECT
+ " TEXT NOT NULL," + TOPIC + " TEXT NOT NULL, "
+ LECTURENUMBER + " TEXT NOT NULL, " + PAGENUMBER
+ " TEXT NOT NULL, " + DATE + " TEXT NOT NULL, " + _DATA
+ " TEXT NOT NULL);");
}
Run Code Online (Sandbox Code Playgroud)
我查询表如下:
String sql = "SELECT " + _ID + "," …Run Code Online (Sandbox Code Playgroud) 在Android设备上执行SQLite cursor.getCount()是否是昂贵的操作?
哪个更快:
Cursor cursor = db.rawQuery(sql, null);
int length = cursor.getCount();
final List<Item> items = new ArrayList<Item>(length * 2); // need maybe 2 items per row
if (cursor.moveToFirst()) {
// loop trough the query result
do {
...
Run Code Online (Sandbox Code Playgroud)
要么
Cursor cursor = db.rawQuery(sql, null);
final List<Item> items = new ArrayList<Item>(); // capacity is 0 by default on android
if (cursor.moveToFirst()) {
// loop trough the query result
do {
Run Code Online (Sandbox Code Playgroud) 修复错误有点麻烦.
一切都适用于本地机器.在PG上,heroku是错误的.
这是日志:
?[32m2012-01-09T19:52:24+00:00 app[web.1]:?[0m ActionView::Template::Error (PGEr
ror: ERROR: operator does not exist: character varying = integer
?[32m2012-01-09T19:52:24+00:00 app[web.1]:?[0m LINE 1: ...T "reviews".* FROM "re
views" WHERE "reviews"."trip_id" = 32
?[32m2012-01-09T19:52:24+00:00 app[web.1]:?[0m : SELECT "reviews".* FROM "review
s" WHERE "reviews"."trip_id" = 32):
?[32m2012-01-09T19:52:24+00:00 app[web.1]:?[0m 31: <div style='display:non
e'>
?[32m2012-01-09T19:52:24+00:00 app[web.1]:?[0m 33: <% for review in @tr
ip.reviews %>
?[32m2012-01-09T19:52:24+00:00 app[web.1]:?[0m 34:
?[32m2012-01-09T19:52:24+00:00 app[web.1]:?[0m 32: <div id="inline">
?[32m2012-01-09T19:52:24+00:00 app[web.1]:?[0m HINT: No operator matches the gi
ven name and argument type(s). You …Run Code Online (Sandbox Code Playgroud) sqlite3数据库的最大连接数是多少?
为什么我不能将它用于非常大的网站假设有300万用户?
我在我的Android应用程序中保存了一个数据库,并希望检索插入数据库的最后10条消息.
我用的时候:
Select * from tblmessage DESC limit 10;
Run Code Online (Sandbox Code Playgroud)
它给了我10条消息,但来自TOP.但我想要最后 10条消息.可能吗?
假设整个表数据是 -
1,2,3,4,5....30
Run Code Online (Sandbox Code Playgroud)
我写了查询 select * from tblmessage where timestamp desc limit 10
表明 30,29,28...21
但我希望序列为 - 21,22,23...30
我有一节课:
class DatabaseThing():
def __init__(self, dbName, user, password):
self.connection = ibm_db_dbi.connect(dbName, user, password)
Run Code Online (Sandbox Code Playgroud)
我想测试这个类但是测试数据库.所以在我的测试课中,我是这样的:
import sqlite3 as lite
import unittest
from DatabaseThing import *
class DatabaseThingTestCase(unittest.TestCase):
def setUp(self):
self.connection = lite.connect(":memory:")
self.cur = self.connection.cursor()
self.cur.executescript ('''CREATE TABLE APPLE (VERSION INT, AMNT SMALLINT);
INSERT INTO APPLE VALUES(16,0);
INSERT INTO APPLE VALUES(17,5);
INSERT INTO APPLE VALUES(18,1);
INSERT INTO APPLE VALUES(19,15);
INSERT INTO APPLE VALUES(20,20);
INSERT INTO APPLE VALUES(21,25);''')
Run Code Online (Sandbox Code Playgroud)
我将如何使用此连接而不是我要测试的类的连接?意味着使用连接setUp(self)而不是连接DatabaseThing.我无法在不实例化类的情况下测试函数.我想__init__在Test Class中以某种方式模拟该方法,但我没有找到任何在文档中看起来有用的东西.
我有两个这样的SQLite表:
AuthorId | AuthorName
----------------------
1 | Alice
2 | Bob
3 | Carol
... | ....
BookId | AuthorId | Title
----------------------------------
1 | 1 | aaa1
2 | 1 | aaa2
3 | 1 | aaa3
4 | 2 | ddd1
5 | 2 | ddd2
... | ... | ...
19 | 3 | fff1
20 | 3 | fff2
21 | 3 | fff3
22 | 3 | fff4
Run Code Online (Sandbox Code Playgroud)
我想创建一个SELECT查询,它将返回每个AuthorId的前N行(例如两行),按Title排序("选择每个作者的前两本书").
样本输出:
BookId | AuthorId | AuthorName …Run Code Online (Sandbox Code Playgroud) 将文本作为SQLite数据库中的主键是不是很糟糕?我听说性能原因不好,这是真的吗?在这种情况下,rowid是否会被用作实际的主键?
sqlite ×10
android ×4
database ×3
sql ×3
binding ×1
cocoa-touch ×1
cursor ×1
heroku ×1
iphone ×1
java ×1
mocking ×1
postgresql ×1
primary-key ×1
python ×1
rowid ×1
unit-testing ×1