一. 简介
SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:
- 轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸相当小。 - 独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。 - 隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。 - 跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。 - 多语言接口
SQLite 数据库支持多语言编程接口。 - 安全性
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);
}