SQLiteOpenHelper
作用:
用於管理數據庫鏈接
兩個方法:
- (1) onCreate
- (2) onUpgrade
SQLiteDatabase
作用:
相當於數據庫/鏈接
分類:
ReadableDatabase、WritableDatabase
如何獲取:
通過SQLiteOpenHeIper獲取
execSQL
作用:
執行數據庫語句
使用:
編寫完整的SQL語句,然後執行
缺陷:
- (1) 對於SQL語句要求高
- (2) 沒有返回值
insert、delete、update、 query
insert:
- (1) insert參數的意義
- (2) ContentValues
- (3) insert翻譯成SQL語句
delete:
- (1) delete參數的意義
- (2) delete翻譯成SQL語句
update:
- (1) update參數的意義
- (2) update翻譯成SQL語句
query:
- (1) query參數的意義
- (2) query翻譯成SQL語句
保存密碼進階版
- SharedPreferences自動保存密碼的缺點
- SQLite數據版本自動保存密碼
SD卡文件操作
SD卡文件操作的實質:
使用流進行文件讀寫
權限申請:
- (1) MOUNT_UNMOUNT_FILESYSTEMS:創建和刪除文件權限
- (2) WRITE_EXTERNAL_STORAGE
- (3) READ_EXTERNAL_STORAGE
幾個重要的方法:
- (1) getExternaIStorageState:獲取SD卡狀態
- (2) getRootDirectory:獲取Android Root路徑
- (3) getDataDirectory:獲取data目錄
- (4) getDownloadCacheDirectory:獲取緩存目錄
使用流完成讀寫操作
ContentProvider
什麼是ContentProvider?
用於提供外部應用訪問本應用數據庫的接口
自定義ContentProvider
什麼是ContentResolver?
用於訪問其他應用程序數據的類
使用ContentResolver
代碼部分:
part1:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showSQLite"
android:text="演示SQLite"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="50dp"
android:onClick="showRememberPwd"
android:text="演示記住密碼功能"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>
效果圖:
activity_db_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DBDemoActivity">
<EditText
android:id="@+id/username"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="100dp"
android:ems="10"
android:hint="請輸入用戶名"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/password"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="30dp"
android:ems="10"
android:hint="請輸入密碼"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="@+id/username"
app:layout_constraintStart_toStartOf="@+id/username"
app:layout_constraintTop_toBottomOf="@+id/username" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:onClick="writeData"
android:text="寫入"
app:layout_constraintStart_toStartOf="@+id/password"
app:layout_constraintTop_toBottomOf="@+id/password" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="readData"
android:text="讀取"
app:layout_constraintEnd_toEndOf="@+id/password"
app:layout_constraintTop_toTopOf="@+id/button2" />
</androidx.constraintlayout.widget.ConstraintLayout>
效果圖:
UserDBHelper.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class UserDBHelper extends SQLiteOpenHelper {
//數據庫版本號
private static final int VERSION = 1;
//數據庫的名稱
public static final String DB_NAME = "demo";
/**
* 簡化後的DBHelper
* @param context
*/
public UserDBHelper(@Nullable Context context) {
super(context, DB_NAME, null, VERSION);
}
/**
* 構造方法
* @param context 上下文
* @param name 數據庫的名字
* @param factory 遊標的創建方式,沒有特殊要求,傳null
* @param version 創建時數據庫的版本號,版本號只能往上升,不能往下降
*/
public UserDBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 第一次初始化數據庫時自動回調的函數,通常在這裏會做一些數據庫表的創建等
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
//創建初始化的數據表
String sql = "create table if not exists t_user(id integer primary key autoincrement, username varchar not null, password varchar not null)";
db.execSQL(sql);
}
/**
* 在數據庫版本更新的時候自動回調的函數,通常在這裏做一些更新數據庫表的操作
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
User.java
public class User {
private int id;
private String username;
private String password;
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
user_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/userId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<Button
android:id="@+id/deleteButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="刪除" />
<Button
android:id="@+id/editButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="編輯" />
</LinearLayout>
效果圖:
activity_user_list.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".UserListActivity">
<ListView
android:id="@+id/userList"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
效果圖:
activity_user_edit.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".UserEditActivity">
<EditText
android:id="@+id/username"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="100dp"
android:ems="10"
android:hint="請輸入用戶名"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/password"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="30dp"
android:ems="10"
android:hint="請輸入密碼"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="@+id/username"
app:layout_constraintStart_toStartOf="@+id/username"
app:layout_constraintTop_toBottomOf="@+id/username" />
<Button
android:id="@+id/saveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="保存"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/password" />
</androidx.constraintlayout.widget.ConstraintLayout>
效果圖:
UserEditActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class UserEditActivity extends AppCompatActivity {
private EditText username;
private EditText password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_edit);
username = findViewById(R.id.username);
password = findViewById(R.id.password);
Intent intent = getIntent();
String usernameString = intent.getStringExtra("username");
String passwordString = intent.getStringExtra("password");
final int id = intent.getIntExtra("id", 0);
username.setText(usernameString);
password.setText(passwordString);
findViewById(R.id.saveButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 保存數據
UserDBHelper userDBHelper = new UserDBHelper(UserEditActivity.this);
SQLiteDatabase database = userDBHelper.getWritableDatabase();
/*
* String table->表名
* ContentValues values->更新的字段
* String whereClause->where後面的條件
* String[] whereArgs->where後面的條件的參數
* */
ContentValues contentValues = new ContentValues();
contentValues.put("username", username.getText().toString());
contentValues.put("password", password.getText().toString());
database.update("t_user", contentValues, "id=?", new String[]{""+id});
finish();
}
});
}
}
UserAdapter.java
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class UserAdapter extends BaseAdapter {
private List<User> data;
private Context context;
private LayoutInflater inflater;
public UserAdapter(List<User> data, Context context) {
this.data = data;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.user_item, null);
viewHolder = new ViewHolder();
viewHolder.userId = convertView.findViewById(R.id.userId);
viewHolder.username = convertView.findViewById(R.id.username);
viewHolder.password = convertView.findViewById(R.id.password);
viewHolder.button = convertView.findViewById(R.id.deleteButton);
viewHolder.editButton = convertView.findViewById(R.id.editButton);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final User user = data.get(position);
viewHolder.userId.setText(user.getId()+"");
viewHolder.username.setText(user.getUsername());
viewHolder.password.setText(user.getPassword());
//點擊編輯按鈕,跳轉編輯界面
viewHolder.editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, UserEditActivity.class);
intent.putExtra("id", user.getId());
intent.putExtra("username", user.getUsername());
intent.putExtra("password", user.getPassword());
context.startActivity(intent);
}
});
//給按鈕綁定點擊事件,用於刪除信息
viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserDBHelper userDBHelper = new UserDBHelper(context);
SQLiteDatabase database = userDBHelper.getWritableDatabase();
/*
* String table->表名
* String whereClause->where後面的條件,例如:delete from t_user where id=1,whereClause就是id=?
* String[] whereArgs->where語句的參數,例如:delete from t_user where id=1,whereArgs就是id=1的1
* */
/*
* 數組的創建:
* 1.String[] demo = new String[10];
* 2.String[] demo = {"xx","xx"};
* 3.String[] demo = new String[]{"xx","xx"};
* */
String id = user.getId()+"";
database.delete("t_user","id=?", new String[]{id});
Toast.makeText(context, "刪除成功", Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
class ViewHolder{
public TextView userId;
public TextView username;
public TextView password;
public Button button;
public Button editButton;
}
}
UserListActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class UserListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_list);
// 初始化數據
UserDBHelper userDBHelper = new UserDBHelper(this);
SQLiteDatabase database = userDBHelper.getReadableDatabase();
Cursor cursor = database.query("t_user",null,null,null,null,null,null);
List<User> userList = new ArrayList<>();
while(cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String username = cursor.getString(cursor.getColumnIndex("username"));
String password = cursor.getString(cursor.getColumnIndex("password"));
User user = new User(id,username,password);
userList.add(user);
}
// 初始化ListView
ListView listView = findViewById(R.id.userList);
UserAdapter userAdapter = new UserAdapter(userList, this);
listView.setAdapter(userAdapter);
}
}
DBDemoActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class DBDemoActivity extends AppCompatActivity {
//用戶名
private EditText username;
//密碼
private EditText password;
//數據庫Helper
private UserDBHelper userDBHelper;
private static final String TAG = "DBDemoActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_db_demo);
//初始化數據
this.username = findViewById(R.id.username);
this.password = findViewById(R.id.password);
this.userDBHelper = new UserDBHelper(this);
}
/**
* 寫入數據
* @param view
*/
public void writeData(View view){
//向t_user中寫數據:1.創建一個t_user,2.執行SQL
// userDBHelper.getReadableDatabase(); //獲取讀數據庫的鏈接,在磁盤滿的情況下,不會報錯,只不過只能讀取數據
// userDBHelper.getWritableDatabase(); //獲取寫數據庫的鏈接,在磁盤滿的情況下,獲取該鏈接會報錯
//獲取SQLiteDatabase
SQLiteDatabase sqLiteDatabase = userDBHelper.getWritableDatabase(); //第一次調用的時候,若沒有數據庫,則會創建數據庫
String username = this.username.getText().toString().trim();
String password = this.password.getText().toString().trim();
/*
* execSQL沒有返回值,對於SQL語句掌握的比較好的話,可以直接手寫SQL來執行
* insert有返回值,簡化SQL語句的編寫
* */
// String sql = "INSERT INTO t_user (username, PASSWORD) VALUES ('"+username+"','"+password+"')";
// sqLiteDatabase.execSQL(sql);
/*
* String table -> 要插入的數據庫表
* String nullColumnHack -> 可以爲空的字段名
* ContentValues values -> 插入的數據,key:value,username:"張三"
* */
ContentValues contentValues = new ContentValues();
contentValues.put("username", username); //key:字段名,value:值
contentValues.put("password", password);
long row = sqLiteDatabase.insert("t_user", null, contentValues);
if (row != -1) {
Toast.makeText(this, "插入數據成功", Toast.LENGTH_SHORT).show();
}
sqLiteDatabase.close();
}
/**
* 讀取數據
* @param view
*/
public void readData(View view) {
//1.讀取數據
SQLiteDatabase database = userDBHelper.getReadableDatabase();
/*
* String table -> 表名
* String[] columns -> 字段名,若爲null,則查詢所有的,即*
* String selection -> where語句後面的條件,比如:SELECT * FROM t_user WHERE id = 1; selection就是id=?
* String[] selectionArgs -> where條件的值,比如:SELECT * FROM t_user WHERE id = 1; selectionArgs就是new String[]{"1"}
* String groupBy -> 分組,groupBy
* String having -> having
* String orderBy -> 排序
*
* */
// select * from t_user
Cursor cursor = database.query("t_user", null, null, null, null, null, null);
List<User> userList = new ArrayList<>();
while(cursor.moveToNext()) {
int index = cursor.getColumnIndex("id");
int id = cursor.getInt(index);
String username = cursor.getString(cursor.getColumnIndex("username"));
String password = cursor.getString(cursor.getColumnIndex("password"));
User user = new User(id, username, password);
userList.add(user);
}
//2.跳轉界面展示
Intent intent = new Intent(this, UserListActivity.class);
// intent.putExtra("userList", userList);
startActivity(intent);
}
}
效果圖:
part2:
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 用於演示SQLites數據庫的使用
* @param view
*/
public void showSQLite(View view){
Intent intent = new Intent(this, DBDemoActivity.class);
startActivity(intent);
}
/**
* 用於演示記住密碼功能
* @param view
*/
public void showRememberPwd(View view) {
Intent intent = new Intent(this, RememberPwdActivity.class);
startActivity(intent);
}
}
activity_remember_pwd.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RememberPwdActivity">
<EditText
android:id="@+id/et_username"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="100dp"
android:ems="10"
android:hint="請輸入用戶名"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_password"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="30dp"
android:ems="10"
android:hint="請輸入密碼"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="@+id/et_username"
app:layout_constraintStart_toStartOf="@+id/et_username"
app:layout_constraintTop_toBottomOf="@+id/et_username" />
<CheckBox
android:id="@+id/cb_remember"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="記住密碼"
app:layout_constraintStart_toStartOf="@+id/et_password"
app:layout_constraintTop_toBottomOf="@+id/et_password" />
<Button
android:id="@+id/loginButton"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginTop="100dp"
android:text="登錄"
app:layout_constraintEnd_toEndOf="@+id/et_password"
app:layout_constraintStart_toStartOf="@+id/et_password"
app:layout_constraintTop_toBottomOf="@+id/et_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
效果圖:
RememberPwdActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
public class RememberPwdActivity extends AppCompatActivity {
private EditText et_username;
private EditText et_password;
private CheckBox cb_remember;
private UserDBHelper userDBHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_remember_pwd);
et_username = findViewById(R.id.et_username);
et_password = findViewById(R.id.et_password);
cb_remember = findViewById(R.id.cb_remember);
userDBHelper = new UserDBHelper(this);
//聚焦事件
et_password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
String username = et_username.getText().toString().trim();
//查詢數據庫
SQLiteDatabase database = userDBHelper.getReadableDatabase();
Cursor cursor = database.query("t_user", null, "username=?", new String[]{username}, null,null,null);
User user = null;
while(cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("username"));
String pwd = cursor.getString(cursor.getColumnIndex("password"));
user = new User(id, name, pwd);
}
if (user != null) {
//記住密碼的用戶,進行密碼填充
et_password.setText(user.getPassword());
//勾選checkbox
cb_remember.setChecked(true);
} else {
et_password.setText("");
cb_remember.setChecked(false);
}
//關閉數據庫連接
database.close();
}
}
});
//登錄
findViewById(R.id.loginButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//前提是登錄成功了
if (cb_remember.isChecked()) {
String username = et_username.getText().toString().trim();
//查詢數據庫
SQLiteDatabase database = userDBHelper.getReadableDatabase();
Cursor cursor = database.query("t_user", null, "username=?", new String[]{username}, null,null,null);
User user = null;
while(cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("username"));
String pwd = cursor.getString(cursor.getColumnIndex("password"));
user = new User(id, name, pwd);
}
//以前就存在,做更新操作
if(user != null) {
ContentValues contentValues = new ContentValues();
contentValues.put("password", et_password.getText().toString().trim());
database.update("t_user",contentValues, "username=?", new String[]{username});
} else {
//以前不存在,插入操作
ContentValues contentValues = new ContentValues();
contentValues.put("username", username);
contentValues.put("password", et_password.getText().toString().trim());
database.insert("t_user", null, contentValues);
}
database.close();
}
}
});
}
/*
* 1.輸入用戶名,點擊輸入密碼->查詢數據庫,查看是否記住了密碼,若記住,則填充密碼
* 2.輸入用戶名,點擊輸入密碼->查詢數據庫,查看是否記住了密碼,若沒記住,不做操作
* 3.輸入用戶名、密碼,勾選記住密碼點擊登錄->登錄成功,向數據庫中存儲密碼
* */
}
效果圖: