zoukankan      html  css  js  c++  java
  • Android使用sqlite数据库的使用

    移动端Android开发,我们使用的是sqlite数据库,这是一个轻量级的数据库,我们在使用的时候,甚至不想mysql等数据库一样加载驱动啊,在androidsdk中,都已经帮我们做好了,我们只需要用就好了,下面介绍一下使用方法,

      首先,我们需要建一个类来继承SQLiteOpenHelper,并重写PersonSQLiteOpenHelper与oncreate方法即可,前者是建立一个的名字,后者是建立数据库结构的脚本,这两个方法会在数据库第一次创建的时候,调用。建好了,就不再调用了。

    /**
    	 * 数据库的构造方法,用来定义数据库的名称,数据库的查询的结果集,数据库版本。
    	 * @param context
    	 */
    	//factory ,游标工厂,设置位null,version数据库版本。
    	public PersonSQLiteOpenHelper(Context context) {
    		super(context, "person.db", null, 1);
    	}
    
    	/**
    	 * 数据库第一次创建的时候,调用的方法
    	 * db:被创建的数据,
    	 */
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		
    		//初始化数据库的表结构。
    		db.execSQL("create table person (id integer primary key autoincrement,name varchar(20),number varchar(20))");
    	}
    

    数据库建好了,我们接下来要实现数据库的曾删改查的一些操作了,这时我们可以选择sql脚本或者google工程师封装好的api进行

      

    public class PersonDao {
    	private PersonSQLiteOpenHelper helper;
    	public PersonDao(Context context){
    		helper = new PersonSQLiteOpenHelper(context);
    	}
    	
    	public void add(String name,String number){
    		SQLiteDatabase db = helper.getWritableDatabase();
    		db.execSQL("insert into person (name,number) values (?,?)",new Object[]{name,number});
    	//	db.execSQL(sql, bindArgs)
    		
    		db.close();
    	}
    	
    	public boolean find(String name){
    		SQLiteDatabase db = helper.getReadableDatabase();
    		Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{name});
    		//默认的结果集是指到第一个行,是空的,
    		boolean result = cursor.moveToNext();
    		cursor.close();
    		db.close();
    		return result;
    	}
    	//修改number
    	public void update(String name,String number){
    		SQLiteDatabase db = helper.getReadableDatabase();
    		db.execSQL("update person set number =? where name = ?",new Object[]{number,name});
    		db.close();
    	}
    	public void delete(String name){
    		SQLiteDatabase db = helper.getReadableDatabase();
    		db.execSQL("delete from person where name = ?", new Object[]{name});
    	}
    	
    	public List<Person> findAll(){
    		SQLiteDatabase db = helper.getReadableDatabase();
    		Cursor cursor = db.rawQuery("select * from person", null);
    		List<Person> persons = new ArrayList<Person>();
    		
    		while(cursor.moveToNext()){
    			//0
    //			int id = cursor.getInt(0);
    			int id = cursor.getInt(cursor.getColumnIndex("id"));
    			String name = cursor.getString(1);
    			String number = cursor.getString(2);
    			Person p = new Person(id, name, number);
    			persons.add(p);
    		}
    		
    		cursor.close();
    		db.close();
    		return persons;
    	}
    	
    }
    
    public class PersonDaoApi {
    	private PersonSQLiteOpenHelper helper;
    	public PersonDaoApi(Context context){
    		helper = new PersonSQLiteOpenHelper(context);
    	}
    	
    	public long add(String name,String number){
    		SQLiteDatabase db = helper.getWritableDatabase();
    		//db.execSQL("insert into person (name,number) values (?,?)",new Object[]{name,number});
    		ContentValues values = new ContentValues();
    		values.put("name", name);
    		values.put("number", number);
    		//返回结果>-1,表示成功的。
    		long result = db.insert("person", null, values);
    		db.close();
    		return result;
    	}
    	
    	public boolean find(String name){
    		SQLiteDatabase db = helper.getReadableDatabase();
    		//Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{name});
    		//db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy)
    	//	columes=null,反悔所有列。
    		Cursor cursor = db.query("person", null, "name=?", new String[]{name}, null, null, null);
    		
    		//默认的结果集是指到第一个行,是空的,
    		boolean result = cursor.moveToNext();
    		cursor.close();
    		db.close();
    		return result;
    	}
    	//修改number
    	public int update(String name,String number){
    		SQLiteDatabase db = helper.getReadableDatabase();
    		//db.execSQL("update person set number =? where name = ?",new Object[]{number,name});
    		ContentValues values = new ContentValues();
    		values.put("number", number);
    		
    		//影响多少行,
    		int row = db.update("person", values, "name=?", new String[]{name});
    		db.close();
    		return row;
    	}
    	public int delete(String name){
    		SQLiteDatabase db = helper.getReadableDatabase();
    	//	db.execSQL("delete from person where name = ?", new Object[]{name});
    		//影响的行数,》0 及成功
    		int row = db.delete("person", "name=?", new String[]{name});
    		db.close();
    		return row;
    	}
    	
    	public List<Person> findAll(){
    		SQLiteDatabase db = helper.getReadableDatabase();
    		//Cursor cursor = db.rawQuery("select * from person", null);
    		
    		Cursor cursor = db.query("person", new String[]{"name", "id", "number"}, null, null, null,null, null);
    		
    		List<Person> persons = new ArrayList<Person>();
    		
    		while(cursor.moveToNext()){
    			//0
    //			int id = cursor.getInt(0);
    			int id = cursor.getInt(cursor.getColumnIndex("id"));
    			String name = cursor.getString(cursor.getColumnIndex("name"));
    			String number = cursor.getString(cursor.getColumnIndex("number"));
    			Person p = new Person(id, name, number);
    			persons.add(p);
    		}
    		
    		cursor.close();
    		db.close();
    		return persons;
    	}
    	
    }
    

    数据库建好后,在哪里呢,我们怎样找到呢?

      数据库建好后,存放在Android目录的/data/data/程序包名/databases 目录下,我们打开后,就可以刚才建的数据库了,把这个.db文件导出,用sqlitemanager(mac),或者sqlitexploer(windows),就可以打开这个数据库进行查看了,

      但是/data/data/程序包名/databases 这个目录由于权限的控制,我们也只能是在模拟器中能打开,真机调试的时候,是打不开的,那我们怎么进行使用呢,

    这时我们可以使用adb指令,来使用,首先在终端中是可以打开这个目录的,所以我们先进入这个目录,比如我们执行

    # cd /data/data/com.ftf.db/databses
    # sqlite3 person.db
    

    就会发现,不再是adb模式下的指令了,而变成sql指令的形式了,而这是和mysql一样的,这时我们就可以相关sql语句的书写了。

  • 相关阅读:
    JS深度判断两个数组对象字段相同
    box-shadow inset
    swiper实现滑动到某页锁住不让滑动
    vuex上手文章参考
    js基础补漏
    react学习文章
    C# .Net String字符串效率提高-字符串拼接
    JS,Jquery获取各种屏幕的宽度和高度
    highcharts的dataLabels如何去处阴影
    .net C# 抽奖,中奖
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/3965387.html
Copyright © 2011-2022 走看看