博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android数据库(随apk一起发布数据库)
阅读量:4946 次
发布时间:2019-06-11

本文共 3596 字,大约阅读时间需要 11 分钟。

本文使用的编码环境是eclipse Indigo + sqlite3 + SDK2.3.3

1,简介

      android使用的是sqlite数据库,在官方主页上可以下载到。为了方便管理sqlite,可以下载一个sqlite的可视化软件,本人使用的是sqlite expert presonal,免费版。

 

2,建立数据库

使用sqlite新建数据库的方式如下:

1,将sqlite.exe放到某个路径下,比如D:/database

2,在cmd下进入到D:/database下(cd D:/database)

3,在cmd中继续输入sqlite3.exe test.db,执行完后cmd会进入SQLITE>状态下,此时test.db已经新建完毕。在D:/database下已经有了一个test.db的数据库文件。

4,接下来就可以直接在cmd中继续输入各种语句对数据库进行操作,也可以使用sqlite的可视化软件对test.db进行各种操作。

5,为了防止android程序出错,需要在test.db中新建一个名叫android_metadata的表。键入以下sql语句

CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'zh_CN')

    

"android_metadata"  ('zh_CN')
 

 

3,读取数据库+数据库版本更新

注意:

     a, 将随apk发布的数据库放在android工程下/res/raw路径下。

     b, 数据库文件存到手机上时,路径在/data/data/你的包名/databases下,其他路径则会出错。

 

     需要直接在工程里新建数据库时,会继承SQLiteOpenHelper,但本文讲的是随apk一起发布数据库的情况,因此没有必要继承SQLiteOpenHelper,但也需要对test.db做一层包装,在对test.db进行包装的类对数据库进行操作。

 

     编写程序的过程中经常改变数据库的结构,此时可以通过数据库版本号来判断是否应该更新手机上的数据库,sqlite中数据库的user_version提供了这个帮助。下面的命令可以更改数据库的user_version,user_version必须是整数型的。

 

PRAGMA [database.]user_version = 2 ;

 

       下面是实现代码,包括将数据库写到手机上以及对数据库进行更新。

 

class TestSqlDatabase{		private static final String DATABASE_PATH = "/data/data/your.package.name/databases";	private static final  DATABASE_VERSION = 0;	private static final String DATABASE_NAME = "test.db";		private static String outFileName = DATABASE_PATH + "/" + DATABASE_NAME;		private Context context;      private SQLiteDatabase database;		 TestSqlDatabase(Context context) {		this.context = context;				  = new (outFileName);		 (.()) {			 = SQLiteDatabase.openOrCreateDatabase(outFileName, );			 (.getVersion() != DATABASE_VERSION) {				.();				.();				}		}		try {			buildDatabase();		} catch ( e) {			e.printStackTrace();		}			}	private void buildDatabase() throws {		InputStream myInput = context.getResources().openRawResource(R.raw.test);		  = new (outFileName);				 dir = new (DATABASE_PATH);		 (!dir.()) {			 (!dir.mkdir()) {				throw new ("创建失败");			}		}				 (!.()) {						try {				OutputStream myOutput = new FileOutputStream(outFileName);								byte[] buffer = new byte[1024];		    	 length;		    	 ((length = myInput.(buffer))>0){		    		myOutput.(buffer, 0, length);		    	}		    	myOutput.();		    	myInput.();			} catch ( e) {				e.printStackTrace();			}				}	}}
 

4,增删改查

查找:

 

/** * 查找 * @return */public Cursor select() {     database = SQLiteDatabase.openOrCreateDatabase(outFileName, null);     String sql = "select * from note_table";		     Cursor cursor = database.rawQuery(sql, null);     return cursor;}

插入:

/** * 插入 * @param word * @param note * @return */public long insert(String word, String note) {      database = SQLiteDatabase.openOrCreateDatabase(outFileName, null);      ContentValues cv = new ContentValues();      cv.put("word", word);      cv.put("note", note);			      long result = database.insert("note_table", null, cv);	      return result;}
 

 

更新:

/** * 更新 * @param word * @param note * @return	 */	private int update(String word, String note) {		database = SQLiteDatabase.openOrCreateDatabase(outFileName, null);				ContentValues cv = new ContentValues();		cv.put("note", note);				int result = database.update("note_table", cv, "word=?", new String[]{word});				return result;	}

 

删除:

/** * 删除 * @param word */public int deleteNote(String word) {      database = SQLiteDatabase.openOrCreateDatabase(outFileName, null);      int result = database.delete("note_table", "word=?", new String[]{word});      return result;}

 

      database使用之后需要调用close方法,但是在增删改查方法中如果关闭database的话,返回的cursor就不能使用了,因此可以写一个close方法来关闭数据库,每次操作数据库后调用此方法,如下所示。

public void close() {      database.close();}

转载于:https://www.cnblogs.com/shannyn/archive/2012/06/09/2543334.html

你可能感兴趣的文章
hive的count(distinct id)测试--慎用
查看>>
第九周周总结
查看>>
Logistic Regression
查看>>
8lession-基础类型转化
查看>>
FlashCS5作成SWC,在Flex4中使用(1)
查看>>
vue-cli目录结构及说明
查看>>
JS 数据类型转换
查看>>
WeQuant交易策略—RSI
查看>>
osgearth将视点绑定到一个节点上
查看>>
PHP 当前时间秒数+数值,然后再转换成时间。
查看>>
数据交互 axios 的使用
查看>>
bootloader,kernel,initrc
查看>>
Java中jshell脚本
查看>>
performSelector的方法
查看>>
redis
查看>>
BZOJ1645 [Usaco2007 Open]City Horizon 城市地平线
查看>>
配置IIS
查看>>
单例模式详解
查看>>
电商项目(下)
查看>>
[NOIP2015] 子串
查看>>