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复制代码把地址复制到浏览器,就会看到一个这样的界面: