一.SQLite定义
简而言之,SQLite就是一款轻量级数据库,其占用资源非常低,支持SQL语法,遵循数据库的ACID 事务,SQLite数据库存储是Android系统提供的轻量级数据存储的方式之一。
二.创建数据库和数据表的步骤
1.新建类继承SQLiteOpenHelper;
2.实现构造方法;
3.重写onCreate方法;
4.重写onUpgrade方法;
5.实例化SQLiteOpenHelper的子类对象-MyDataBaseHelper;
6.点击事件中调用getReadableDatabase方法或getWritableDatabase方法。
三.创建数据库和表格实例(附代码)
在布局文件中创建一个Button按钮
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/create_btn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="create database"/>
</LinearLayout>
新建类MyDataBaseHelper来继承SQLiteOpenHelper
public class MyDataBaseHelper extends SQLiteOpenHelper{//1.新建类继承SQLiteOpenHelper
private Context context;//上下文
//数据库中创建一张Student表
public static final String Student = "create table Student ("
+ "id integer primary key autoincrement," + "name text,"
+ "score real," + "age integer," + "gender text)";
//2.实现构造方法
public MyDataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
//int version-当前数据库的版本号,可用于对数据库进行升级操作
super(context, name, factory, version);
this.context = context;
}
//3.重写onCreate方法
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(Student);//执行建表语句,创建数据库
Toast.makeText(context,"Create succeeded",Toast.LENGTH_SHORT).show();
}
//4.重写onUpgrade方法
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
创建SQLiteDataBase对象
public class DataBaseActivity extends AppCompatActivity {
private Button btn,insertBtn,queryBtn;
private EditText nameEdit;
private MyDataBaseHelper helper;
private SQLiteDatabase db;
private static final String TABLE_NAME = "Student";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_base);
bindID();
//5.实例化SQLiteOpenHelper的子类对象-MyDataBaseHelper
helper = new MyDataBaseHelper(this, "dbName", null, 1);//dbName数据库名
//6.点击事件中调用getReadableDatabase方法或getWritableDatabase方法
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建或打开一个现有的数据库(数据库存在直接打开,否则创建一个新数据库)
db = helper.getWritableDatabase();//获取到了 SQLiteDatabase 对象
}
});
}
private void bindID() {
btn = findViewById(R.id.create_btn);
insertBtn = findViewById(R.id.insert_btn);
nameEdit = findViewById(R.id.name_edit);
queryBtn = findViewById(R.id.query_btn);
}
}
实现增查数据的实例代码,新建类继承SQLiteOpenHelper部分上面已代码显示,这里不再赘述,下面看DataBaseActivity.java代码
public class DataBaseActivity extends AppCompatActivity {
private Button btn,insertBtn,queryBtn;
private EditText nameEdit;
private MyDataBaseHelper helper;
private SQLiteDatabase db;
private static final String TABLE_NAME = "Student";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_base);
bindID();
//5.实例化SQLiteOpenHelper的子类对象-MyDataBaseHelper
helper = new MyDataBaseHelper(this, "dbName", null, 1);//dbName数据库名
//6.点击事件中调用getReadableDatabase方法或getWritableDatabase方法
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建或打开一个现有的数据库(数据库存在直接打开,否则创建一个新数据库)
db = helper.getWritableDatabase();//获取到了 SQLiteDatabase 对象
}
});
insertBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db = helper.getWritableDatabase();//获取到了 SQLiteDatabase 对象
//使用 ContentValues 来对要添加的数据进行组装
ContentValues values = new ContentValues();
// 开始组装第一条数据
String nameEd = nameEdit.getText().toString();
values.put("name",nameEd);
// 插入第一条数据
db.insert(TABLE_NAME,null,values);
values.clear();
Toast.makeText(DataBaseActivity.this,"插入"+nameEd+"成功",Toast.LENGTH_SHORT).show();
//退出程序后,关闭数据库资源
db.close();
}
});
queryBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db = helper.getWritableDatabase();
//创建游标
Cursor cursor = db.query(TABLE_NAME,new String[]{"name"},null,null,null,null,null);
//游标置顶
cursor.moveToFirst();
//遍历
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.e("NAME",name);
}while(cursor.moveToNext());
}
});
}
private void bindID() {
btn = findViewById(R.id.create_btn);
insertBtn = findViewById(R.id.insert_btn);
nameEdit = findViewById(R.id.name_edit);
queryBtn = findViewById(R.id.query_btn);
}
}
对于上一段代码,这里添加了增查数据的点击事件部分代码
1.增加数据
insertBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db = helper.getWritableDatabase();//获取到了 SQLiteDatabase 对象
//使用 ContentValues 来对要添加的数据进行组装
ContentValues values = new ContentValues();
// 开始组装第一条数据
String nameEd = nameEdit.getText().toString();
values.put("name",nameEd);
// 插入第一条数据
db.insert(TABLE_NAME,null,values);
values.clear();
Toast.makeText(DataBaseActivity.this,"插入"+nameEd+"成功",Toast.LENGTH_SHORT).show();
//退出程序后,关闭数据库资源
db.close();
}
});
2.查询数据
queryBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db = helper.getWritableDatabase();
//创建游标
Cursor cursor = db.query(TABLE_NAME,new String[]{"name"},null,null,null,null,null);
//游标置顶
cursor.moveToFirst();
//遍历
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.e("NAME",name);
}while(cursor.moveToNext());
}
});
3.删除数据
delectBtn.setOnClickListener(new View.OnClickListener() {//删除数据
@Override
public void onClick(View view) {
db = helper.getWritableDatabase();
db.delete(TABLE_NAME,"name=?",new String[]{nameEdit.getText().toString()});
// Toast.makeText(DataBaseActivity.this,"删除"+nameEdit.getText().toString()+"成功",Toast.LENGTH_SHORT).show();
// Log.e("DELECT","删除"+"*****************************"+nameEdit.getText().toString());
}
});
4.修改数据
modifyBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(nameEdit.getText().toString(), modifyEdit.getText().toString());
//第二个参数是修改的字段及修改的值(已经存放到ContentValues中)
//第三个参数是WHERE语句
//第四个参数是WHERE语句中占位符的填充值
//如果第三四个参数为null,那就将每条记录都改掉
db.update(TABLE_NAME, values, null, null);
Log.e("MODIFY","修改"+"*****************************"+values);
}
});