如何将 SQLite 数据库(SQLite Firefox 扩展)连接到 Android 应用程序,以便 android 2.1 查询并插入数据库

Posted

技术标签:

【中文标题】如何将 SQLite 数据库(SQLite Firefox 扩展)连接到 Android 应用程序,以便 android 2.1 查询并插入数据库【英文标题】:How do I connect an SQLite database (SQLite Firefox extension) to an Android application, for android 2.1 to query and insert to the database 【发布时间】:2011-02-15 08:00:21 【问题描述】:

我正在开发一个 android 应用程序,其中一些用户应该输入的功能:注册、定位医院位置、搜索消息(通过短信发送给注册用户)以及可以安排和预约。

到目前为止,所有活动都已完成。但是,我需要知道如何连接到数据库才能读取和存储这些数据。我使用的是 Android 2.1、Mac OS X 和 SQLite Firefox 扩展。

这是我必须连接到 SQLite 数据库的代码,我做错了什么?

package com.bitnuts.imom;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DbManager extends SQLiteOpenHelper 

    private static final String DB_NAME = "iMom.sqlite";
    private static final String DB_PATH = "/data/data/com.bitnuts.imom/databases/";
    private static final Integer DB_VERSION = 1;
    private static final String TAG = "DbManager";
    private final Context context;
    private SQLiteDatabase db;
    private DbManager dbManager;

    public DbManager(Context context) 
        super(context, DB_NAME, null, DB_VERSION);
        this.context = context;
    

    public DbManager open() 
        dbManager = new DbManager(context);
        db = dbManager.getWritableDatabase();
        return this;
    

    @Override
    public void onCreate(SQLiteDatabase arg0) 

        createNewDatabase();
    

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) 

        // TODO Auto-generated method stub
    

    public void createNewDatabase() 
        InputStream assetsDB = null;
        try 
            assetsDB = context.getAssets().open(DB_NAME);
            OutputStream dbOut = new FileOutputStream(DB_PATH + DB_NAME);

            byte[] buffer = new byte[1024];
            int length;
            while ((length = assetsDB.read(buffer)) > 0) 
                dbOut.write(buffer, 0, length);
            

            dbOut.flush();
            dbOut.close();
            assetsDB.close();
        
        catch (IOException e) 
        
    

【问题讨论】:

【参考方案1】:

您不能直接在应用程序中使用 SQLite 数据库。您需要进行一些修改。比如android_metadata表等。博文Using your own SQLite database in Android applications会帮到你。

【讨论】:

谢谢,这个教程正是我想要的。问候。【参考方案2】:

Android 上没有 JDBC 驱动,所以无法连接到网络上的数据库(SQLite 或其他):Android - Access to online Database SQlite

Android 带有一个嵌入式 SQLite 数据库,但这仅在设备内可用。

另外,请阅读why direct connection to databases from mobile devices is not recommended。

如果您需要在网络上存储/共享一些数据,那么通常的方法是在服务器上创建一个所有设备都可以连接的网络服务。一种非常流行的 Web 服务类型是 REST,在 Java 中是 quite easy to set up。

【讨论】:

感谢您的回答。我是一名学生,我在 android 模拟器上运行它。我在外部服务器上还没有任何东西。我还需要一个 REST 层才能与 localhost 上的数据库进行交互,还是有其他方法? Android上没有数据库驱动,所以无法连接数据库(设备上的嵌入式数据库除外)。所以,是的,您需要某种 Web 服务层来连接,REST 是更流行的一种。【参考方案3】:

我建议在 Android 上使用 ORMLite。有了它,实现变得简单多了。这是getting started documentation。

【讨论】:

以上是关于如何将 SQLite 数据库(SQLite Firefox 扩展)连接到 Android 应用程序,以便 android 2.1 查询并插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组插入 SQLite?

如何将 SQLite 数据同步到 iPhone 中的服务器

如何将加载 .sql 或 .csv 文件导入 SQLite?

如何将 Python 十进制转换为 SQLite 数字?

如何将字符串插入 sQlite.sdb (FireDac)?

如何将日期时间值插入 SQLite 数据库?