当前位置: 首页>移动开发>正文

android 设置数据库超时 android 数据库app

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

1,简介

      android使用的是sqlite数据库,在官方主页http://sqlite.org/上可以下载到。为了方便管理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')



    



INSERT INTO "android_metadata" VALUES ('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 ;



 

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

 



public class TestSqlDatabase{ private static final String DATABASE_PATH = "/data/data/your.package.name/databases"; private static final int 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; public TestSqlDatabase(Context context) { this.context = context; File file = new File(outFileName); if (file.exists()) { database = SQLiteDatabase.openOrCreateDatabase(outFileName, null); if (database.getVersion() != DATABASE_VERSION) { database.close(); file.delete(); } } try { buildDatabase(); } catch (Exception e) { e.printStackTrace(); } } private void buildDatabase() throws Exception{ InputStream myInput = context.getResources().openRawResource(R.raw.test); File file = new File(outFileName); File dir = new File(DATABASE_PATH); if (!dir.exists()) { if (!dir.mkdir()) { throw new Exception("创建失败"); } } if (!file.exists()) { try { OutputStream myOutput = new FileOutputStream(outFileName); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } myOutput.close(); myInput.close(); } catch (Exception 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.xamrdz.com/mobile/4g41938602.html

相关文章: