Sqlite 数据库的相关操作


1.将数据库保存到手机内存中

    1.1操作方式比较简单,我们只需要编写一个类继承SQLiteOpenHelper类来完成相关的操作

public class SqliteHelper extends SQLiteOpenHelper {
	private final static String DATABLBASE_NAME = "message.db";
	private final static int DATABLBASE_VERSION = 1;  //版本号
	private final static String TABLE_NAME = "pro_msg";   //表名
	
	public static String ID  ="_id";    //自动增量
	public static String PRO_NAME = "name";  //运行程序名称 
	

	
	public SqliteHelper(Context context) {
		super(context, DATABLBASE_NAME,null, DATABLBASE_VERSION);
		// TODO Auto-generated constructor stub
	}
	
	/**
	 * 1.如果数据库文件不存在,那么SQliteOpenHelper会自动调用这个方法进行创建数据库(如:创建表,视图等..)
	 * 2.如果数据库文件存在,则不执行此方法,再整个过程中,该方法只执行一次
	 * 3.此时可以再数据库中添加一些初始数据
	 * @param context
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		//create table message (id integer primariy key autoincrem)
		String sql = "create table "+TABLE_NAME+"("+ID+" integer primary key autoincrement,"
		+PRO_NAME+" text);";
		db.execSQL(sql);
		
		
	}

	/**
	 * 1,如果数据文件存在,并且当前的版本号高于上次创建或升级的版本号,该方法会被调用
	 * 2.在执行该方法的过程中,如果需要备份当前的数据,则需要更严谨的操作
	 * 3.删除原有数据库后创建新的数据库
	 * 
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
	}
	}
 
 
1.2  数据库的相关操作,采用SqliteHelper.getWritableDatabase或getReadableDatabase()方法获取SQLiteDatabase对象来进行相关的操作
 getReadableDatabase()并不是以只读方式打开数据库,而是先执行getWritableDatabase(),失败的情况下才调用。
getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。
但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。
 
2.如何将数据存放在sd卡和apk一起打包发布
      2.1将数据库放在SD卡
 
public class DBHelper {
	//定义数据库文件的路径
	private String dbfile = android.os.Environment.getExternalStorageDirectory()+"/test.db";
	private SQLiteDatabase database;
	private static DBHelper instance;
	
	
	public static DBHelper getInstance(){
		if(instance == null){
			instance =  new DBHelper();
		}
		return instance;
	}
	
	//创建数据表
	private  DBHelper(){
		File file = new File(dbfile);
		if(file.exists()) file.delete();
		String createTable = "create table person (id integer primary key autoincrement,name varchar(50))";
		database = getDatbase();
		database.execSQL(createTable);
	}
	
	/**
	 * 获得数据库操作对象
	 * @return
	 */
	private SQLiteDatabase getDatbase(){
		return SQLiteDatabase.openOrCreateDatabase(dbfile, null);
	}
	
	
	/**
	 * 插入数据测试
	 */
	public long insertData(String data){
		ContentValues cv = new ContentValues();
		cv.put("name", data);
//		database= getDatbase();
		long rs = database.insert("person",null, cv);
		return rs;
	}
	/**
	 * 查询数据
	 * @return
	 */
	public String selectData(){
		String rs = null;
		String sql = "select name from person";
//		database = getDatbase();
		Cursor  cursor = database.rawQuery(sql, null);
		if(cursor.moveToLast()){
			rs = cursor.getString(0);
		}
		return rs;
	}
	
     2.2  数据库随apk打包发布
    手动创建sqlite数据库(可采用SQLite Expert Personal )该软件和常用的数据库软件类似
     2.2.1 在res\raw文件夹中放入我们手动创建的数据库,然后随apk一起发布。但是如何访问我们的数据库呢? 
     2.2.2 apk文件相当于Windows中的exe文件,大家试想,exe文件在启动时,文件大小怎么可能会发生变化呢? 因此需要在第一次运行程序时将数据库文件复制到内存卡或者SD卡中,复制可采用operRawResource方法获得res\raw目录中资源文件的inputStream对象。然后进行其他的操作。当然我们的数据库文件也可以选择从网络上下载,而不打包在apk中,这样省去了复制的操作,但这样会造成发布不方便以及耗费过多的网络流量的问题。采用SQLiteDatabase.openOrCreateDatabase(dbfile, null);获得SQLiteDatabase进行相关的操作
 
 
 
 

  
 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值