Как запустить приложение с готовой базой данных SQL с активным Android

Я хочу запустить свое приложение с заранее созданной базой данных SQLite, которую я смогу читать и писать. В настоящее время я использую Active Android в своем приложении для чтения и записи таблиц MySQL. Есть ли возможность открыть таблицу базы данных SQLite из файла с помощью Active Android?, Или есть лучший способ добиться этого?

1 ответ

Вы можете прочитать ваш файл базы данных (.sqlite) из папки активов в Android. Вы можете создать свой db-файл (.sqlite) онлайн через этот URL, а код Java для чтения этого файла приведен ниже:-

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

import com.freshstartappz.appusagetracker.dto.AppInfo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;


public class DataBaseHelper extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "AppTracker.sqlite";

    private static final String DB_PATH_SUFFIX = "/databases/";
    static Context ctx;

    public DataBaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        ctx = context;
    }


    public void CopyDataBaseFromAsset() throws IOException {


        InputStream myInput = ctx.getAssets().open(DATABASE_NAME);

        // Path to the just created empty db

        String outFileName = getDatabasePath();

        // if the path doesn't exist first, create it
        File f = new File(ctx.getApplicationInfo().dataDir + DB_PATH_SUFFIX);

        if (!f.exists())

            f.mkdir();

        // 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();


    }

    private static String getDatabasePath() {

        return ctx.getApplicationInfo().dataDir + DB_PATH_SUFFIX

                + DATABASE_NAME;

    }


    public SQLiteDatabase openDataBase() throws SQLException {

        File dbFile = ctx.getDatabasePath(DATABASE_NAME);


        if (!dbFile.exists()) {

            try {

                CopyDataBaseFromAsset();

                System.out.println("Copying sucess from Assets folder");

            } catch (IOException e) {

                throw new RuntimeException("Error creating source database", e);
            }

        }


        return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        // TODO Auto-generated method stub


    }


    //add your public methods for insert, get, delete and update data in database.
    public ArrayList<AppInfo> getAppsInfo() {
        ArrayList<AppInfo> appInfos = new ArrayList<AppInfo>();
        String selectQuery;
        Cursor cursor;
        // Select All Query
        selectQuery = "SELECT  * FROM appinfo";
        SQLiteDatabase db = this.getReadableDatabase();
        cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                AppInfo appInfo = new AppInfo(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3));
                appInfos.add(appInfo);
            } while (cursor.moveToNext());

        }
        return appInfos;
    }
}

Это пример изменения кода sqlite имени файла и таблицы с вашими полями.

Другие вопросы по тегам