《老罗Android》学习之SQLite

《老罗Android》学习之SQLite,第1张

概述1、SQlite是什么? SQLite 是进程内的数据库引擎,不存在数据库的客户端和服务器,使用SQLite只需要带上它的一个动态库,就可以享用它的全部功能。 2、SQLiteOpenHelper的使用   我们要使用SQlite,首先要得到一个SQliteDatabase对象,那么怎么得到它呢? 首先,我们要得到一个SQliteOpenHelper对象,然后用这个SQliteOpenHelper

1、sqlite是什么?
sqlite 是进程内的数据库引擎,不存在数据库的客户端和服务器,使用sqlite只需要带上它的一个动态库,就可以享用它的全部功能。
2、sqliteOpenHelper的使用
我们要使用sqlite,首先要得到一个sqliteDatabase对象,那么怎么得到它呢?

首先,我们要得到一个sqliteOpenHelper对象,然后用这个sqliteOpenHelper对象的getReadableDatabase()或getWritableDatabase()方法获得可读或可写的数据库,从而得到一个sqliteDatebase对象。然后再用这个sqliteDatebase对象对数据库进行 *** 作就可以了。我们来看一下代码:

//DatabaseHelper作为一个访问sqlite的助手类,提供两个方面的功能,
//第一,getReadableDatabase(),getWritableDatabase()可以获得sqliteDatabse对象,通过该对象可以对数据库进行 *** 作
//第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的 *** 作

3.对sqlite进行 增、删、改、查 *** 作
采用MVC模式:即service:服务层; Dao:数据访问层; *** 作层。
1.PersonService2.java 定义接口
public interface PersonService2 {	public boolean addPerson(ContentValues values);		public boolean deletePerson(String whereClause,String[] whereArgs);		public boolean updatePerson(ContentValues values,String whereClause,String[] whereArgs);		public Map<String,String> vIEwPerson(String selection,String[] selectionArgs);		public List<Map<String,String>> ListPersonMaps(String selection,String[] selectionArgs);}
2.PersonDao2.java 实现方法
public class PersonDao2 implements PersonService2 {	private DbOpenHelper helper = null;	public PersonDao2(Context context) {		helper = new DbOpenHelper(context);	}	public boolean addPerson(ContentValues values) {		boolean flag = false;		sqliteDatabase database = null;		long ID = -1;		try {			database = helper.getWritableDatabase();			ID = database.insert("person",null,values);			flag = (ID != -1 ? true : false);		} catch (Exception e) {		} finally {			if (database != null) {				database.close();			}		}		return flag;	}	public boolean deletePerson(String whereClause,String[] whereArgs) {		boolean flag = false;		sqliteDatabase database = null;		int count = 0;		try {			database = helper.getWritableDatabase();			count = database.delete("person",whereClause,whereArgs);			flag = (count > 0 ? true : false);		} catch (Exception e) {		} finally {			if (database != null) {				database.close();			}		}		return flag;	}	public boolean updatePerson(ContentValues values,String[] whereArgs) {		boolean flag = false;		sqliteDatabase database = null;		int count = 0;// 影响数据库的行数		try {			database = helper.getWritableDatabase();			count = database.update("person",values,whereArgs);			flag = (count > 0 ? true : false);		} catch (Exception e) {		} finally {			if (database != null) {				database.close();			}		}		return flag;	}        //应用中通过ID查询,所以只得到单条记录,即cursor.movetoNext()就为null了。	public Map<String,String[] selectionArgs) {		// select 返回的列的名称(投影查询) from		sqliteDatabase database = null;		Cursor cursor = null;		Map<String,String> map = new HashMap<String,String>();		try {		database = helper.getReadableDatabase();		cursor = database.query(true,"person",selection,selectionArgs,null);		int cols_len = cursor.getColumnCount();		while (cursor.movetoNext()) {			for (int i = 0; i < cols_len; i++) {//循环,把这一行每一列的值都取出来				String cols_name = cursor.getColumnname(i);			String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));				if (cols_value == null) {					cols_value = "";				}				map.put(cols_name,cols_value);			}		}		} catch (Exception e) {			e.printstacktrace();		} finally {			if (database != null) {				database.close();			}		}		return map;	}	public List<Map<String,String[] selectionArgs) {		List<Map<String,String>> List = new ArrayList<Map<String,String>>();		sqliteDatabase database = null;		Cursor cursor = null;		try {		database = helper.getReadableDatabase();		cursor = database.query(false,null);		int cols_len = cursor.getColumnCount();		while (cursor.movetoNext()) {			Map<String,String>();			for (int i = 0; i < cols_len; i++) {				String cols_name = cursor.getColumnname(i);				String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));				if (cols_value == null) {					cols_value = "";				}				map.put(cols_name,cols_value);			}			List.add(map);		}		} catch (Exception e) {			e.printstacktrace();		} finally {			if (database != null) {				database.close();			}		}		return List;	}}

4. 应用层
老罗的视频中是用一个测试设备来测试,我们在真机上测试不采用这种方法,我在一个Actvity中实现对sqlite的 *** 作。源码如下:

public class MainActivity extends Activity {	private PersonDao personService = null;	private final static String TAG = "sqlite";	private ListVIEw ListVIEw;	private button button1,button2,button3,button4,button5;	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.activity_main);		personService = new PersonDao(this);		ListVIEw = (ListVIEw) this.findVIEwByID(R.ID.ListVIEw1);		/........找到button.........../		button1.setonClickListener(new OnClickListener() {			public voID onClick(VIEw v) {				addPerson(); //添加人员			}		});		button2.setonClickListener(new OnClickListener() {			public voID onClick(VIEw v) {			deletePerson(" ID = ? ",new String[] { "2" });//删除ID为2的记录			}		});		button3.setonClickListener(new OnClickListener() {			public voID onClick(VIEw v) {			updatePerson(" ID = ? ",new String[] { "3" });//更新人员			}		});		button4.setonClickListener(new OnClickListener() {			public voID onClick(VIEw v) {			vIEwPerson(" ID = ? ",new String[] { "3" });//通过ID,查看单条记录			}		});		button5.setonClickListener(new OnClickListener() {			public voID onClick(VIEw v) {			ListPerson(null,null);//不限制条件,就可查询全部记录			}		});	}	public voID addPerson() {		ContentValues values = new ContentValues();// 类似map的属性		values.put("name","杰克");		values.put("address","江西");		values.put("sex","男");		boolean flag = personService.addPerson(values);		Log.i(TAG,"addPerson--->>" + flag);	}	public voID deletePerson(String whereClause,String[] whereArgs) {		// delete from person where ID = ?		// 不包含 where关键字		boolean flag = personService.deletePerson(whereClause,whereArgs);		Log.i(TAG,"deletePerson--->>" + flag);	}	public voID updatePerson(String whereClause,String[] whereArgs) {		ContentValues values = new ContentValues();// 类似map的属性		values.put("name","纽约");		values.put("sex","女");		boolean flag = personService.updatePerson(values,"updatePerson--->>" + flag);	}	public voID vIEwPerson(String selection,String[] selectionArgs) {		Map<String,String> map = personService.vIEwPerson(selection,selectionArgs);		Log.i(TAG,"vIEwPerson--->>" + map.toString());	}	public voID ListPerson(String selection,String>> List = personService.ListPersonMaps(				selection,"ListPerson--->>" + List.toString());		query(List);	}	public voID query(List<Map<String,String>> List) {		// 需要显示多行,用SimpleAdapter.		SimpleAdapter adapter = new SimpleAdapter(this,List,R.layout.simple_List_item,new String[] { "name","address","sex" },new int[] { R.ID.textVIEw1,R.ID.textVIEw2,R.ID.textVIEw3 });		ListVIEw.setAdapter(adapter);	}}

person表中有4个字段:ID,name,address,sex. 在SimpleAdapter 的new String[]参数中写入这4个字段的某些值,就会在ListVIEw中显示相应的数据,这个SimpleAdapter 会自动为我们从List列表中找出这些数据,相当智能是吧,呵呵。

效果图:

总结

以上是内存溢出为你收集整理的《老罗Android》学习之SQLite全部内容,希望文章能够帮你解决《老罗Android》学习之SQLite所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1180137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存