Android之数据库操作

安卓数据库帮助类

/*** 数据库帮助类,用于管理数据库* @author Administrator**/
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {private String tag="PersonSQLiteOpenHelper";public PersonSQLiteOpenHelper(Context context) {//数据库名,数据库版本号super(context, "zj.db", null, 2);// TODO Auto-generated constructor stub}/*** 数据库第一次创建时调用此方法*/@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stub//操作数据库String sql="create table person(_id integer primary key,name varchar(20),age integer);";db.execSQL(sql);}/*** 更新数据库的内容*/@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubif(oldVersion==1&&newVersion==2){Log.i(tag, "数据库更新了");//在表中添加一个余额列db.execSQL("alter table person add balance interger;");}else if(oldVersion==2&&newVersion==3){//其他操作}}}

其中onCreate只在第一次创建是调用,OnUpergrade在数据库版本号升级,如要修改数据库,为数据库增加一列,或删除一列的情况下使用

数据库操作

打开数据库

private PersonSQLiteOpenHelper mOpenHelper;//数据库帮助类public PersonDao(Context context){mOpenHelper = new PersonSQLiteOpenHelper(context);}

由mOpenHelper得到数据库

SQLiteDatabase db= mOpenHelper.getWritableDatabase();

此时可设置版本号,便会根据版本号调用OnUpgrate

         db.getVersion();db.setVersion(2);

对数据库增删改查有两种方式

插入数据 ,直接用SQL语句

public void insert(Person person){SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){//执行添加的操作db.execSQL("insert into person(name, age) values(?, ?);",new Object[]{person.getName(),person.getAge()});db.close();}}

插入数据方法二

public void insert(Person person){SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){ContentValues values=new ContentValues();values.put("name", person.getName());values.put("age", person.getAge());//执行添加的操作long id=db.insert("person", null, values);Log.i(tag, "id:"+id);db.close();}}

第一种方法删除与更新

public void delete(int id){SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){db.execSQL("delete from person where _id = ?;",new Integer[]{id});//执行添加的操作db.close();}}public void update(int id,String name){SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){db.execSQL("update person set name = ? where id = ?;",new Object[]{name,id});//执行添加的操作db.close();}}

第二种方法删除与更新

public void delete(int id){SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){//执行添加的操作String whereClause=" _id = ?";String []whereArgs={id+""};int count=db.delete("person", whereClause,whereArgs );Log.i(tag, "count="+count+"行");db.close();}}public void update(int id,String name){SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){//执行添加的操作ContentValues values=new ContentValues();values.put("name", name);int count=db.update("person", values, "_id=?", new String[]{id+""});Log.i(tag, "修改了count="+count+"行");db.close();}}

第一种方法查询一项与查询所有

public List<Person> queryAll(){SQLiteDatabase db= mOpenHelper.getReadableDatabase();if(db.isOpen()){Cursor cursor= db.rawQuery("select * from person;", null);if(cursor!=null&&cursor.getCount()>0){List<Person> personList=new ArrayList<Person>();int id;String name;int age;while(cursor.moveToNext()){id=cursor.getInt(0);name=cursor.getString(1);age=cursor.getInt(2);personList.add(new Person(id, name, age));}db.close();return personList;}db.close();}return null;}public Person queryItem(int id){SQLiteDatabase db= mOpenHelper.getReadableDatabase();if(db.isOpen()){Cursor cursor= db.rawQuery("select * from person where id= ?;", new String []{id+""});if(cursor!=null&&cursor.moveToFirst()){int id1=cursor.getInt(0);String name=cursor.getString(1);int age=cursor.getInt(2);db.close();return new Person(id1,name,age);}db.close();}return null;}

第二种方法查询数据库

public List<Person> queryAll(){SQLiteDatabase db= mOpenHelper.getReadableDatabase();if(db.isOpen()){String [] columns={"_id","name","age"};String selection=null;String[] selectionArgs=null;String groupBy=null;String having=null;String orderBy=null;Cursor cursor=db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);int id;String name;int age;if(cursor!=null&&cursor.getCount()>0){List<Person> personList=new ArrayList<Person>();while(cursor.moveToNext()){//向下移一位id=cursor.getInt(0);name=cursor.getString(1);age=cursor.getInt(2);personList.add(new Person(id,name,age));}db.close();return personList;}db.close();}return null;}public Person queryItem(int id){SQLiteDatabase db= mOpenHelper.getReadableDatabase();if(db.isOpen()){String [] columns={"_id","name","age"};String selection="_id=?";String[] selectionArgs={id+""};String groupBy=null;String having=null;String orderBy=null;Cursor cursor=db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);int _id;String name;int age;if(cursor!=null&&cursor.moveToFirst()){_id=cursor.getInt(0);name=cursor.getString(1);age=cursor.getInt(2);db.close();return new Person(_id,name,age);}db.close();}return null;}

数据库的事务,防止多线程并发操作

public void testTransaction(){PersonSQLiteOpenHelper openHelper=new PersonSQLiteOpenHelper(getContext());SQLiteDatabase db= openHelper.getWritableDatabase();if(db.isOpen()){try{//开户事务db.beginTransaction();//执行业务逻辑db.execSQL("update person set balance =balance -1000 where name='zhangsan';");//ATM机损坏//int result=10/0;db.execSQL("update person set balance =balance +1000 where name='lisi';");//标记事务成功db.setTransactionSuccessful();}finally{//停止事务db.endTransaction();}db.close();}}public void testTransationInsert(){PersonSQLiteOpenHelper openHelper=new PersonSQLiteOpenHelper(getContext());SQLiteDatabase db= openHelper.getWritableDatabase();if(db.isOpen()){//记录当前时间long start=System.currentTimeMillis();//开始添加数据try{db.beginTransaction();for(int i=0;i<10000;i++){db.execSQL("insert into person(name, age, balance) values('wang" + i + "', " + (10 + i) + ", " + (10000 + i) + ")");            }db.setTransactionSuccessful();}finally{db.endTransaction();}//记住结束时间,计算耗时long end=System.currentTimeMillis();long diff=end-start;Log.i(tag, "耗时:"+diff+"ms");db.close();}}

Android数据库基本操作完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 11丨产品销售分析 II【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

用互联网大脑模型分析滴滴的战略意图和战术失误

作者&#xff1a;刘锋 互联网进化论作者&#xff0c;计算机博士滴滴出行与美国的Uber&#xff0c;本质上都是基于互联网的智能打车软件&#xff0c;让任何拥有家用汽车的司机都可以与出租车司机一样&#xff0c;服务于打车用户。 在滴滴&#xff0c;Uber出世之前的出租车行业…

Android数据存储之sharedpreferences与Content Provider

android中对数据操作包含有&#xff1a; file, sqlite3, Preferences, ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据&#xff0c;程序不能通过这三种方法去操作别的应用内的数据 其中sqlite3已经在上一节中讲述了&#xff0c;本节主要包含shar…

vtk类之vtkImageReslice:基本算法,对体数据沿着轴进行切片

沿着轴方向切割体数据。 vtkImageReslice 是几何图形过滤器中的瑞士军刀。他可以排列&#xff0c;旋转&#xff0c;翻转&#xff0c;缩放&#xff0c;重新采样&#xff0c;变形, 还有随意再任何效率与图像质量组合下&#xff0c;渲染图像。简单的操作&#xff0c;像排列&#x…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 12丨游戏玩法分析 V【难度困难】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

仅需1/5成本:TPU是如何超越GPU,成为深度学习首选处理器的

作者&#xff1a;Kaz Sato 来源&#xff1a;Google Cloud、机器之心摘要&#xff1a;张量处理单元&#xff08;TPU&#xff09;是一种定制化的 ASIC 芯片&#xff0c;它由谷歌从头设计&#xff0c;并专门用于机器学习工作负载。TPU 为谷歌的主要产品提供了计算支持&#xff0c;…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 12丨销售分析 III【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

[唐胡璐]Excel技巧 - 使用Excel 2007完成多人协同录入工作

下面我们来介绍下Excel 2007的共享功能。 一、设置共享 启动Excel 2007&#xff0c;打开需要设置共享的工作薄文档&#xff0c;切换到“审阅”菜单选项卡中&#xff0c;单击“更改”组中的“共享工作薄”按钮&#xff0c;打开“共享工作薄”对话框&#xff0c;如下图所示。 …

Android之jni入门

jni即java native interface&#xff0c;使用jni我们可以在JAVA中调用C代码&#xff0c;提高了效率&#xff0c;可以复用代码&#xff0c;可以灵活的应用于各种场景 怎么使用JNI 安装软件 1.NDK 用于将C代码编译成so库 2.CygWin 在windows下模拟linux环境 3.CDT 在eclipse…

腾讯投资过 600 多家公司不惊奇,京东也有出手 260+ | 大公司投资并购盘点

来源&#xff1a;IT桔子A 股一片绿&#xff0c;这已经不是满屏绿色的第一天了&#xff0c;2018 年以来&#xff0c;A 股经历了起起落落落落落落……尤其在中美贸易战不断升级后&#xff0c;A 股的代表颜色就成了绿色&#xff0c;少数会有几家企业翻红&#xff0c;然而过不了几天…

埋点技术:“呵呵,你在网上的一举一动,都在我眼皮子底下”

&#x1f345; 作者主页&#xff1a;不吃西红柿 &#x1f345; 简介&#xff1a;CSDN博客专家 & 总榜前十&#x1f3c6;、HDZ核心组成员。欢迎点赞、收藏、评论 &#x1f345; 粉丝专属福利&#xff1a;知识体系、面试题库、技术互助、简历模板。文末公众号领取 1、什么是…

printf的格式控制的完整格式

printf的格式控制的完整格式 printf的格式控制的完整格式&#xff1a;% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明&#xff1a;①%&#xff1a;表示格式说明的起始符号&#xff0c;不可缺少。②-&#xff1a;有-表示左对齐输出&#xff0c;如省略表示右对…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 13丨每日新用户统计【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

美国斯坦福大学发布2025计划, 创立开环大学, 彻底颠覆全球高等教育

来源&#xff1a;钱塘号《斯坦福大学2025计划》在以设计思考理论著称的斯坦福大学设计学院牵头下正式启动&#xff0c;这次教育改革改变了以往自上而下的方式&#xff0c;代之以师生为主导。与其说《斯坦福大学2025计划》是一个方案&#xff0c;不如说它是一个对未来大学模式进…

Android之jni深入

小技巧&#xff1a;自动生成 java本地方法对应的c代码的方法名 javah 指令 全类名 java1.6版本 class C:\workspace\HelloWorldFromC2\bin\classes java1.7以上 src C:\workspace\HelloWorldFromC2\src 获得方法的签名的方法 javap -s 打印方法的签名 注意要cd到 C:\workspa…

HTML选择器

HTML选择器1、标签选择器直接将HTML元素中的标签作为选择器&#xff0c;可以是p、h1、d1、strong等HTML标签&#xff0c;在CSS中直接展现。2、ID选择器通常在编写页面的时候设定某些标签元素的ID,同一个HTML中ID不允许重复&#xff0c;例如&#xff0c;<div id"wrapper…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 13丨每位学生的最高成绩【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

语言处理想突破,三座大山必须过

来源&#xff1a;大数据文摘编译&#xff1a;李佳、汤圆、钱天培“我的飞机什么时候到&#xff1f;”把这个问题抛给智能机器人助手。几乎可以肯定&#xff0c;机器立马就懵逼了。“我”是谁&#xff1f;“飞机”是航班还是淘宝上订的模型玩具呢&#xff1f;“到”又是到哪呢&a…

利用github page搭建博客

为什么选择GitHub Pages&#xff1f; 很多人用 wordpress&#xff0c;你为什么要用 github pages 来搭建&#xff1f; 1、github pages有300M免费空间&#xff0c;资料自己管理&#xff0c;保存可靠&#xff1b; 2、学着用 github&#xff0c;享受 github 的便利&#xff0c…

C语言中printf(built: %s %s,__TIME__,__DATE__);方便调试

代码中加入printf("built: %s %s",__TIME__,__DATE__);这样就可以了;后面将显示最后编译的时间。 这样可以知道自己改的代码是否生效&#xff0c;是否编译进去。转载于:https://www.cnblogs.com/jisheng/archive/2013/01/15/2860706.html