Android基础(二): SQLite数据库的查询、增加、修改

一. 简介

SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:

  1. 轻量级
    使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸相当小。
  2. 独立性
    SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
  3. 隔离性
    SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
  4. 跨平台
    SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
  5. 多语言接口
    SQLite 数据库支持多语言编程接口。
  6. 安全性
    SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。

二. 建表操作

1. 自定义数据库子类(继承 SQLiteOpenHelper 类)

public class MessageSQLiteOpenHelper extends SQLiteOpenHelper {
    private static Integer Version = 1;
    public MessageSQLiteOpenHelper(Context context, String name) {
        super(context, name,null, Version);
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        System.out.println("创建数据库和表");
        String sql = "create table user(id INTEGER primary key autoincrement,name varchar(200),introduce varchar(200),sex int,birth datatime,area varchar(200))";
        sqLiteDatabase.execSQL(sql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        System.out.println("更新数据库版本为:" + i1);
    }
}

2. 创建数据库:
MessageSQLiteOpenHelper.java:

private MessageSQLiteOpenHelper dbHelper1;
private SQLiteDatabase sqLiteDatabase1;
// 步骤1:创建DatabaseHelper对象
// 注:此时还未创建数据库
dbHelper1 = new MessageSQLiteOpenHelper(getApplicationContext(), "test_carson");
// 步骤2:真正创建 / 打开数据库
sqLiteDatabase1 = dbHelper1.getWritableDatabase();
  • 注:当需操作数据库时,都必须先创建数据库对象 & 创建 / 打开数据库。
    对于操作 = “增、删、改(更新)”,需获得 可"读 / 写"的权限:getWritableDatabase()
    对于操作 = “查询”,需获得 可"读 "的权限getReadableDatabase()

3 操作数据库(查询、增加、修改)

实例:编辑个人信息

MessageActivity.java:

//全局查询

//初始化默认打开页面是没有数据的

private boolean hasRecord = false;

protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_message);

        System.out.println("查询数据");

//显示第一条数据 

        String id = "1";

        Cursor cursor = sqLiteDatabase1.query("user", new String[]{"id",

                "name", "introduce"}, "id = ?", new String[]{id}, null, null, null);

        String userId = null;

        String name = null;

        String introduce = null;

        //      select * from User where id = ?, name = ?

        //      String[]{"1", "hhh"}

        if (cursor.moveToNext()) {

            userId = cursor.getString(cursor.getColumnIndex("id"));

            name = cursor.getString(cursor.getColumnIndex("name"));

            introduce = cursor.getString(cursor.getColumnIndex("introduce"));

//如果有数据,则查询显示出来 

            hasRecord = true;

            Log.d("yagao", "userId:" + userId + "name:" + name + "introduce:" + introduce);

            cursor.close();

        }

        tv_et_username.setText(name);

        tv_et_introduce.setText(introduce);  
}

@Override

    public void onClick(View view) {

        switch (view.getId()) {

            case [R.id](http://R.id).tv_username:

                LayoutInflater li_username = LayoutInflater.from(context);

                View usernameView = li_username.inflate(R.layout.username_alertdaialog, null);

                AlertDialog.Builder usernameBuilder = new AlertDialog.Builder(context);

                usernameBuilder.setView(usernameView);

                final EditText usernameInput = usernameView.findViewById(R.id.ad_information);

                usernameInput.setHint("请输入您想要修改的昵称");

                usernameBuilder

                        .setCancelable(false)

                        .setPositiveButton("确定",

                                new DialogInterface.OnClickListener() {

                                    public void onClick(DialogInterface dialog, int id) {

                                        String content = usernameInput.getText().toString();

                                        if (!hasRecord) {

                                            // insert

                                            tv_et_username.setText(content);

                                            System.out.println("插入数据");

                                            ContentValues values1 = new ContentValues();

                                            values1.put("name", content);

                                            sqLiteDatabase1.insert("user", null, values1);

                                        } else {

                                            // update

                                            System.out.println("修改数据");

                                            tv_et_username.setText(content);

                                            ContentValues values2 = new ContentValues();

                                            values2.put("name", content);

                                            // 调用update方法修改数据库

                                            sqLiteDatabase1.update("user", values2, "id=?", new String[]{"1"});

                                        }

                                        // 发射事件

                                        UpdateUserEvent.sendEvent(new UpdateUserEvent(content));

                                    }

                                })

                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog, int id) {

                                dialog.cancel();

                            }

                        });

                AlertDialog alertUsername = usernameBuilder.create();

                alertUsername.show();

                break;  

    }

@Override

protected void onDestroy() {

    super.onDestroy();

    sqLiteDatabase1.close();

} 

UpdateUserEvent.java:


public class UpdateUserEvent {

    public String userName;

    public UpdateUserEvent(String userName) {

        this.userName = userName;

    }

    public static void sendEvent(UpdateUserEvent event) {

        EventBus.getDefault().post(event);

    }

}

UserinfoActivity.java:

@Subscribe(threadMode = ThreadMode.MAIN)

public void onUpdateUser(UpdateUserEvent event) {

    tv_name.setText(event.userName);

}

@Override

protected void onDestroy() {

    super.onDestroy();

    EventBus.getDefault().unregister(this);

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容