Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Android--SQLite事务

$
0
0

这次我们来谈谈如何在 Android 中使用 SQLite 的事务,如果对 SQLite 事务不了解的朋友可以看看我的博客SQLite 高级语法介绍

有了解 SQLite 事务的朋友都知道事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。

事务使用,可以提供一个机制,防止在执行过程中出错而之前正确的sql有影响了数据库的情况出现。所以这对我们对数据库做批量操作是很有用的,如果我们不设置事务,每一条 SQL 语句的执行都会默认开启一个事务,这影响了我们的效率。

使用事务并不是很复杂:

beginTransaction() //开启事务
setTransactionSuccessful()  //设置提交事务
endTransaction()  //关闭事务

我们需要 MySqliteHelper 和 Constant 这两个类,用来创建数据库。

MySQLiteHelper.java:

public class MySqliteHelper extends SQLiteOpenHelper {

    public MySqliteHelper(Context context) {
        super(context, Constant.DATABASE_NAME, null, Constant.DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i("TAG", "-------onCreate--------");
        String sql = "create table " + Constant.TABLE_NAME + " (" +
                Constant._ID + " Integer primary key, " +
                Constant.NAME + " varchar(10)," +
                Constant.AGE + " Integer)";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.i("TAG", "-------onUpGrade-------");
    }

    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        Log.i("TAG", "-------onOpen-------");
    }
}

Constant.java:

public class Constant {
    public static final String DATABASE_NAME = "info.db"; //数据库名称
    public static final int DATABASE_VERSION = 1; //数据库版本
    public static final String TABLE_NAME = "person"; //表名
    public static final String _ID = "_id";
    public static final String NAME = "name";
    public static final String AGE = "age";
}

对这两个类不理解的可以看我的博客Android上SQLite的基本应用(一)

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    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.ht.sqlitetransation.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="批量插入"
        android:onClick="insertData"/>
</RelativeLayout>

这里就用一个 Button, 点击 Button 就批量添加数据。

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    private MySqliteHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        helper = new MySqliteHelper(this);
    }

    public void insertData(View view) {
        SQLiteDatabase db = helper.getWritableDatabase();
        //1.数据库显示开启事务
        db.beginTransaction();
        for (int i = 1; i <= 100; i++) {
            StringBuilder sqlBuilder = new StringBuilder();
            sqlBuilder.append("insert into ");
            sqlBuilder.append(Constant.TABLE_NAME);
            sqlBuilder.append(" values(");
            sqlBuilder.append(i);
            sqlBuilder.append(", '李四");
            sqlBuilder.append(i);
            sqlBuilder.append("', 18)");
            db.execSQL(sqlBuilder.toString());
        }
        //2.提交当前事务
        db.setTransactionSuccessful();
        //3.关闭事务
        db.endTransaction();
        db.close();
    }
}

事务的使用是既简单又方便的,如果我们要批量操作,希望大家都能使用事务来做。

结束语:本文仅用来学习记录,参考查阅。

作者:HardWorkingAnt 发表于2017/4/28 11:17:32 原文链接
阅读:33 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>