Разработка базы данных Android SQLite MultiTable
Я хотел бы создать многотабличную базу данных со всеми RUD (за исключением C) в классе обработчика базы данных, но иметь все таблицы, созданные и обновленные в вспомогательном классе.
Вот что ямы использовали для одной таблицы:
package com.cc.folfapptest;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class ConfigDatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "AndroidSQLLiteDB";
// Config table name
private static final String TABLE_CONFIG = "Config";
// Config Table Columns names
private static final String KEY_ID = "id"; //
private static final String KEY_VERSION = "Version";
private static final String KEY_PRO_KEY = "ProKey";
private static final String KEY_SERVERID = "ServerID";
private static final String KEY_SERVERID_ALT = "ServerID_Alt";
private static final String KEY_CURRENT_BAG_ID = "CurrentBagID";
private static final String KEY_PLAYER_ID = "PlayerID";
private static final String KEY_PLAYER_SERVER_ID = "PlayerServerID";
String _currentBagID;
String _playerID;
String _playerServerID;
public ConfigDatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONFIG_TABLE = "CREATE TABLE " + TABLE_CONFIG + "("
+ KEY_ID + " INTEGER PRIMARY KEY,"
+ KEY_VERSION + " TEXT,"
+ KEY_PRO_KEY + " TEXT,"
+ KEY_SERVERID + " TEXT,"
+ KEY_SERVERID_ALT + " TEXT,"
+ KEY_CURRENT_BAG_ID + " TEXT,"
+ KEY_PLAYER_ID + " TEXT,"
+ KEY_PLAYER_SERVER_ID + " TEXT"
+ ")";
db.execSQL(CREATE_CONFIG_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONFIG);
// Create tables again
onCreate(db);
}
/**
* All CRUD(Create, Read, Update, Delete) Operations
*/
// Adding new config
int addConfig(Config config) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_VERSION, config.getVersion()); // Version
values.put(KEY_PRO_KEY, config.getProKey()); // ProKey
values.put(KEY_SERVERID, config.getServerID());
values.put(KEY_SERVERID_ALT, config.getServerID());
values.put(KEY_CURRENT_BAG_ID, config.getCurrentBagID());
values.put(KEY_PLAYER_ID, config.getPlayerID());
values.put(KEY_PLAYER_SERVER_ID, config.getPlayerServerID());
// Inserting Row
long myReturnlong = db.insert(TABLE_CONFIG, null, values);
int myReturnInt = (int)myReturnlong;
//db.close(); // Closing database connection
return myReturnInt;
}
// Getting Config
Config getConfig(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONFIG, new String[] { KEY_ID, KEY_VERSION, KEY_PRO_KEY, KEY_SERVERID, KEY_SERVERID_ALT, KEY_CURRENT_BAG_ID, KEY_PLAYER_ID, KEY_PLAYER_SERVER_ID}, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Config config = new Config();
config.setID(Integer.parseInt(cursor.getString(0)));
config.setVersion(cursor.getString(1));
config.setProKey(cursor.getString(2));
config.setServerID(cursor.getString(3));
config.setServerID_Alt(cursor.getString(4));
config.setCurrentBagID(cursor.getString(5));
config.setPlayerID(cursor.getString(6));
config.setPlayerServerID(cursor.getString(7));
// return player
return config;
}
// Updating Config
public int updateConfig(Config config) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_VERSION, config.getVersion()); // Version
values.put(KEY_PRO_KEY, config.getProKey()); // ProKey
values.put(KEY_SERVERID, config.getServerID()); // SERVERID
values.put(KEY_SERVERID_ALT, config.getServerID_Alt()); // SERVERID
values.put(KEY_CURRENT_BAG_ID, config.getCurrentBagID());
values.put(KEY_PLAYER_ID, config.getPlayerID());
values.put(KEY_PLAYER_SERVER_ID, config.getPlayerServerID());
// updating row
return db.update(TABLE_CONFIG, values, KEY_ID + " = ?",
new String[] { String.valueOf(config.getID()) });
}
// Truncate Config Table
public void truncateConfigTable() {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONFIG, null, null);
}
}
Я искал код для обхода этого, и я думаю, что если я просто неt переопределяет onCreate () onUpgrade () в вышеупомянутой функциональности класса like и просто обрабатывает все создания и изменения таблиц наподобие (не совсем, но вроде):}
public class DataBaseHelper extends SQLiteOpenHelper {
public DataBaseHelper(Context context, String name,CursorFactory factory, int version)
{
super(context, name, factory, version);
}
// Called when no database exists in disk and the helper class needs
// to create a new one.
@Override
public void onCreate(SQLiteDatabase _db)
{
_db.execSQL(DatabaseFunc.DATABASE_CREATE);
_db.execSQL(DatabaseFunc.DATABASE_CREATE2);
}
// Called when there is a database version mismatch meaning that the version
// of the database on disk needs to be upgraded to the current version.
@Override
public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion)
{
// Log the version upgrade.
Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data");
// Upgrade the existing database to conform to the new version. Multiple
// previous versions can be handled by comparing _oldVersion and _newVersion
// values.
// The simplest case is to drop the old table and create a new one.
_db.execSQL("DROP TABLE IF EXISTS " + "LOGIN");
_db.execSQL("DROP TABLE IF EXISTS " + "SMSREG");
// Create a new one.
onCreate(_db);
}
от:Android-sqllite-множественные столы будет ли что-то подобное работать? Я'Скорее всего, не нужно объединять функциональность 8 таблиц в один файл. Это также позволило бы мне быстро преобразовать это и начать использовать его как настройку нескольких таблиц.
Я нашел много примеров SQL Lite для одной таблицы, примеры для одной таблицы просто отстой, потому что когдадикий» Вы бы использовали базу данных для одной таблицы? Sheesh.