【Android】数据存储-SQLite

SQLite特点:

轻量级
独立
隔离
跨平台
多语言接口
安全性(多进程可以同时读取,但同一时间只能有一个进程在写入数据)

创建数据库和表,以及数据库的增删改查操作

DatabaseHelper.java

package com.dj.aboutactivity.database;

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

import androidx.annotation.Nullable;

public class DatabaseHelper extends SQLiteOpenHelper {
    
    
    public static final String USER_TABLE_NAME = "user";
    public static final String USERNAME = "username";
    public static final String AGE = "age";
    public static final String DATABASE_NAME = "test.db";
    public static final int VERSION = 1;


    public DatabaseHelper(@Nullable Context context) {
    
    
        super(context, DATABASE_NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    
    
        db.execSQL("create table " + USER_TABLE_NAME + "(" + USERNAME + " varchar(20) not null, " + AGE + " varchar(10) not null);");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
    
        // TODO on database upgrade operation

    }
}

创建一个activity:
DatabaseButtonActivity.java

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.dj.aboutactivity.database.DatabaseHelper;

public class DatabaseButtonActivity extends AppCompatActivity {
    
    

    SQLiteDatabase mSqLiteDatabase;

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

        DatabaseHelper databaseHelper = new DatabaseHelper(this);
        mSqLiteDatabase = databaseHelper.getWritableDatabase();

        // Insert
        findViewById(R.id.database_add_button).setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    

                // IO操作,建议后台操作

                // 拼装成contentValues
                ContentValues contentValues = new ContentValues();
                contentValues.put(DatabaseHelper.USERNAME, "miamia");
                contentValues.put(DatabaseHelper.AGE,"13");

                // 判断插入是否成功
                long row =  mSqLiteDatabase.insert(DatabaseHelper.USER_TABLE_NAME, null, contentValues);
                Log.i("djtest", "onClick: row="+row);
                if(row != -1){
    
    
                    Toast.makeText(DatabaseButtonActivity.this, "插入成功!", Toast.LENGTH_SHORT).show();
                }

                // query
                Cursor cursor = mSqLiteDatabase.query(DatabaseHelper.USER_TABLE_NAME, null, null, null, null, null, null);
                if(cursor.moveToFirst()){
    
    
                    int count = cursor.getCount();
                    for (int i = 0; i < count; i++) {
    
    
                        String userName = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.USERNAME));
                        String age = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.AGE));
                        Log.i("djtest",i + " : " + userName + " | " + age + ".");
                    }
                }
            }
        });

        findViewById(R.id.database_delete_button).setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                // delete
                String whereClauseString = "username=?";
                String[] whereArgs = {
    
    "miamia"};
                mSqLiteDatabase.delete(DatabaseHelper.USER_TABLE_NAME, whereClauseString, whereArgs);
            }
        });

        findViewById(R.id.database_update_button).setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                // update
                // 当字段username=miamia时,将age更新为18
                ContentValues contentValues = new ContentValues();
                contentValues.put(DatabaseHelper.AGE, "18");
                String whereClauseString = "username=?";
                String[] whereArgs = {
    
    "miamia"};
                mSqLiteDatabase.update(DatabaseHelper.USER_TABLE_NAME, contentValues, whereClauseString, whereArgs);
            }
        });

        findViewById(R.id.database_transactions_button).setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                mSqLiteDatabase.beginTransaction();//开始事务,此时数据库会被锁定
                try {
    
    
                    // 做你的操作
                    for (int i = 0; i < 1000; i++) {
    
    
                        mSqLiteDatabase.execSQL("insert into user(username, age) values ('miamia', '5岁')");
                    }
                    mSqLiteDatabase.setTransactionSuccessful();//设置事务已经成功,否则自动回滚不提交
                } catch (Exception e) {
    
    
                    e.printStackTrace();
                } finally {
    
    
                    mSqLiteDatabase.endTransaction();//提交并关闭事务
                }
            }
        });
    }
}

xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/database_add_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ADD" />

    <Button
        android:id="@+id/database_delete_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="DELETE" />

    <Button
        android:id="@+id/database_update_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="UPDATE" />
    <Button
        android:id="@+id/database_transactions_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="利用事务添加1000条数据" />
</LinearLayout>

使用Android Debug Database查看数据库和表信息

参考链接:https://juejin.im/post/6844903472479879182

先在 module 的 build.gradle 里面添加:

debugCompile 'com.amitshekhar.android:debug-db:1.0.0'

复制代码让手机和电脑处于一个局域网下,当项目跑起来的时候,在 logcat 里面会打印出这么一行:
D/DebugDB: Open http://XXX.XXX.X.XXX:8080 in your browser复制代码把地址复制到浏览器,就会看到一个这样的界面:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_30885821/article/details/108905584
今日推荐