数据总是很小,所以我使用了共享首选项,但是对于我的新应用程序,我认为我需要使用SQLite,我有点迷失了,我从stackoverflow和developer.android阅读了几篇文章,但是我仍然不知道我在做什么是否正确,这是我的课程的摘要
我的数据库表类的示例:
public final class UserTable implements BaseColumns {
public static final String TABLE_NAME = "users";
public static final String COLUMN_NAME_EMAIL = "email";
public static final String COLUMN_NAME_SERVER_TOKEN = "token";
public static final String SQL_CREATE_TABLE =
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" +
_ID + " INTEGER PRIMARY KEY," +
COLUMN_NAME_EMAIL + " TEXT," +
COLUMN_NAME_SERVER_TOKEN + " TEXT DEFAULT 'pub'," +
"UNIQUE(" + COLUMN_NAME_EMAIL + ")" +
");";
}
DBHelper:
public class DBHelper extends SQLiteOpenHelper {
private SQLiteDatabase myDB;
public static final int DATABASE_VERSION = 2;
public static final String DATABASE_NAME = "MDB.db";
public static final String NO_MATCH = "NO_MATCH_WAS_FOUND";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
create();
}
public void create() {
myDB = getWritableDatabase();
myDB.execSQL(DB.UserTable.SQL_CREATE_TABLE);
myDB.execSQL(DB.AccountTable.SQL_CREATE_TABLE);
close();
Log.d("mdatabase", "create");
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB.UserTable.SQL_CREATE_TABLE);
db.execSQL(DB.AccountTable.SQL_CREATE_TABLE);
Log.d("mdatabase", "on create");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// This database is only a cache for online data, so its upgrade policy is
// to simply to discard the data and start over
//db.execSQL(SQL_DELETE_ENTRIES);
//onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
public long insert(String tableName, ContentValues values) {
Log.d("mdatabase", "insert " + tableName + ":" + values.toString());
open();
long res = myDB.insert(tableName, null, values);
close();
return res;
}
public int delete(String tableName, String whereClause) {
open();
int res = myDB.delete(tableName, whereClause, null);
close();
return res;
}
public int update(String tableName, ContentValues values, String whereClause) {
Log.d("mdatabase", "update " + tableName + ":" + values.toString());
open();
int res = myDB.update(tableName, values, whereClause, null);
close();
return res;
}
public String select(String tableName, String select, String whereClause) {
Log.d("mdatabase", "select " + tableName + ":" + select);
open();
Cursor c = myDB.rawQuery("SELECT " + select + " FROM " + tableName + " WHERE " + whereClause, null);
Log.d("mdatabase", "select= " + select);
if (c.moveToFirst()) {
Log.d("mdatabase", "there is a returned row");
return c.getString(c.getColumnIndexOrThrow(select));//String only?
}
c.close();
close();
return NO_MATCH;
}
public Map<String, String> selects(String tableName, String[] selects, String whereClause) {
Log.d("mdatabase", "selects " + tableName + ":" + selects.toString());
open();
Cursor c = myDB.rawQuery("SELECT * FROM " + tableName + " WHERE " + whereClause, null);
c.moveToNext();
// Neeeeds Do while!
Map<String, String> map = new HashMap<String, String>();
for (String column : selects) {
map.put(column, c.getString(c.getColumnIndex(column)));
}
c.close();
close();
return map;
}
public void open() {
myDB = getWritableDatabase();
}
public void close() {
myDB.close();
}
}
我如何使用它:
public long setToken(String token) {
return mDB.update(DB.UserTable.TABLE_NAME,
new CVBuilder().add(DB.UserTable.COLUMN_NAME_SERVER_TOKEN, token).get(),
DB.UserTable.COLUMN_NAME_EMAIL + "=" + email);
}
public String getToken() {
return mDB.select(DB.UserTable.TABLE_NAME,
DB.UserTable.COLUMN_NAME_SERVER_TOKEN,
DB.UserTable.COLUMN_NAME_EMAIL + "=" + email);
}
我知道它仍然需要一些工作,特别是在我总是发送和返回字符串的方法中:),但这是我的主要问题:
我要朝正确的方向前进吗?我觉得我的操作方式可能根本不正确。
我总是open();在执行任何单个操作和close()之前;完成后,考虑到在许多情况下我在短时间内多次调用数据库(例如,在不到一秒钟的时间内超过10次)是正确的做法吗?
用于测试应用程序并读取数据库(Android Studio),我必须打开设备资源管理器并转到-> data> data> app_pkg_name> databases> MDB.db,然后单击保存,然后找到我想要的路径要将其保存到我的计算机中,然后保存后,我需要查找和浏览“ SQLite的数据库浏览器”,这非常耗时/烦人:)还有更好的选择吗?就像以某种方式将这2个应用程序同步在一起,这样我就可以刷新某些内容并查看更改?
欢迎其他任何建议
非常感谢,如果很长,我会尽力使它简短; D