Android编程开发中SQLite使用介绍
android开发中sqlite使用介绍
插入数据
方法public long insert(string table, string nullcolumnhack, contentvalues values);
参数string table:表名 参数string nullcolumnhack:当values为null或是空的时候,表中值设为null的字段。 参数contentvalues values:要插入的值。例:
private void insert(sqlitedatabase db){ //实例化常量值 contentvalues cvalue = new contentvalues(); cvalue.put("product_id","001"); cvalue.put("product_name","t恤衫"); cvalue.put("product_type","衣服"); cvalue.put("sale_price",1000); cvalue.put("purcgase_price",500); cvalue.put("regist_date","2009-09-20"); //调用insert()方法插入数据 db.insert("product",null,cvalue); }
分析:
public long insert(string table, string nullcolumnhack, contentvalues values) { try { return insertwithonconflict(table, nullcolumnhack, values, conflict_none); } catch (sqlexception e) { log.e(tag, "error inserting " + values, e); return -1; } } public long insertwithonconflict(string table, string nullcolumnhack, contentvalues initialvalues, int conflictalgorithm) { acquirereference(); try { stringbuilder sql = new stringbuilder(); sql.append("insert"); sql.append(conflict_values[conflictalgorithm]); sql.append(" into "); sql.append(table); sql.append('('); object[] bindargs = null; int size = (initialvalues != null && !initialvalues.isempty()) ? initialvalues.size() : 0; if (size > 0) { bindargs = new object[size]; int i = 0; for (string colname : initialvalues.keyset()) { sql.append((i > 0) ? "," : ""); sql.append(colname); bindargs[i++] = initialvalues.get(colname); } sql.append(')'); sql.append(" values ("); for (i = 0; i < size; i++) { sql.append((i > 0) ? ",?" : "?"); } } else { // 当initialvalues为null或为空时 sql.append(nullcolumnhack + ") values (null"); } sql.append(')'); sqlitestatement statement = new sqlitestatement(this, sql.tostring(), bindargs); try { return statement.executeinsert(); } finally { statement.close(); } } finally { releasereference(); } }
从上面的源码中分析知道,最后执行的还是sql语句。所以是根据参数拼接成sql语句。
注:从上面的源码知道,在使用insert()方法时,需要注意一点。就是参数string nullcolumnhack和contentvalues values不能同时为null,且nullcolumnhack一定要是表中的not null 约束的字段名。在同时为null时,拼接出来的sql语句不是正常的sql语句。
删除数据
方法public int delete(string table, string whereclause, string[] whereargs);
参数string table:表名 参数string whereclause:删除的条件的属性名 参数string[] whereargs:删除的条件的属性的值数组,这个数组中的值会安顺序代替whereclause中的”?”符号。例:
private void delete(sqlitedatabase db) { //删除条件 string whereclause = "product_id=?"; string[] whereargs = {"002"}; //执行删除 db.delete("product",whereclause,whereargs); }
源码分析:
public int delete(string table, string whereclause, string[] whereargs) { acquirereference(); try { sqlitestatement statement = new sqlitestatement(this, "delete from " + table + (!textutils.isempty(whereclause) ? " where " + whereclause : ""), whereargs); try { return statement.executeupdatedelete(); } finally { statement.close(); } } finally { releasereference(); } }
从源码知道,删除语句最终也是拼接成sql语句。当whereclause不为null 或”“ 时,sql语句就会加上where whereclause 子句。最后string[] whereargs数组中的值会代替whereclause中的”?“符号拼接成最终的sql语句。
更新数据
方法public int update(string table, contentvalues values, string whereclause, string[] whereargs);
参数string table:表名 参数contentvalues values:更新的值放在这个values里面 参数string whereclause:删除的条件的属性名 参数string[] whereargs:删除的条件的属性的值数组,这个数组中的值会安顺序代替whereclause中的”?”符号。例:
private void update(sqlitedatabase db) { //实例化内容值 contentvalues values = new contentvalues(); //在values中添加内容 values.put("product_type","工具"); //修改条件 string whereclause = "product_id=?"; //修改添加参数 string[] whereargs={string.valuesof("007")}; //修改 db.update("product",values,whereclause,whereargs); }
源码:
public int update(string table, contentvalues values, string whereclause, string[] whereargs) { return updatewithonconflict(table, values, whereclause, whereargs, conflict_none); } public int updatewithonconflict(string table, contentvalues values, string whereclause, string[] whereargs, int conflictalgorithm) { if (values == null || values.isempty()) { throw new illegalargumentexception("empty values"); } acquirereference(); try { stringbuilder sql = new stringbuilder(120); sql.append("update "); sql.append(conflict_values[conflictalgorithm]); sql.append(table); sql.append(" set "); // move all bind args to one array int setvaluessize = values.size(); int bindargssize = (whereargs == null) ? setvaluessize : (setvaluessize + whereargs.length); object[] bindargs = new object[bindargssize]; int i = 0; for (string colname : values.keyset()) { sql.append((i > 0) ? "," : ""); sql.append(colname); bindargs[i++] = values.get(colname); sql.append("=?"); } if (whereargs != null) { for (i = setvaluessize; i < bindargssize; i++) { bindargs[i] = whereargs[i - setvaluessize]; } } if (!textutils.isempty(whereclause)) { sql.append(" where "); sql.append(whereclause); } sqlitestatement statement = new sqlitestatement(this, sql.tostring(), bindargs); try { return statement.executeupdatedelete(); } finally { statement.close(); } } finally { releasereference(); } }
从源码中看出values不能为null或空,否则会抛异常。
查询数据
方法public cursor query(string table, string[] columns, string selection,
string[] selectionargs, string groupby, string having,
string orderby) ;
例:
cursor cursor = db.query(tablename , new string[]{"product_id" , "product_type" , "product_name" , "sale_price" , "purcgase_price" , "regist_date" } , "sale_price >=?" , new string[]{"100"} ,"product_type" , null , "product_id asc");
cursor类介绍
getcount()获得总的数据项数 isfirst()判断是否第一条记录 islast()判断是否最后一条记录 movetofirst()移动到第一条记录 movetolast()移动到最后一条记录 move(int offset)移动到指定记录 movetonext()移动到下一条记录 movetoprevious()移动到上一条记录 getcolumnindexorthrow(string columnname)根据列名称获得列索引 getint(int columnindex)获得指定列索引的int类型值 getstring(int columnindex)获得指定列缩影的string类型值。上一篇: C#获取鼠标在listview右键点击单元格的内容方法
下一篇: cropper.js裁剪图片并上传
推荐阅读
-
JQuery编程开发中extend使用方法介绍
-
Android中SQLite 使用方法详解
-
Android开发中button按钮的使用及动态添加组件方法示例
-
Android多线程处理机制中的Handler使用介绍
-
android开发中ListView与Adapter使用要点介绍
-
JavaScript编程开发中如何使用jquery实现放大镜效果
-
Android开发中TextView各种常见使用方法小结
-
iOS的UI开发中Modal的使用与主流应用UI结构介绍
-
JavaScript编程开发中jquery.cookie.js使用指南
-
Android Studio 通过一个登录功能介绍SQLite数据库的使用