利用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"});   //从网上复制的例子,表不一样或者
String[] args = {String.valueOf("c")};
  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的使用(一)相关推荐

  1. android中的ContentProvider实现数据共享

    为了在应用程序之间交换数据,android中提供了ContentProvider,ContentProvider是不同应用程序之间进行数据交换的标准API.当一个应用程序需要把自己的数据暴露给其他程序 ...

  2. Android中SQLite的使用

    在Android开发中,需要频繁的用户数据库操作,在Android中本地数据库经常使用SQLite3来进行数据的存储.首先看看百度百科是怎么定义SQLite的: SQLite,是一款轻型的数据库,是遵 ...

  3. Android中使用ContentProvider进行跨进程方法调用

    原文同一时候发表在我的博客 点我进入还能看到很多其它 需求背景 近期接到这样一个需求,须要和别的 App 进行联动交互,比方下载器 App 和桌面 App 进行联动.桌面的 App 能直接显示下载器 ...

  4. Android中SQLite应用详解(转)

    上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.i ...

  5. Android中SQLite应用详解

    http://blog.csdn.net/liuhe688/article/details/6715983/ 现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎 ...

  6. Android中SQLite数据库查看及导入导出

    Android中可以采用SQLite数据库来存储数据,可是Google却没有直接给我们提供相关工具来管理数据库里的数据. 如果不能直接通过工具来查看,那我们就把数据库从手机/模拟器里面拷贝出来用工具查 ...

  7. android中Sqlite数据库存储

    1.activity_sql.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  8. android数据库isnull,Android中SQLite数据库知识点总结

    SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...

  9. 从源码看ANDROID中SQLITE是怎么通过CURSORWINDOW读DB的

    更多内容在这里查看  https://ahangchen.gitbooks.io/windy-afternoon/content/ 执行QUERY 执行SQLiteDatabase类中query系列函 ...

  10. [原创,转载请注明来源]android中sqlite数据库的中文数据的插入(insert)和查询(select)

    写这个东西写的我万分痛苦,因为这么个小问题整整折磨了我两天多的时间, 大把的青春啊,就这么浪费了, 这些或许对其他人有用,我再花半小时写出来,或许你就可以避免跟我一样,少走两天的弯路. 首先说查询吧: ...

最新文章

  1. scikit-learn朴素贝叶斯各种用法总结真正讲明白的,为作者建平点赞
  2. .NET DLR 上的IronScheme 语言互操作IronScheme控制台输入中文的问题
  3. 英特尔展示体育行业与大数据技术应用
  4. 排序---对二维数组的排序
  5. 一个注解搞懂 Sentinel,@SentinelResource总结
  6. WebUserControl归纳
  7. Openssl的证书格式转换
  8. bootstrap 两个轮播图冲突_为什么使用bootstrap在一个页面同时做两个轮播效果时,只有第一个有效??...
  9. python热键+鼠标键盘控制
  10. ubuntu adduser
  11. Ubuntu 12.04安装及配置vsftp步骤
  12. sb3转换exe_SB转exe或swf(sb3toSB2.rar
  13. 体育硕士代码_研究生专业代码是什么
  14. matlab点扩散函数代码,点扩散函数(Point Spread Function)
  15. 金融行业用户画像最佳实践
  16. 来给罗永浩和王自如打个分
  17. 【历史上的今天】8 月 10 日:“龙芯”点亮操作系统;谷歌宣布拆分;计算机先驱诞生日
  18. GPU中实现反距离加权插值(IDW)
  19. 如何获取最新的EI期刊杂志目录
  20. 32位ARM®Cortex®-M0+内核单片机 XL32F003系列MCU

热门文章

  1. python列表操作符_Python中list()列表操作符的案例分享
  2. hyperledger fabric 节点数限制 最大
  3. 区块链 链上脚本、智能合约和Dapp的关系区别
  4. Hyperledger Fabric Composer安装blockchain explorer
  5. oracle自定义排序规则_Excel的排序方法,你会几种?
  6. jq校验输入框值变化时_用jq把span的值实时改变input的val值
  7. java基础总结06-常用api类-api概述及jdk常用分类
  8. php 面向对象编程(class)之从入门到崩溃 高级篇
  9. MySql存储过程语法及事例
  10. [Errno 256] No more mirrors to try.