Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试转换现有SQLite数据库以用于Android操作系统_Java_Android_Sql_Database_Sqlite - Fatal编程技术网

Java 尝试转换现有SQLite数据库以用于Android操作系统

Java 尝试转换现有SQLite数据库以用于Android操作系统,java,android,sql,database,sqlite,Java,Android,Sql,Database,Sqlite,嘿,伙计们,我有一个预先存在的SQLite数据库,我想和我的Android应用程序一起使用。为了测试,我从头创建了一个示例数据库,其中每个主键都命名为_id,还添加了表android_元数据。这很有效 所以现在,当我试图重命名我已经拥有的数据库的主键并将其上载到应用程序时,它不起作用 有谁能告诉我,为了让我的现有数据库与安卓操作系统一起工作,我必须对它做些什么?比如说,为了让它工作,数据库中到底需要修改什么 是的,我看过大多数教程,但大多数教程都没有详细介绍您必须在现有数据库中更改的内容 以下是

嘿,伙计们,我有一个预先存在的SQLite数据库,我想和我的Android应用程序一起使用。为了测试,我从头创建了一个示例数据库,其中每个主键都命名为_id,还添加了表android_元数据。这很有效

所以现在,当我试图重命名我已经拥有的数据库的主键并将其上载到应用程序时,它不起作用

有谁能告诉我,为了让我的现有数据库与安卓操作系统一起工作,我必须对它做些什么?比如说,为了让它工作,数据库中到底需要修改什么

是的,我看过大多数教程,但大多数教程都没有详细介绍您必须在现有数据库中更改的内容

以下是我正在使用的数据库:


谢谢。

我通常在调用SQLiteDatabase.openDatabase时设置NO\u LOCALIZED\u COLLATORS标志。那么您就不需要android_元数据表了。据我所知,\u id列也必须是整型主键自动递增。

您实际上不需要将主id列命名为\u id-您可以使用类似“选择我的id作为\u id”的内容,另一个\u字段。。。在select语句中

您可以按照上面Omokoii所说的操作并设置NO_LOCALIZED_COLLATORS标志,也可以创建android_元数据表并将值en US插入其中


至于使用现有数据库,这篇博文可能会有所帮助:

确保现有SQLite数据库仅使用integer verbatim而不是int或int16声明整数主键,或者使用任何其他可能的方法声明SQLite将识别的整数

我在AdobeAIR中导入SQLite数据库时遇到了一个相关的问题,该数据库与Goodle、Mozilla和其他联盟成员IIRC有一个共同的代码库。我的PK被定义为int逐字。SQLite对待整型主键的方式与对待int、int或int16等主键的方式不同

此处记录:

SQLite将整数主键视为RowId的同义词。任何其他int类型都与标准列类似,使用标准列时,RowId不一定等于PK列中的值

但是,,Adobe和SQLite consortium成员的其他相关子组没有为他们实现这种有文档记录的行为。任何/每一个用作PK列的整数类型都被视为行id的同义词。当将预先存在的SQLite数据库导入他们的数据库时,他们未能实现这种区别可能会导致错误的联接实现,前提是预先存在的数据库在声明其整数类型主键时使用的不是整数

顺便说一句,我让Adobe注意到了这一点,并在SQLite邮件列表和AdobeAIR论坛上进行了令人作呕的讨论。Adobe写信给我说,他们将记录他们对标准SQLite行为的偏离,但保持原样,因此我相信Android在这方面也将不同于SQLite记录的行为

p.p.S.看来,这个联合体成员小组要么没有设想数据库将被导入的可能性,即他们假设数据库将始终通过其接口重新创建,要么他们只是忽略了SQLite中这一公认的古怪异常行为

p.p.p.S.例如,当涉及[stop_id]上的连接时,OP使用的数据库中的该表将返回虚假结果列,如果由未实现标准整数/int等异常行为的SQLite实现附加,但在与PK一起使用时将任何/每个int类型视为rowid的同义词:

  CREATE TABLE mt_stop (
    stop_id  int  NOT NULL PRIMARY KEY ASC,
    stop_lat real NOT NULL CHECK (stop_lat >= -90 AND stop_lat <= 90),
    stop_lon real NOT NULL CHECK (stop_lon >= -180 AND stop_lon <= 180),
    stop_name varchar (120) DEFAULT 'Unknown'
)

同样,我发现这个文档非常有用:

把它全部弄明白了,并快速阅读了一篇关于它的博客文章,以防将来有人需要这些信息: