Я создаю приложение, которое нуждается в базе данных. Я создал его с помощью браузера базы данных sqlite, что означает приложение, которое я создал, импортирует базу данных, которую я создал в телефоне.
Приложение, которое я создаю, требует, чтобы пользователь вводил данные в базу данных. При обновлении базы данных я надеюсь сохранить данные, которые пользователь вводил.
Код моей вспомогательной базы данных ниже:
public class DatabaseHelper extends SQLiteOpenHelper {
//The Android default system path of your application database.
private static String DB_PATH = "/data/data/test.test/databases/";
private static String DB_NAME = "TestDatabase";
private static final int DB_VERSION = 1;
private SQLiteDatabase myDatabase;
private final Context myContext;
/**
* # Constructor #
* Takes and keeps a reference of the passed context in order to access to the application assets and resources.
* @param context
*/
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.myContext = context;
}//constructor
/**
* # Create Database #
* Creates a empty database on the system and rewrites it with your own database.
*/
public void createDatabase() throws IOException {
boolean dbExist = checkDatabase();
if(dbExist)
{
//do nothing - database already exist
}//if
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.
this.getReadableDatabase();
try
{
copyDatabase();
} catch (IOException e) {
throw new Error("Error copying database");
}//catch
}//else
}//createDatabase
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.
}//catch
if(checkDB != null)
{
checkDB.close();
}//if
return checkDB != null ? true : false;
}//checkDatabase
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();
}//copyDatabase
// # open database #
public void openDatabase() throws SQLException {
//Open the database
String myPath = DB_PATH + DB_NAME;
myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}//openDatabase
@Override
public synchronized void close()
{
if(myDatabase != null)
myDatabase.close();
super.close();
}//close
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public List<String> selectData
(String tableName, String [] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy) {
List<String> list = new ArrayList<String>();
Cursor cursor = this.myDatabase.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy);
if (cursor.moveToFirst())
{
do
{
list.add(cursor.getString(0));
}
while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed())
{
cursor.close();
}
return list;
}//selectData
public void insertData (String tableName, String nullColumnHack, ContentValues values) {
try
{
myDatabase.insert(tableName, nullColumnHack, values);
} catch (Exception e) {
Log.e("Error :","unable to insert data");
}//catch
}//insertData
//edit row
public void updateData (String tableName, ContentValues values, String whereClause, String[] whereArgs) {
try
{
myDatabase.update(tableName, values, whereClause, whereArgs);
} catch (Exception e) {
Log.e("Error :","unable to update data");
}//catch
}//updateData
public void deleteRow (String tableName, String whereClause, String[] whereArgs) {
try
{
myDatabase.delete(tableName, whereClause, whereArgs);
} catch (Exception e) {
Log.e("Error :","unable to delete row");
}//catch
}//deleteRow
}
* note: Моя база данных состоит из нескольких таблиц. Две таблицы требуют ввода пользователя. Другие не делают.
Я надеюсь, что реальный ответ может быть дан, вместо того, чтобы давать сайт, который не находится в точной ситуации, что у меня есть, так как я легко запутался.