Android 讲解:存储(2)

SQLite 是一个轻量级而又快速的数据库。

SQLite 创建

在Android 中可以继承SQLiteOpenHelper 类来操作SQLite 数据库。
在Android 中,创建的数据库都是在:/data/data/<packageName>/databases/<dataBaseName>

1. 继承SQLiteOpenHelper

继承SQLiteOpenHelper 类,重写一个构造函数,OnCreate 函数和OnUpgrade 函数。

DBhelper.java

package cn.met0.android.chapter4;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {

    String user = "create table user(id integer primary key,username text,password text)";
    String info = "create table info(id integer primary key,str text)";

    public DBHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(user);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch (newVersion) {
        case 2:
            db.execSQL(info);
            break;

        default:
            break;
        }
    }

}

DBHelper(Context, String, CursorFactory, int) 用来获取数据库操作对象,Context 为一个Activity对象、String数据库名称、CursorFactory 为null ,int 为版本号。

onCreate(SQLiteDatabase db) 当创建DBhelp对象时,如果传入的name(数据库名称)不存在时,则执行这个方法,通常为第一次初始化表结构。

onUpgrade(SQLiteDatabase , int , int ) 当创建DBhelp对象时,如果数据库已存在,并且传入的版本号不同,则会执行这个方法,通常用来更新表结构。

2. 开始创建


MainActivity.java

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DBHelper db = new DBHelper(this, "user.db", null, 1);
        SQLiteDatabase sql = db.getWritableDatabase();
        sql.execSQL("insert into user (id,username,password)  values (1,'admin','123456')");
    }

插入数据


插入数据除了使用sql 语句外,还可以有更简单的方式。

插入数据

        DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();

        ContentValues value = new ContentValues();
        value.put("id", 2);
        value.put("username", "tom");

        sql.insert("user", null, value);

ContentValues 对象是一个存储一条记录的对象
sql.insert("user", null, value);

ParamContext
“user”操作的表名
null默认为null
value插入的数据

更新数据


        DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();

        ContentValues value = new ContentValues();
        value.put("username", "jack");
        value.put("password", "abcdef");

        sql.update("user", value, "username = ?", new String[]{"tom"});

ContentValues 对象为要更新的内容

sql.update("user", value, "username = ?", new String[]{"tom"});

ParamContext
“user”操作的表名
value要更新成的内容
“username = ?”更新条件
new String[]{“tom”}更新条件参数

删除数据

        DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();


        sql.delete("user", "username = ?", new String[]{"tom"});

sql.delete("user", "username = ?", new String[]{"tom"});

ParamContext
“user”操作的表名
“username = ?”删除数据的条件
new String[]{“tom”}条件参数

查询数据


        DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();


        sql.query("user", null, null, null, null, null, null);

这里写图片描述

事务

    DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();

        ContentValues value = new ContentValues();
        value.put("username", "tom");
        value.put("password", "123456");


        try{
            sql.beginTransaction();
            sql.delete("user", "username = ?", new String[]{});
            sql.insert("user", null, value);
            sql.setTransactionSuccessful();
        }catch (Exception e){
            sql.endTransaction();
        }finally{
            sql.close();
        }

sql.beginTransaction(); 开启事务

sql.setTransactionSuccessful(); 提交事务

sql.endTransaction(); 回滚事务

注意

在重写OnCreate 方法时,不能写插入sql语句,否则将会创建不成功。
除非创建对象后,也执行插入语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值