相关疑难解决方法(0)

如何在SQLITE中删除或添加列?

我想在sqlite数据库中删除或添加列

我正在使用以下查询来删除列.

ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME
Run Code Online (Sandbox Code Playgroud)

但它给出了错误

System.Data.SQLite.SQLiteException: SQLite error
near "DROP": syntax error
Run Code Online (Sandbox Code Playgroud)

sqlite

219
推荐指数
7
解决办法
23万
查看次数

SQLite中是否有Long类型?

我想创建一个包含列类型的表Long而不是Integer.可能吗?

sqlite android

117
推荐指数
5
解决办法
8万
查看次数

什么是SQLite支持android的数据类型

谁能告诉我SQLITE支持ANDROID的DATATYPES列表.

我想确认TIME和DATE数据类型.

sqlite android types

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

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

SQLite数据库在<table_name>(列)上提供警告自动索引升级Android L后

我已经使用Android 5.0 Lollipop升级了我的Nexus 7,在此之前我的应用程序与SQLite数据库配合得很好但是现在每当我执行任何类型的查询时,它都会给我发送log cat错误,例如:

12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on area(server_id)
12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on account(area_id)
12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id)
12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id)
12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on area(server_id)
12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on account(area_id)
12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id)
12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id)
12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on …
Run Code Online (Sandbox Code Playgroud)

android android-logcat android-sqlite android-5.0-lollipop

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

Android Lollipop - 改变了SQLite的行为

在测试我的Android 5.0兼容应用程序时,我发现了这一点 我的两个SQL查询 在棒棒糖上不再按预期工作了.与旧的Android版本相比,我的两个问题导致Lollipop的结果显着不同.

下面,我将更深入地描述这些问题及其解决方案,以防您遇到类似问题.

我的主要问题很简单:这些非向后兼容的变更是否记录在案?

问题一:MATCH

似乎以下查询在Lollipop上不再起作用:


SELECT title FROM ents JOIN ctt ON ctt.docid = ents.cttId WHERE (ctt MATCH '*ads*');
Run Code Online (Sandbox Code Playgroud)

它不再返回任何结果,在它之前的Lollipop上(当然使用相同的数据库和相同的数据).

例如,如本问题所述,MATCH仅匹配字符串前缀.事实确实如此,搜索词前面的'*'在Android <5.0时被忽略了.

然而,Lollipop的SQLite不喜欢第一个'*',并且不会为此查询返回任何内容.我不得不将查询更改为以下内容以使其再次起作用:


SELECT title FROM ents JOIN ctt ON ctt.docid = ents.cttId WHERE (ctt MATCH 'ads*');
Run Code Online (Sandbox Code Playgroud)

(我使用FTS3进行全文搜索.)

问题二:COLLATE LOCALIZED

简短的故事: GROUPing BY由原始名称引用的别名列与ORDER BY一起使用特定于Android的"COLLATE LOCALIZED"会在Lollipop上引发错误,但适用于以前的版本.WTF!?:-)

很长的故事:

故事开始于一个非常大的自动生成的查询,因此我修改,简化并缩短了导致问题的部分.我知道查询没有多大意义,如下所示,但它证明了问题.


SELECT 
    inner.title AS title, 
    ltrim(inner.title, '*') AS title2
FROM 
    (SELECT types.text AS title FROM types) AS inner
GROUP BY inner.title 

UNION SELECT 
    inner.title AS title, 
    ltrim(inner.title, …
Run Code Online (Sandbox Code Playgroud)

sqlite android backwards-compatibility android-5.0-lollipop

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

Android Lollipop 5.0.1 SQLiteLog POSIX错误11 SQLite错误:3850

我在升级应用程序以支持Android Lollipop时遇到问题.该应用程序实现了一个SyncAdapter,它通过内容提供程序在数据库上写入.同时,用户正在浏览应用程序的前端,其中加载程序从数据库中读取相同的数据.加载程序还可以监听数据更改.

现在,如果我在前Lollipop设备上运行该程序,一切正常,没有任何错误输出.

在Lollipop上,我收到以下logcat消息:

11:20:59.344  22341-22376/com.example.com E/SQLiteLog? (10) POSIX Error : 11 SQLite Error : 3850
11:20:59.364  22341-22376/com.example.com E/SQLiteLog? (10) POSIX Error : 11 SQLite Error : 3850
11:20:59.364  22341-22376/com.example.com E/SQLiteLog? (10) POSIX Error : 11 SQLite Error : 3850
11:20:59.364  22341-22376/com.example.com E/SQLiteLog? (10) POSIX Error : 11 SQLite Error : 3850
Run Code Online (Sandbox Code Playgroud)

现在,来自SQLite文档:

(3850)SQLITE_IOERR_LOCK

SQLITE_IOERR_LOCK错误代码是SQLITE_IOERR的扩展错误代码,表示咨询文件锁定逻辑中的I/O错误.通常SQLITE_IOERR_LOCK错误表示获取PENDING锁定时出现问题.但是,它也可以指示Mac上使用的某些专用VFS上的各种锁定错误.一切似乎都在高水平上正常工作(即执行读取和写入)

和:

PENDING锁意味着持有锁的进程想要尽快写入数据库,并且只是等待所有当前的SHARED锁清除,以便它可以获得EXCLUSIVE锁.如果PENDING锁处于活动状态,则不允许对数据库使用新的SHARED锁,但允许继续使用现有的SHARED锁.

我知道SQLite版本已经被Lollipop中的几个主要版本更新了,所以我很容易认为错误是由于我无法隔离的SQLite的一些新行为.

但是,从更高级别的角度看,一切似乎都运行良好(App不会崩溃,执行读写操作,帧率不会下降 - 至少对人眼来说)但我不想忽略这个问题发布应用程序,直到我确定它不会导致数据损坏或麻烦.

也许我对棒棒糖关于锁和多进程数据库访问的一些重要更改缺失了,但我觉得这是一个关于Art/Dalvik域的较低级别的问题,因此必须在NDK上下文中修复.

有没有办法解决这个问题而不分发特定版本的SQLite?是否有任何清单/ SQLite选项来避免错误?

提前致谢

sqlite multithreading android posix android-5.0-lollipop

21
推荐指数
1
解决办法
2743
查看次数

SQLite3 FTS4,MATCH和Android

是否在Android版本中启用了SQLite3 FTS4?

sqlite android full-text-search

11
推荐指数
1
解决办法
4981
查看次数

如何用SQLite的FTS3实现模糊搜索?

我已经基于官方Android文档集成了搜索,我正在使用以下SQLite架构和查询:

CREATE VIRTUAL TABLE Search USING FTS3 (
    _id,
    name,
    location
);

select * from Search where name MATCH ?
-- where ? is the user typed exact "query"
-- or if it doesn't have spaces or stars I append a star to search prefix: "query*"
Run Code Online (Sandbox Code Playgroud)

我想知道如何扩展它?允许以下内容:

说我有一些名为的物品:

  • 我喜欢的物品
  • 我的秘密物品
  • 项目#1
  • 你喜欢的物品

当用户blah在搜索框中输入内容时,搜索结果会显示:

  • my
    • 喜欢的物品
    • 我的秘密物品
  • mfi
    • 中号 Ÿ ˚F ancy TEM
  • fan item,fanit,fit
    • 我的粉丝 CY EM …

sqlite search android full-text-search fts3

11
推荐指数
1
解决办法
3887
查看次数

如何在Android SQLite中使用TRIGGER

我在数据库中有两个表:

  • 表一有名称和房间号列
  • 表二有房间号和时间栏.

现在,当删除或添加第一列的房间号时,我的第二个表也应该更新.我认为这可以用TRIGGER命令,但我不确定如何使用它.

通常我的create database语句是这样的:

private static final String DATABASE_CREATE_PATIENT_ID_TABLE =
    "create table " + DATABASE_PATIENT_TABLE +
    " (_id integer primary key autoincrement,"
     + "patient_number text not null, room_numbertext not null, " +
            "patient_initial text not null);";
Run Code Online (Sandbox Code Playgroud)

现在当房间被删除或添加到第一个表中时,我的第二个表应该更新.

private static final String DATABASE_CREATE_NOTES_ID_TABLE =
    "create table " + DATABASE_NOTES_TABLE +
    " (_id integer primary key autoincrement," +
     " room_number text not null, time_hour text not null, " +
            "notes_hour text not null, today_date text not null);";
Run Code Online (Sandbox Code Playgroud)

最初我做的是比较两个表的内容.但是,当数据增加时,这肯定会导致性能问题.所以我偶然发现了TRIGGER的事情.我认为这可以解决我的问题,但我不知道我应该如何使用它.

通过Android使用SQLite数据库 …

database sqlite android triggers

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