在Android中是否有一种很好的方法来查看应用程序数据库中的表中是否存在列?(我知道有一些类似于这个的问题,但似乎没有任何Android特定的.)
我希望每当更新行时使用当前时间戳更新字段.
在MySQL中,我会在声明表时这样做
LastUpdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
但是"on update"部分不适用于SQLite.我找不到自动执行的方法,是否需要声明触发器?
编辑:为了记录,这是我当前的触发器:
CREATE TRIGGER [UpdateLastTime]
AFTER UPDATE
ON Package
FOR EACH ROW
BEGIN
UPDATE Package SET LastUpdate = CURRENT_TIMESTAMP WHERE ActionId = old.ActionId;
END
Run Code Online (Sandbox Code Playgroud)
谢谢
在SQLite3中,我将存储一个非常长的字符串,看起来像这样:
string linkList = "www.blah.com,www.meh.com,www.hah.com";
Run Code Online (Sandbox Code Playgroud)
肯定会超过255个字符,可能会超过1000个字符
如果该列linkList是一个varchar,TEXT还是其他什么东西来存储一个字符串,可能会超过1000个字符
CREATE TABLE(uId INT PRIMARY KEY, linkList varchar);
Run Code Online (Sandbox Code Playgroud)
用于列的最佳变量类型是linkList什么?
当我在Cygwin中使用Subversion来更新某个存储库时,某些目录会成功更新,而另一些目录会因错误消息而失败:
svn:E200030:sqlite:磁盘I/O错误
在做svn update了同一个资源库再次,不同的目录中可以得到同样的错误.有时,在上述错误消息之后有一条SVN指令.
目前,我使用以下语句在Android设备上的SQLite数据库中创建表.
CREATE TABLE IF NOT EXISTS 'locations' (
'_id' INTEGER PRIMARY KEY AUTOINCREMENT, 'name' TEXT,
'latitude' REAL, 'longitude' REAL,
UNIQUE ( 'latitude', 'longitude' )
ON CONFLICT REPLACE );
Run Code Online (Sandbox Code Playgroud)
最后的conflict-clause导致在完成具有相同坐标的新插入时删除行.在SQLite的文档包含有关冲突条款的进一步信息.
相反,我想保留前面的行,只是更新他们的列.在Android/SQLite环境中执行此操作的最有效方法是什么?
CREATE TABLE声明中的冲突条款.INSERT触发器.ContentProvider#insert.我认为在数据库中处理此类冲突更具性能.此外,我发现很难重写该ContentProvider#insert方法以考虑插入更新方案.这是insert方法的代码:
public Uri insert(Uri uri, ContentValues values) {
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
long id = db.insert(DatabaseProperties.TABLE_NAME, null, values);
return ContentUris.withAppendedId(uri, id);
}
Run Code Online (Sandbox Code Playgroud)
当数据从后端到达时,我所做的就是按如下方式插入数据.
getContentResolver.insert(CustomContract.Locations.CONTENT_URI, …Run Code Online (Sandbox Code Playgroud) 是否可以sqlite3从命令行创建一个空数据库(例如sqlite3 <someoption> dbname),这将为我创建一个数据库文件,没有任何表,以便我可以从不同的SQL编辑器访问它?
目前,当我这样做时sqlite3 dbname,我会得到一个sqlite提示符,CREATE TABLE ...但是如果我不这样做,当我退出时,不会创建任何文件.所以我正在寻找一个单独的命令,它将为我创建一个空数据库,而不需要在该步骤中创建至少一个表.
好吧,我有一个数据库,它有很多表.但通常表都是空的.我想检查数据库表是否为空.如果IF表为空,程序将填充它.
public static long queryNumEntries (SQLiteDatabase db, String table)
Run Code Online (Sandbox Code Playgroud)
我将使用它,但它要求API 11.
因为我在我的笔记本电脑中使用AMD处理器,所以我使用GENYMOTION作为模拟器.我已经将数据存储在sqlite中,因为它是android studio中的一个插件.但是,如果我想使用DDMS查看数据,则文件资源管理器不会显示任何内容.如何使用androidstudio和使用GENYMOTION查看存储在sqlite数据库中的数据.提前致谢
我从sqlite3查询中收到错误,我找不到任何参考资料.谷歌搜索字符串带我深入sqlite代码本身,这是不透明的我不能做它的正面或反面.
表架构:
CREATE TABLE quote (
seqnum INTEGER,
session STRING,
timestamp_sip INTEGER,
timestamp_1 INTEGER,
market_center STRING,
symbol STRING,
bid_price INTEGER,
bid_lots INTEGER,
offer_price INTEGER,
offer_lots INTEGER,
flags INTEGER,
PRIMARY KEY (symbol, seqnum) );
Run Code Online (Sandbox Code Playgroud)
查询:
select (seqnum, session, timestamp_sip, timestamp_1, market_center, symbol)
from quote
where symbol = 'QQQ';
Run Code Online (Sandbox Code Playgroud)
错误:
错误:行值被误用
我不知道如何继续这里.表中有大量数据可以与查询匹配:
sqlite> select count(*) from quote where symbol = 'QQQ';
2675931
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供任何指导吗?Sqlite版本是3.16.2.
我刚刚开始与Room合作,虽然一切看起来都非常直观,但我目前还不清楚我究竟能如何处理关系.
由于SQLite是关系数据库,因此您可以指定对象之间的关系.尽管大多数ORM库允许实体对象相互引用,但Room明确禁止这样做.即使您不能使用直接关系,Room仍然允许您在实体之间定义外键约束.(来源:https://developer.android.com/topic/libraries/architecture/room.html#no-object-references)
sqlite ×10
android ×5
database ×3
android-room ×1
cygwin ×1
genymotion ×1
orm ×1
sql ×1
svn ×1
triggers ×1