Android中使用数据库
SQLiteDatabase和ContentProvider为我们提供一下函数
query() //查询 insert() //插入 delete() //删除 update() //更新 //参数和返回值我没有写
数据库建库升级等原则
private final class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(final Context context) { super(context, DB_NAME, null, DB_VERSION); } /** * 1-->2 add header table * 2-->3 update info * 3--> update info haha * */ public static final int DB_VERSION = 4; public static final String DB_NAME = "download"; /** * Creates database the first time we try to open it. */ @Override public void onCreate(final SQLiteDatabase db) { if (Constants.LOGVV) { Log.v(Constants.TAG, "populating new database"); } onUpgrade(db, 0, DB_VERSION); } /** * Updates the database format when a content provider is used * with a database that was created with a different format. * * Note: to support downgrades, creating a table should always drop it first if it already * exists. */ @Override public void onUpgrade(final SQLiteDatabase db, int oldV, final int newV) { for (int version = oldV + 1; version <= newV; version++) { upgradeTo(db, version); } } /** * Upgrade database from (version - 1) to version. */ private void upgradeTo(SQLiteDatabase db, int version) { switch (version) { case 1: createDownloadsTable(db); break; case 2: createHeadersTable(db); break; case 3: addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_IS_PUBLIC_API, "INTEGER NOT NULL DEFAULT 0"); addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOW_ROAMING, "INTEGER NOT NULL DEFAULT 0"); addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES, "INTEGER NOT NULL DEFAULT 0"); break; case 103: addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI, "INTEGER NOT NULL DEFAULT 1"); makeCacheDownloadsInvisible(db); break; case 4: addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT, "INTEGER NOT NULL DEFAULT 0"); break; default: throw new IllegalStateException("Don‘t know how to upgrade to " + version); } }
以上代码是摘自android 中的DownloadProvider的DatabaseHelper代码。我在这里主要是像推荐这种数据库的建表,最初接触这种建表方式是在以前阅读DownloadManager的时候发现,发现android中这种设计真的是非常精妙。这种方式,方便数据库的升级,在update数据库和create数据库的时候,可以共用建表,修改数据表的代码,同时可以清晰看到数据库的变化。
同时建议,在修改数据库版本的时候,在版本号上面增加注释,写上数据库升级的内容,方便自己以后看到数据库的变化,以及其他人在看代码时候,了解到数据库的变化。
数据库建表和数据存储建议
一些简单的配置文件,不建议存到数据库,存到sharepreference中,方便存取,同时也提高访问速度。
文件,图片等绝对不要存到数据库,存储文件路径到数据库中即可。
一些很复杂的数据,建议直接转成json存到数据库即可。一些缓存也可以这样存储。
其他要说的
数据库操作时候,不要在主线程操作。这是耗时操作,容易造成ANR.
在进行数据库中的数据显示时候,建议配合CursorLoader使用,这是android提供的异步数据加载,同时会在数据变化时候,自动重新刷新数据。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。