Android学习笔记_数据库(SQLite)(二)

一、修改数据库的表结构(更新数据库版本)。

  1、在PersonSQliteOpenHelper类中,PersonSQliteOpenHelper的构造方法中需要传入4个参数,最后一个便是数据库版本。当版本数值变化(只能是增加)时就会调用PersonSQliteOpenHelper类中的onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法。

  2、在onUpgrade方法中采用执行SQL语句来更改数据库的表结构。采用SQLiteDatabase对象的execSQL(sql)方法修改数据库的表结构,参数sql是需要执行的SQL语句。

  3、表中增加一列的SQL语句是:ALTER TABLE person ADD account varchar(20).

表结构增加一列的代码如下:

1 public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
2         db.execSQL("alter table person add account varchar(20)");
3     }

二、数据库的事务  

  1、为何需要事务?

    保证多个操作同时成功或者同时失败时采用事务。比如银行转账:A转帐给B,需要保证A账户中金额减少,同时还需要保证B账户中金额增加。一下介绍以模拟转账为例。因此需要修改数据库的表结构

  2、建立事务。

    ①.new出来一个PersonSQliteOpenHelper对象helper;

    ②.通过PersonSQliteOpenHelper对象的getWritableDatabase()方法获得一个可写的SQLiteDatabase(数据库)对象db;

    ③.通过SQLiteDatabase(数据库)对象的beginTransaction()方法开启一个事务(事务的具体写法在该方法的说明文档中已经有实例了:采用一个try...finally的逻辑编写事务);

    ④.在try中编写需要执行的逻辑,并在try代码块的最后执行SQLiteDatabase(数据库)对象的setTransactionSuccessful()的方法,它是标记数据库事务执行成功,如果没有这个代码则默认是执行失败的,数据会回滚。

    ⑤.在finally代码块中执行SQLiteDatabase(数据库)对象的endTransaction()方法,并close数据库对象。另外也可以在try代码块后面增加一个catch代码块,以捕获各类异常。

数据库事务代码如下:

 1 public void testTransecation() throws Exception {
 2         PersonSQliteOpenHelper helper = new PersonSQliteOpenHelper(getContext());
 3         SQLiteDatabase db = helper.getWritableDatabase();
 4         db.beginTransaction();
 5         try {
 6             db.execSQL("update person set account = account - 1000 where name = ?",
 7                     new Object[] { "zhangsan" });
 8
 9             db.execSQL(    "update person set account = account + 1000 where name = ?",
10                     new Object[] { "wangwu" });
11             db.setTransactionSuccessful();
12         }catch(Exception e) {
13
14         }
15         finally {
16             db.endTransaction();
17             db.close();
18         }
19     }

时间: 2024-12-26 12:50:08

Android学习笔记_数据库(SQLite)(二)的相关文章

Android学习笔记_数据库(SQLite)

一.使用SQLiteOpenHelper帮助类创建或管理(更新)数据库. 为了便于项目管理,创建SQLiteOpenHelper帮助类的子类是最好是新建一个class. 1.创建一个子类继承SQLiteOpenHelper帮助类,实现onCreate(SQLiteDatabase db).onUpgrade(SQLiteDatabase db,int oldVersion,int new Version)两个方法,并添加一个构造方法 PersonSQliteOpenHelper(...){...

十五、Android学习笔记_授权过程

1.需要申请App Key和App Secret.不同的开发平台有不同的接入方式,可以参考文档,然后将这两个值放进去. 2.通过OAuth类实现认证,它会自动跳转到认证界面,进行授权,成功之后需要处理回调接口. 3.在第二步调用回调接口时,它会返回用户的基本信息,比如用户id.此时需要将用户id信息保存起来,为后面登录做准备.回调接口的写法就为myapp://AuthorizeActivity,其中scheme全部为小写字母. <activity android:name="com.wei

九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

学习笔记_数据库1

搭建数据库服务器 1.管网下载数据库服务器包MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar 2.解包 tar -xvf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar 3.升级安装  rpm -Uvh  MySQL-*.rpm 4.检查已安装的MYSQL包  rpm -qa | grep -i  mysql 5.查看初始密码 cat /root/.mysql_secret TB7n0sZn 6.登陆数据库 mysql -hloc

Android学习笔记-TextView(文本框)(二)

文章参考自:http://www.runoob.com/w3cnote/android-tutorial-textview.html 2.4 使用autoLink属性识别链接类型 当文字中出现了URL,E-Mail,电话号码,地图的时候,我们可以通过设置autoLink属性:当我们点击 文字中对应部分的文字,即可跳转至某默认APP,比如一串号码,点击后跳转至拨号界面! all就是全部都包含,自动识别协议头~ 在Java代码中可以调用setAutoLinkMask(Linkify.ALL); 这个

Android学习笔记之View(二)

View加载的流程之测量:rootView调用measure()→onMeasure(): measure()是final方法,表明Android不想让开发者去修改measure的框架,开发者可以onMeasure方法. 来看一下measure的代码: public?final?void?measure(int?widthMeasureSpec,?int?heightMeasureSpec)?{?? ????if?((mPrivateFlags?&?FORCE_LAYOUT)?==?FORCE_

Objective-C学习笔记_内存管理(二)

一.属性的内部实现原理 assign的属性内部实现 setter方法: // setter方法 @property (nonatomic, assign) NSString *name; - (void)setName:(NSString *)name { _name = name; } getter方法: // getter方法 - (NSString *)name { return _name; } 观察下面代码会出现什么问题? NSString *name = [[NSString all

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri

Android学习笔记(四二):SQLite、ListView、ContextMenu

继续上一个例子,结合ListView中对SQLite进行操作. 通过CursorAdapter在ListView中的数据呈现 在上一个例子中,我们可以对SQLite中的数据库进行增删改查,将数据读到游标Cursor中,然后一一读出.在Android中可以通过CursorAdapter直接将数据映射到ListView中,如下处理: public class Chapter22Test1 extends ListActivity{    private SQLiteDatabase  db = nu