转换.SQL表到一个SQLite数据库? [英] Convert a .sql table into a SQLITE database?

查看:135
本文介绍了转换.SQL表到一个SQLite数据库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的计算机(本地主机)持有几千条记录上的数据库。我只是想包含这些记录的表转换成可在Android进行访问的数据库。我听到的SQLite的,但反正是有转换的.sql 文件到SQLite数据库和离线存储它在我的Andr​​oid手机上?

I have a database on my computer (localhost) holding thousands of records. I just want to convert the table containing those records into a database that can be accessed on Android. I heard of SQLite, but is there anyway to convert a .sql file to an SQLite database and store it offline on my android phone?

推荐答案

是的,你能做到这一点。首先,你需要你的.sql文件转换成能的android理解SQLite数据库。在新的SQLite模式,您将需要

Yes, you could do that. First you would need to convert your .sql file into a sqlite database that android can understand. In your new sqlite schema, you would need


  1. android_metadata表,然后将一个区域一行。我定住为en_US

  1. android_metadata table, and insert a locale row. I set mine to "en_US"

CREATE TABLE android_metadata(区域TEXT)

CREATE TABLE android_metadata (locale TEXT)

一个表来保存数据。您可以命名该表无论你preFER,但要确保你已经_id作为主键。例如:

a table to hold your data. You can name this table whatever you prefer, but make sure that you have _id as your primary key. For example

CREATE TABLE MYDATA(_id INTEGER PRIMARY KEY,数据文本)

CREATE TABLE mydata (_id INTEGER PRIMARY KEY, data TEXT)

您再需要从.sql文件导入数据到新的数据表。您可能会发现有用的SQLiteBrowser http://sourceforge.net/projects/sqlitebrowser/

You then need to import your data from the .sql file to your new data table. You may find SQLiteBrowser useful http://sourceforge.net/projects/sqlitebrowser/

一旦你这样做,你现在有可以加载SQLite数据库,并从Android应用程序读取。

Once you've done that, you now have a sqlite database that you can load, and read from your android app.

您的SQLite数据库复制到你的Andr​​oid项目资产文件夹。然后,您可以创建数据库的辅助,将打开和构造您的应用程序可以访问脱机SQLite数据库。

Copy your sqlite database to your android project assets folder. Then you can create your database helper that will open and construct an offline sqlite database that your app could access.

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

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MyDbHelper extends SQLiteOpenHelper {
    // The Android's default system path of your application database.
    private static String DB_PATH = "/data/data/yourpackagename/databases/";

    private static String DB_NAME = "your_db_name.db";

    private static final String DATA_TABLE_NAME = "your_data_table_name";
    private static final String COLUMN_YOUR_DATA_COLUMN_NAME = "data";

    private SQLiteDatabase myDataBase;

    private final Context myContext;

    /**
     * Constructor: MyDbHelper Takes and keeps a reference of the passed context
     * in order to access to the application assets and resources.
     * 
     * @param context
     */
    public MyDbHelper(Context context) {
        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }

    /**
     * Function: createDataBase() Creates a empty database on the system and
     * rewrites it with your own database.
     */
    public void createDataBase() throws IOException {

        boolean dbExist = checkDataBase();

        if (dbExist) {
            Log.i("info", "db exists. do nothing");
            // do nothing - database already exist
        } else {

            // By calling this method and empty database will be created into
            // the default system path
            // of your application so we are gonna be able to overwrite that
            // database with our database.
            Log.i("info", "creating new db");
            this.getReadableDatabase();
            this.close();

            try {
                copyDataBase();
            } catch (IOException e) {
                close();
                throw new Error("Error copying database");
            }
        }
    }

    /**
     * Function: checkDataBase() Check if the database already exist to avoid
     * re-copying the file each time you open the application.
     * 
     * @return true if it exists, false if it doesn't
     */
    private boolean checkDataBase() {

        SQLiteDatabase checkDB = null;

        try {
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);

        } catch (SQLiteException e) {
            // database does't exist yet.
        }

        if (checkDB != null) {
            checkDB.close();
        }

        return checkDB != null ? true : false;
    }

    /**
     * Function: copyDataBase() Copies your database from your local
     * assets-folder to the just created empty database in the system folder,
     * from where it can be accessed and handled. This is done by transfering
     * bytestream.
     */
    private void copyDataBase() throws IOException {

        // Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DB_NAME);

        // Path to the just created empty db
        String outFileName = DB_PATH + DB_NAME;

        // Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        // transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }

        // Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

    }

    /**
     * Function: openDataBase()
     * 
     */
    public void openDataBase() throws SQLException {
        // Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null,
                SQLiteDatabase.OPEN_READONLY);
    }

    /**
     * Function: close()
     * 
     * @Override close() method
     */
    @Override
    public synchronized void close() {

        if (myDataBase != null)
            myDataBase.close();
        super.close();

    }

    /**
     * Function: onCreate()
     * 
     * @Override onCreate() method
     */
    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    /**
     * Function: onUpgrade()
     * 
     * @Override onUpgrade() method
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
    // Add your public helper methods to access and get content from the
    // database.
    // You could return cursors by doing "return myDataBase.query(....)" so it'd
    // be easy
    // to you to create adapters for your views.

}

这篇关于转换.SQL表到一个SQLite数据库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆