Android中SQLite,ContentProvider和ContentResolver的使用(一)
利用SQLiteOpenHelper来管理数据库的创建与更新
MyDBHelper dbhelper=new MyDBHelper(DemoActivity.this, "demo.dab3", 1) //创建并实例化SQLiteOpenHelper对象,数据库名为demo.db3,版本号为1;
public class MyDBHelper extends SQLiteOpenHelper {public MyDBHelper(Context context, String name, int version) {super(context, name, null, version);}@Overridepublic void onCreate(SQLiteDatabase db) { //在数据库第一次生产的时候会调用这个方法,一般我们在这个方法里边生产数据库表;实际情况中, //我们总是通过一个类继承SQLiteOpenHelper来使用SQLite数据库,那么什么时候会调用onCreate函 //数呢?当我们产生这个类的对象的时候是不会调用onCreate函数的,只有第一次通过这个对象调 //用getReadableDatabase或者getWritableDatabase函数时才会调用onCreate函数,而如果调用过一次 //这个对象的getReadableDatabase或者getWritableDatabase函数后系统将不会再调用onCreate函数。System.out.println("x");String CreateTableSql="create table Employee("+"_id integer primary key autoincrement,"+"no varchar,"+"name varchar,"+"sex varchar)";db.execSQL(CreateTableSql);}@Overridepublic void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { //当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删 //除数据库表,并建立新的数据库表,当然是否还需要做其他的操作,完全取决于应用程序的需求。} }
使用SQLiteDatabase对象来操作SQLite数据库,这时候会执行MyDBhelper类中的onCreate()方法,实现表的创建
SQLiteDatabase db = dbhelper.getReadableDatabase(); //打开数据库demo.db3,返回数据库对象,赋值给db,利用db来操作数据库;getWritableDatabase()也是一样的,只是当磁盘出现内存不够时不一样,writable打开数据库会出错,而readable只会以只读方式打开//SQLite对象不使用了,都要关闭,db.close(),可以在onDestroy()中实现。
当然了,对于熟悉SQL语法的程序员而言,直接使用db.execSQL()方法执行SQL语句就能完成数据的添加,删除,查询,更新等操作。对于不熟悉SQL语法的(比如我),SQLite专门提供了对应于添加,删除,查询,更新的操作方法,接下来一个一个的了解它们,
insert(String table, String nullColumnHack, ContentValues values): 用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法, key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。
ContentValues values = new ContentValues(); values.put("name", "工工"); values.put("age", 4); long rowid = db.insert(“Employee”, null, values);//返回新添记录的行号,与主键id无关.不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值为Null的记录。//如果第三个参数values 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。
delete(String table, String whereClause, String[] whereArgs): whereClause是可选的where语句,whereArgs是whereClause语句中表达式的?占位参数列表。
db.delete("person", "personid<?", new String[]{"2"}); //从网上复制的例子,表不一样或者
delete("user",
"username=?"
,args);
update(String table, ContentValues values, String whereClause, String[] whereArgs): 其实就是修改某一些数据。
ContentValues values = new ContentValues(); values.put(“name”, “工工”);//key为字段名,value为值 db.update("person", values, "personid=?", new String[]{"1"}); //把person表中personid=1的记录的name字段的值改为“工工“。
Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String grouBy, String having, String orderBy): columns表示想要显示的列,若为空则返回所有的列;selection是可选where语句,允许使用占位符?;selectionArgs是selection语句中表达式的?占位参数列表对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常;groupBy:相当于select语句group by关键字后面的部分;having:相当于select语句having关键字后面的部分;orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
String[] args = {String.valueOf("a")}; query("user",new String[] { "username","password" },"username=?", args,null,null,null, null);
Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String grouBy, String having, String orderBy, String limit): limit参数用于控制查询数据的最多记录数。
query()查询得到的数据记录是封装在Cursor对象中的,Cursor对象类似于JDBC的ResultSet记录集,通过移动光标指向记录的方式来获取数据,移动光标的方法如下:
moveToFirst():移动到光标第一行
moveToLast():移动到光标最后一行
moveToNext():移动光标到下一行
moveToPosition(int position): 移动光标到一个绝对的位置
moveToPrevious():移动光标到上一行
copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
在缓冲区中检索请求的列的文本,将将其存储
getColumnCount()
返回所有列的总数
getColumnIndex(String columnName)
返回指定列的索引(不过网上都说是名称),如果不存在返回-1
getColumnIndexOrThrow(String columnName)
从零开始返回指定列的索引(网上都说是名称),如果不存在将抛出IllegalArgumentException 异常。
getColumnName(int columnIndex)
从给定的索引返回列名
getColumnNames()
返回一个字符串数组的列名
getCount()
返回Cursor 中的行数
for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext()) //取出数据的一种方式;Cursor指向的是每一条数据 {int nameColumn = cur.getColumnIndex(People.NAME);int phoneColumn = cur.getColumnIndex(People.NUMBER);String name = cur.getString(nameColumn);String phoneNumber = cur.getString(phoneColumn); }
最后记得关闭数据库
dbhelper.close()
转载于:https://www.cnblogs.com/Magina-learning/p/7911032.html
Android中SQLite,ContentProvider和ContentResolver的使用(一)相关推荐
- android中的ContentProvider实现数据共享
为了在应用程序之间交换数据,android中提供了ContentProvider,ContentProvider是不同应用程序之间进行数据交换的标准API.当一个应用程序需要把自己的数据暴露给其他程序 ...
- Android中SQLite的使用
在Android开发中,需要频繁的用户数据库操作,在Android中本地数据库经常使用SQLite3来进行数据的存储.首先看看百度百科是怎么定义SQLite的: SQLite,是一款轻型的数据库,是遵 ...
- Android中使用ContentProvider进行跨进程方法调用
原文同一时候发表在我的博客 点我进入还能看到很多其它 需求背景 近期接到这样一个需求,须要和别的 App 进行联动交互,比方下载器 App 和桌面 App 进行联动.桌面的 App 能直接显示下载器 ...
- Android中SQLite应用详解(转)
上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.i ...
- Android中SQLite应用详解
http://blog.csdn.net/liuhe688/article/details/6715983/ 现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎 ...
- Android中SQLite数据库查看及导入导出
Android中可以采用SQLite数据库来存储数据,可是Google却没有直接给我们提供相关工具来管理数据库里的数据. 如果不能直接通过工具来查看,那我们就把数据库从手机/模拟器里面拷贝出来用工具查 ...
- android中Sqlite数据库存储
1.activity_sql.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- android数据库isnull,Android中SQLite数据库知识点总结
SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...
- 从源码看ANDROID中SQLITE是怎么通过CURSORWINDOW读DB的
更多内容在这里查看 https://ahangchen.gitbooks.io/windy-afternoon/content/ 执行QUERY 执行SQLiteDatabase类中query系列函 ...
- [原创,转载请注明来源]android中sqlite数据库的中文数据的插入(insert)和查询(select)
写这个东西写的我万分痛苦,因为这么个小问题整整折磨了我两天多的时间, 大把的青春啊,就这么浪费了, 这些或许对其他人有用,我再花半小时写出来,或许你就可以避免跟我一样,少走两天的弯路. 首先说查询吧: ...
最新文章
- scikit-learn朴素贝叶斯各种用法总结真正讲明白的,为作者建平点赞
- .NET DLR 上的IronScheme 语言互操作IronScheme控制台输入中文的问题
- 英特尔展示体育行业与大数据技术应用
- 排序---对二维数组的排序
- 一个注解搞懂 Sentinel,@SentinelResource总结
- WebUserControl归纳
- Openssl的证书格式转换
- bootstrap 两个轮播图冲突_为什么使用bootstrap在一个页面同时做两个轮播效果时,只有第一个有效??...
- python热键+鼠标键盘控制
- ubuntu adduser
- Ubuntu 12.04安装及配置vsftp步骤
- sb3转换exe_SB转exe或swf(sb3toSB2.rar
- 体育硕士代码_研究生专业代码是什么
- matlab点扩散函数代码,点扩散函数(Point Spread Function)
- 金融行业用户画像最佳实践
- 来给罗永浩和王自如打个分
- 【历史上的今天】8 月 10 日:“龙芯”点亮操作系统;谷歌宣布拆分;计算机先驱诞生日
- GPU中实现反距离加权插值(IDW)
- 如何获取最新的EI期刊杂志目录
- 32位ARM®Cortex®-M0+内核单片机 XL32F003系列MCU
热门文章
- python列表操作符_Python中list()列表操作符的案例分享
- hyperledger fabric 节点数限制 最大
- 区块链 链上脚本、智能合约和Dapp的关系区别
- Hyperledger Fabric Composer安装blockchain explorer
- oracle自定义排序规则_Excel的排序方法,你会几种?
- jq校验输入框值变化时_用jq把span的值实时改变input的val值
- java基础总结06-常用api类-api概述及jdk常用分类
- php 面向对象编程(class)之从入门到崩溃 高级篇
- MySql存储过程语法及事例
- [Errno 256] No more mirrors to try.