Android课程---关于数据存储的学习(3)之数据库和事务
DataActivity3.java
package com.hanqi.test5; import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast; public class DataActivity3 extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data3);
} //继承SQLiteOpenHelper
class DBHelper extends SQLiteOpenHelper
{
//构造方法
//name 数据库名
//version 所创建的数据库版本号
public DBHelper(String name,int version) {
//调用父类的构造方法,写在第一行
super(DataActivity3.this, name, null, version);
} //在创建数据库时调用
//回调方法
//什么时候创建数据库:连接数据库的时候,如果数据文件不存在
//只调用一次
@Override
public void onCreate(SQLiteDatabase db) { //1.创建数据库的语句
String creatTable = "create table user(_id integer PRIMARY KEY AUTOINCREMENT NOT NULL,name varchar,age int)";
db.execSQL(creatTable); //2.初始化数据
ContentValues cv = new ContentValues(); cv.put("name","房崇延"); cv.put("age", 20); //如果不成功返回-1
//第一个参数是表名
//第二个参数是空列的默认值
//第三个参数是字段和值的集合(key/value)
long l = db.insert("user",null,cv); Toast.makeText(DataActivity3.this, "id = "+ l, Toast.LENGTH_LONG).show(); } //升级数据库
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//执行升级
//update user set age = 27 where _id = ?
//? 是占位符,然后给占位符赋值
ContentValues cv = new ContentValues(); cv.put("age", 27); int rowcount = db.update("user",cv,"_id=? and name=?",new String[]{"1","TOM"});
Log.e("TAG","rowcount = "+rowcount); }
} //创建数据库
public void dt1_OnClick(View v)
{
//创建
DBHelper dh = new DBHelper("test.db",1);
//获取数据库实例
SQLiteDatabase sd = dh.getWritableDatabase();
sd.close();
}
//升级数据库
public void dt2_OnClick(View v)
{
//创建 实现工具类
DBHelper dh = new DBHelper("test.db",2); //连接数据库 获取数据库实例
SQLiteDatabase sd = dh.getWritableDatabase();
sd.close();
}
//插入数据
public void dt3_OnClick(View v)
{
//创建
DBHelper dh = new DBHelper("test.db",2);
//获取数据库实例
SQLiteDatabase sd = dh.getWritableDatabase(); ContentValues cv = new ContentValues();
cv.put("name","房子");
cv.put("age", "18"); long _id = sd.insert("user", null, cv); Log.e("TAG","_id = " + _id); sd.close();
}
//修改数据
public void dt5_OnClick(View v)
{
//创建
DBHelper dh = new DBHelper("test.db",2);
//获取数据库实例
SQLiteDatabase sd = dh.getWritableDatabase(); ContentValues cv = new ContentValues();
cv.put("name","房子1"); int count = sd.update("user", cv, "_id >=3", null); Log.e("TAG", "updatecount = " + count); sd.close();
}
//修改数据2
public void dt7_OnClick(View v)
{
//创建
DBHelper dh = new DBHelper("test.db",2);
//获取数据库实例
SQLiteDatabase sd = dh.getWritableDatabase(); //没有工具类时可以用下面这个方法 但是很繁琐
// 连接
//sd = SQLiteDatabase.openOrCreateDatabase("test.db",null);
//判断是否建表了,是否升级了 不如工具类好用 try {
//1.开启事务
sd.beginTransaction(); ContentValues cv = new ContentValues();
cv.put("age", "50"); int count = sd.update("user", cv, "_id =2", null); //抛出异常
boolean b = true;
if (b) {
throw new RuntimeException("出现异常了");
} count += sd.update("user", cv, "_id =3", null); Log.e("TAG", "updatecount = " + count); //2.设置事务执行成功
sd.setTransactionSuccessful();
//提交
}
catch (Exception e)
{
//回滚
e.printStackTrace(); Toast.makeText(DataActivity3.this, e.getMessage(), Toast.LENGTH_SHORT).show();
} //一定会被执行的代码
finally { //3.结束事务,1)提交 2)回滚
sd.endTransaction(); sd.close();
}
}
//删除数据
public void dt6_OnClick(View v)
{
//创建
DBHelper dh = new DBHelper("test.db",2);
//获取数据库实例
SQLiteDatabase sd = dh.getWritableDatabase(); ContentValues cv = new ContentValues(); int count = sd.delete("user","_id =4",null); Log.e("TAG", "deletecount = " + count); sd.execSQL("delete from user where _id =3"); sd.close();
}
//查询数据
public void dt4_OnClick(View v)
{
//创建
DBHelper dh = new DBHelper("test.db",2);
//获取数据库实例
SQLiteDatabase sd = dh.getWritableDatabase();
//全表查询
Cursor cursor = sd.query("user", null, null, null, null, null, null); //Cursor 一开始会定位在第一条数据的上方
//移动游标到数据的上面,提取数据后,再继续移动 while (cursor.moveToNext())
{
//cursor.getInt(0);
long _id = cursor.getLong(cursor.getColumnIndex("_id"));
// 不知道具体列时,可以用这个相对麻烦的方法 String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(2); Log.e("TAG", "_id = " + _id + "name =" + name + "age = " + age); }
cursor.close(); sd.close();
}
}
activity_data3.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hanqi.test5.DataActivity3"
android:orientation="vertical"> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"
android:onClick="dt1_OnClick"
android:id="@+id/dt_1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="升级数据库"
android:onClick="dt2_OnClick"
android:id="@+id/dt_2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="增加数据"
android:onClick="dt3_OnClick"
android:id="@+id/dt_3"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询数据"
android:onClick="dt4_OnClick"
android:id="@+id/dt_4"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改数据"
android:onClick="dt5_OnClick"
android:id="@+id/dt_5"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除数据"
android:onClick="dt6_OnClick"
android:id="@+id/dt_6"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="事务操作"
android:onClick="dt7_OnClick"
android:id="@+id/dt_7"/> </LinearLayout>
效果图:

Android课程---关于数据存储的学习(3)之数据库和事务的更多相关文章
- Android课程---关于数据存储的学习(2)
手机外部存储的学习 activity_data2.xml <?xml version="1.0" encoding="utf-8"?> <Li ...
- Android课程---关于数据存储的学习
activity_data1.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- Android课程---关于数据存储的学习之总结
- Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用
前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...
- Android Learning:数据存储方案归纳与总结
前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...
- Android中的数据存储(二):文件存储 2017-05-25 08:16 35人阅读 评论(0) 收藏
文件存储 这是本人(菜鸟)学习android数据存储时接触的有关文件存储的知识以及本人自己写的简单地demo,为初学者学习和使用文件存储提供一些帮助.. 如果有需要查看SharedPreference ...
- 67.Android中的数据存储总结
转载:http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=2650117688&idx=1&sn=d6c73f9f04d0 ...
- Android中的数据存储
Android中的数据存储主要分为三种基本方法: 1.利用shared preferences存储一些轻量级的键值对数据. 2.传统文件系统. 3.利用SQLite的数据库管理系统. 对SharedP ...
- Android五种数据存储方式
android 五种数据存储 :SharePreferences.SQLite.Contert Provider.File.网络存储 Android系统提供了四种存储数据方式.分别为:SharePre ...
随机推荐
- 用 javassist 来修改 class 文件
import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; public class Test { ...
- ATM+购物车
本次代码的实现用到了模块间的互相调用,这对于初学者而言有些难度,不过这也是我们必须要掌握的,在以后的大程序中,多个模块会让我们的代码看起来简洁明了,易排错 (本次代码只是简单的实现的基本的功能,其代码 ...
- popupwindow的基本使用以及基本动画效果
1.创建一个popupwindow view的布局文件自己写一个就好了,这里就不说了 View view= LayoutInflater.from(context).inflate(R.layout. ...
- git 创建分支 并 提交到远程分支
git branch(分支命令的使用http://hbiao68.iteye.com/blog/2055493 0.可以通过git branch -r 命令查看远端库的分支情况 1,从已有的分支创建新 ...
- CSS布局经典—圣杯布局与双飞翼布局
在我之前的博客网页整体布局完全剖析-剖完你不进来看一下么?中总结单列.两列.三列固宽与变宽布局,我还以为已经囊括了所有经典的网页布局方法了呢,当然除了CSS3的弹性盒模型没有涉及到,现在看来确实是自己 ...
- Python-类的属性
类的属性,可以称为成员变量 类的方法,可以称为成员函数 对象的创建 - 创建对象的过程称之为实例化:当一个对象被创建后,包含三个方面的特性:对象句柄.属性和方法. - 句柄用于区分不同的对象(实例 ...
- EventLoop和EventLoopGroup
Netty框架的主要线程就是I/O线程,线程模型设计的好坏,决定了系统的吞吐量.并发性和安全性等架构质量属性.Netty的线程模型被精心地设计,既提升了框架的并发性能,又能在很大程度避免锁,局部实现了 ...
- C#接口等基础知识
- 树链剖分+线段树 HDOJ 5029 Relief grain(分配粮食)
题目链接 题意: 分粮食我就当成涂色了.有n个点的一棵树,在a到b的路上都涂上c颜色,颜色可重复叠加,问最后每一个点的最大颜色数量的颜色类型. 思路: 首先这题的输出是每一个点最后的情况,考虑离线做法 ...
- 搜索技巧<转>
平时工作,搜索引擎是少不了的,作为程序员,当然首推 Google.这里简单介绍下几个 Google 搜索的小技巧,方便别人也方便自己查阅. ps:以下所有操作,均可以在 「谷歌搜索首页 -> 设 ...