Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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
将MySQL数据库导入android SQLite数据库_Android_Mysql_Sqlite - Fatal编程技术网

将MySQL数据库导入android SQLite数据库

将MySQL数据库导入android SQLite数据库,android,mysql,sqlite,Android,Mysql,Sqlite,您能告诉我如何将外部SQLite或MySQL DB导入android SQLite,或者如何在android应用程序中使用外部DB吗?看看可以将MySQL dumb转换为SQLite数据库的转换器工具。然后可以像往常一样在应用程序中导入数据库 直接使用MySQL数据库是不可能的。看看能把MySQL数据库转换成SQLite数据库的转换器工具。然后可以像往常一样在应用程序中导入数据库 直接使用MySQL数据库是不可能的。请注意,您希望导入的外部SQLite数据库使用的是主键的整数数据类型,而不是IN

您能告诉我如何将外部SQLite或MySQL DB导入android SQLite,或者如何在android应用程序中使用外部DB吗?

看看可以将MySQL dumb转换为SQLite数据库的转换器工具。然后可以像往常一样在应用程序中导入数据库

直接使用MySQL数据库是不可能的。

看看能把MySQL数据库转换成SQLite数据库的转换器工具。然后可以像往常一样在应用程序中导入数据库


直接使用MySQL数据库是不可能的。

请注意,您希望导入的外部SQLite数据库使用的是主键的整数数据类型,而不是INT或INT的任何其他变体。来自不同SQLite联盟成员的某些风格的SQLite将INTEGER和INT主键视为相同的(旗舰)SQLite对待他们的方式不同

见第2.0节:

请参见此处有关RowId和主键的部分:

主键列只会成为 如果声明了 类型名正好是“整数”。其他 整数类型名称,如“INT”或 “BIGINT”或“SHORT INTEGER”或 “无符号整数”导致主 键列的行为与普通列相同 具有整数关联性和 唯一索引,不作为 rowid.[添加强调]


编辑:如果外部SQLite数据库将其整数主键定义为INT或INT的任何其他变体,而不是“integer”,则在从联合体成员的实现附加到数据库文件时,可能会得到错误的结果。假设子表中的FK值为110;将整数值视为rowid别名的联接将查找父表以获取第110个物理行,如果父表中的PK定义为INT或BIGINT,则该物理行可能是PK值为110的行,也可能不是PK值为110的行!在SQLite中,只有整数[verbatim]PK被视为rowid的别名,但一些实现没有遵循该规则,将所有INT类型都视为rowid的别名。因此,当从这些实现之一附加到使用flagship SQLite创建的外部SQLite数据文件时,必须使用“INTEGER”(逐字)主键,而不是任何其他INT类型。

请注意,要导入的外部SQLite数据库使用INTEGER数据类型作为主键,不是INT或INT的任何其他变体。来自不同SQLite联盟成员的SQLite的某些风格对INTEGER和INT主键的处理相同,而(旗舰)SQLite对它们的处理不同

见第2.0节:

请参见此处有关RowId和主键的部分:

主键列只会成为 如果声明了 类型名正好是“整数”。其他 整数类型名称,如“INT”或 “BIGINT”或“SHORT INTEGER”或 “无符号整数”导致主 键列的行为与普通列相同 具有整数关联性和 唯一索引,不作为 rowid.[添加强调]


编辑:如果外部SQLite数据库将其整数主键定义为INT或INT的任何其他变体,而不是“integer”,则在从联合体成员的实现附加到数据库文件时,可能会得到错误的结果。假设子表中的FK值为110;将整数值视为rowid别名的联接将查找父表以获取第110个物理行,如果父表中的PK定义为INT或BIGINT,则该物理行可能是PK值为110的行,也可能不是PK值为110的行!在SQLite中,只有整数[verbatim]PK被视为rowid的别名,但一些实现没有遵循该规则,将所有INT类型都视为rowid的别名。因此,当从这些实现之一附加到使用旗舰SQLite创建的外部SQLite数据文件时,必须使用“整型”(逐字)主键,而不是任何其他INT类型。

我知道这是一种便宜的方法,但我使用了推送消息服务(MQTT)获取mysql转储文件的副本并将消息推送到手机上,在手机上通过解析器将行插入本地数据库。mqtt消息服务有一个预编译的.jar库,您可以很容易地在android应用程序中使用它

<> P>在Web服务器上实现MQTT的方法有多种(山姆-> PHP),或者我写过的一个C++侦听服务来转发消息[使用开源MQTT库(MyQuestto)]。要在数据中解析的代码只有几行,因为我在android服务中收到的消息只是一个字节数组

例如,我将字节数组转换为字符串,标记该字符串,然后将其插入数据库:

public void parseMysqlDump(byte[] thisPayload) {
    ContentResolver cr = this.getContentResolver();

    String mysqlDump = "";
    for(int i = 0; i < thisPayload.length; i++) {
        mysqlDump += (char) thisPayload[i];
    }
    String[] mysqlDumpNewLineTokens =  mysqlDump.split("\\n");
    //The first line is the table headers stuff so start with i=1 to get to the first
    //data line
    for(int i = 1; i < mysqlDumpNewLineTokens.length; i++) {
    String[] mysqlDumpSpaceTokens = mysqlDumpNewLineTokens[i].split("\\s");
    String dataTitle = mysqlDumpSpaceTokens[0];
    ContentValues cv = new ContentValues();
    cv.put(Vehicle_DataMetaData.DATA_VALUE, mysqlDumpSpaceTokens[1]);
    cr.insert(Vehicle_DataMetaData.CONTENT_URI, cv);
}
public void parseMysqlDump(字节[]thisPayload){
ContentResolver cr=this.getContentResolver();
字符串mysqlDump=“”;
for(int i=0;i
DR:获取一个mysql转储,将其作为字符串发送到手机,将字符串解析到数据库中

如果您对mqtt内容感兴趣或需要任何澄清,请发表评论,我会回复您的

我知道这可能是一个便宜的方法