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);

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容