Найти в Дзене
Making games is easy!

Подключение внешней базы данных, программирование под Android.

Класс для подключения внешней базы данных может выглядеть следующим образом. Назовем его DatabaseHelper Java код класса ниже (отдельный класс) package com.hfadgh.mypackage;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; public class DatabaseHelper extends SQLiteOpenHelper {
private static String DB_NAME = "date_in.db";
private static String DB_PATH = "";
private static final int DB_VERSION = 1;
private SQLiteDatabase mDataBase;
private final Context mContext;
private boolean mNeedUpdate = false;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
if (android.os.Build.VERSION.SDK_INT >= 17)
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
else
DB_PATH =

Класс для подключения внешней базы данных может выглядеть следующим образом.

Назовем его DatabaseHelper

Java код класса ниже (отдельный класс)

package com.hfadgh.mypackage;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class DatabaseHelper extends SQLiteOpenHelper {
private static String DB_NAME = "date_in.db";
private static String DB_PATH = "";
private static final int DB_VERSION = 1;
private SQLiteDatabase mDataBase;
private final Context mContext;
private boolean mNeedUpdate = false;

public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
if (android.os.Build.VERSION.SDK_INT >= 17)
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
else
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
this.mContext = context;
copyDataBase();

this.getReadableDatabase();
}

public void updateDataBase() throws IOException {
if (mNeedUpdate) {
File dbFile =
new File(DB_PATH + DB_NAME);
if (dbFile.exists())
dbFile.delete();

copyDataBase();

mNeedUpdate = false;
}
}

private boolean checkDataBase() {
File dbFile =
new File(DB_PATH + DB_NAME);
return dbFile.exists();
}

private void copyDataBase() {
if (!checkDataBase()) {
this.getReadableDatabase();
this.close();
try {
copyDBFile();
}
catch (IOException mIOException) {
throw new Error("ErrorCopyingDataBase");
}
}
}
private void copyDBFile() throws IOException {
InputStream mInput =
mContext.getAssets().open(DB_NAME);
//InputStream mInput = //mContext.getResources().openRawResource(R.raw.date_in);
OutputStream mOutput =
new FileOutputStream(DB_PATH + DB_NAME);
byte[] mBuffer = new byte[1024];
int mLength;
while ((mLength = mInput.read(mBuffer)) > 0)
mOutput.write(mBuffer, 0, mLength);
mOutput.flush();
mOutput.close();
mInput.close();
}

public boolean openDataBase() throws SQLException {
mDataBase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.CREATE_IF_NECESSARY);
return mDataBase != null;
}

@Override
public synchronized void close() {
if (mDataBase != null)
mDataBase.close();
super.close();
}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion)
mNeedUpdate = true;
}
}

Теперь осталось запустить там где нужна база данных:

private Cursor cursor;

private DatabaseHelper mDBHelper;
private SQLiteDatabase mDb;

В onCreate пишем

mDBHelper = new DatabaseHelper(this);
try {
mDBHelper.updateDataBase();
}
catch (IOException mIOException) {
throw new Error("UnableToUpdateDatabase");
}
try {
mDb = mDBHelper.getWritableDatabase();
}
catch (SQLException mSQLException) {
throw mSQLException;
}

try {

// Здесь работаем с нашей базой данных

cursor = mDb.query("WORDS",
        new String[]{"WORD_1", "WORD_2"},
null, null, null, null, null);

if (cursor.moveToFirst()) {

do {


 String   word_1 =
cursor.getString(0);

//... Здесь обход базы данных

} while (cursor.moveToNext());
}

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

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

} catch(SQLiteException e) {

// Если, с подключением к базе проблема, то выводим сообщение
    Toast toast = Toast.
makeText(this, "Database unavailable", Toast.LENGTH_SHORT);
    toast.show();
}

И затем не забудьте прописать следующее

@Override
public void onDestroy(){
super.onDestroy();
if(cursor != null) {cursor.close();}
if(mDb != null) {mDb.close();}
}

Саму внешнюю базу данных мы назвали date_in.db

Ее помещаем в папку assets. Ее надо создать в папке, где находится AndroidManifest.xml.

При отсутствии базы данных " date_in.db " в папке assets, будет выдана ошибка (понятное дело о ее отсутствии).

Для создания или импорта в базу данных можно использовать специальные программы.

Они позволяют импортировать практически из таблиц Office Excel.

Например, такая программа как DB Browser for SQLite

Она позволяет создавать новые базы данных, или импортировать данные из файла .CSV

По сути это может быть страница Office Excel (.xlsx). Просто скопированная в .txt файл. С последующим переименованием в .CSV. В первой строчке можно указать имена столбцов.

При импорте выбрать разделитель табуляцию.

Затем надо нажать вкладку изменить таблицу и ввести типы данных.

Нажать записать изменения и готово. Осталось только поместить в папку assets.

Подписывайтесь на канал, не пропустите новые публикации.