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)之数据库和事务的更多相关文章

  1. Android课程---关于数据存储的学习(2)

    手机外部存储的学习 activity_data2.xml <?xml version="1.0" encoding="utf-8"?> <Li ...

  2. Android课程---关于数据存储的学习

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

  3. Android课程---关于数据存储的学习之总结

  4. Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用

    前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...

  5. Android Learning:数据存储方案归纳与总结

    前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...

  6. Android中的数据存储(二):文件存储 2017-05-25 08:16 35人阅读 评论(0) 收藏

    文件存储 这是本人(菜鸟)学习android数据存储时接触的有关文件存储的知识以及本人自己写的简单地demo,为初学者学习和使用文件存储提供一些帮助.. 如果有需要查看SharedPreference ...

  7. 67.Android中的数据存储总结

    转载:http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=2650117688&idx=1&sn=d6c73f9f04d0 ...

  8. Android中的数据存储

    Android中的数据存储主要分为三种基本方法: 1.利用shared preferences存储一些轻量级的键值对数据. 2.传统文件系统. 3.利用SQLite的数据库管理系统. 对SharedP ...

  9. Android五种数据存储方式

    android 五种数据存储 :SharePreferences.SQLite.Contert Provider.File.网络存储 Android系统提供了四种存储数据方式.分别为:SharePre ...

随机推荐

  1. mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap

    这个错误基本都是mapper.xml有重复生成的代码

  2. Lintcode 85. 在二叉查找树中插入节点

    -------------------------------------------- AC代码: /** * Definition of TreeNode: * public class Tree ...

  3. hdu 2222 Keywords Search

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 思路:裸AC自动机,直接贴代码做模板 #include<stdio.h> #includ ...

  4. CentOS 7.2安装docker-compose运行gitlib

    服务器已经安装好docker 启动: service start docker 安装docker-compose: 安装pip:sudo yum search pip  / sudo yum inst ...

  5. llvm-summary

    llvm 学习总结 Type define int类型 IntegerType::get(mod->getContext(), 32) long类型 IntegerType::get(mod-& ...

  6. 前端试题本(HTML+CSS篇)

    CS1. 下面关于IE.FF下面CSS的解释区别描述正确的有?(不定项)CS2请选出结构正确的选项CS3.下面哪些是HTML5 新增的表单元素?CS4在使用table表现数据时,有时候表现出来的会比自 ...

  7. ORACLE中常见SET指令

    1         SET TIMING ON 说明:显示SQL语句的运行时间.默认值为OFF. 在SQLPLUS中使用,时间精确到0.01秒.也就是10毫秒. 在PL/SQL DEVELOPER 中 ...

  8. python学习 3笔记

    merge dict def merge(defaults, override): r = {} for k, v in defaults.items(): if k in override: if ...

  9. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  10. twitter.common.concurrent deadline and defer

    此defer非golang中的defer https://tour.golang.org/flowcontrol/12 from twitter.common.concurrent import Ti ...