Как запустить приложение с готовой базой данных 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 имени файла и таблицы с вашими полями.