SQLite数据库存储
SQLite是Android系统内置的数据库;
SQLite是专为移动设备设计的一款轻量级数据库;
SQLite占用资源非常少,在嵌入式设备中,只需要几百K的内存;
SQLite支持标准的SQL语法,遵循数据库的ACID事务;
SQLite不需要安装,不需要用户名密码就可以使用。
以上就是SQLite的基本理解了
下面我们通过一个简单的例子来体验一下SQLite!
1.创建数据库
Android为我们提供了一个SQLiteOpenHelper帮助类,使用这个类我们就可以对数据库进行创建和升级。
首先我们新建DBHelper类继承自SQLiteOpenHelper,同时实现构造函数和SQLiteOpenHelper的两个抽象方法:onCreate()和onUpgrade(),然后分别在这两个方法中实现创建、升级数据库的逻辑。
代码如下:
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase arg0) {
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
}
然后,我们需要创建一个SQL语法的student数据库表,表中有id(主键)、姓名、年龄列。student表的建表语句如下:
create table student(
id integer primary key autoincrement not null,
name varchar(10),
age integer )
SQLite不像其他的数据库拥有众多繁杂的数据类型,它的数据类型很简单,integer表示整型,real表示浮点型,text表示文本类型,blob表示二进制类型。另外,上述建表语句中我们还使用了primary key将id设为主键,并用autoincrement关键字表示id列是自增长的。
然后,我们需要把建表语句定义成一个字符串常量,然后在onCreate()的方法中有调用了SQLiteDatabase的execSQL()方法去执行这条建表语句,这样就可以保证在数据库创建完成时还能成功创建出student表。
代码如下:
String sql_str = "create table student("
+ "id integer primary key autoincrement not null,"
+ "name varchar(10)," + "age integer" + ")";
@Override
public void onCreate(SQLiteDatabase arg0) {
arg0.execSQL(sql_str);
}
然后修改activity_main.xml中的代码,代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<EditText
android:id="@+id/name_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用姓名" />
<EditText
android:id="@+id/age_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入年龄" />
<Button
android:id="@+id/btn_insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入" />
<Button
android:id="@+id/btn_queryAll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询全部" />
<Button
android:id="@+id/btn_deleteAll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除全部" />
<Button
android:id="@+id/btn_modifyAll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改全部" />
</LinearLayout>
布局文件很简单,两个输入框EditText,四个按钮Button
我们希望通过输入一个学生的姓名和年龄信息来将信息添加到数据库中,两个输入框对应获取学生信息,四个Button对用我们对数据库中数据的增、删、改、查
下面我们看一下对数据的操作:
2.操作数据库
首先我们需要一些准备工作,即实例化布局文件里的控件,并给四个按钮添加点击事件,代码如下:
public class MainActivity extends Activity implements OnClickListener {
private EditText mName, mAge;
private Button mInsertBtn, mQueryBtn, mDelete, mModify;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindID();
}
private void bindID() {
mName = (EditText) findViewById(R.id.name_et);
mAge = (EditText) findViewById(R.id.age_et);
mInsertBtn = (Button) findViewById(R.id.btn_insert);
mQueryBtn = (Button) findViewById(R.id.btn_queryAll);
mDelete = (Button) findViewById(R.id.btn_deleteAll);
mModify = (Button) findViewById(R.id.btn_modifyAll);
mInsertBtn.setOnClickListener(this);
mQueryBtn.setOnClickListener(this);
mDelete.setOnClickListener(this);
mModify.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
// 增
case R.id.btn_insert:
InsertData();
break;
// 查
case R.id.btn_queryAll:
QueryData();
break;
// 删
case R.id.btn_deleteAll:
DeleteData();
break;
// 改
case R.id.btn_modifyAll:
ModifyData();
break;
default:
break;
}
}
}
代码中我们自定义了四个方法:InsertData()、DeleteData()、ModifyData()、QueryData()分别对应数据库操作的增、删、改、查方法。以上就算把准备工作做完了。
下面我们看一下具体操作。
2.1增加数据
首先我们需要了解一下,SQLiteOpenKHelper有两个非常重要的抽象方法:getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是当数据库不可写入的时候(如磁盘空间已满),getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。
下面我们看一下向数据库中添加数据的代码:
// 增
private void InsertData() {
// 实例化数据库创建类
DBHelper dbHelper = new DBHelper(MainActivity.this, "my_db1", null, 1);
SQLiteDatabase db = dbHelper.getWritableDatabase();
String name = mName.getText().toString();
int age = Integer.parseInt(mAge.getText().toString());
ContentValues mContentValues = new ContentValues();
mContentValues.put("name", name);
mContentValues.put("age", age);
// 插入方法
db.insert("student", null, mContentValues);
Toast.makeText(getApplicationContext(), "插入成功", Toast.LENGTH_LONG)
.show();
// 清空输入框
mName.setText("");
mAge.setText("");
}
这样我们通过输入信息就可以向数据库中插入数据了。
但是我们怎样知道自己数据插入成功了呢,这就需要我们对数据库进行查询。继续往下看!
2.2查询数据
先看一下代码:
// 查
private void QueryData() {
studentlist = new ArrayList<StudentVO>();
adapter = new StudentAdapter(MainActivity.this, studentlist);
// 实例化数据库创建类
DBHelper dbHelper = new DBHelper(MainActivity.this, "my_db1", null, 1);
SQLiteDatabase db = dbHelper.getReadableDatabase();
// 判断表中有无数据,无数据就弹出“无数据”
cursor = db.rawQuery("select * from student", null);
if (cursor.getCount() != 0) {
cursor = db.query("student", null, null, null, null, null, null);
cursor.moveToFirst();
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.d("TAG", name + ":" + age);
} while (cursor.moveToNext());
cursor.close();
} else {
Toast.makeText(getApplicationContext(), "无数据", Toast.LENGTH_LONG)
.show();
}
}
通过Log打印,我们可以看到添加到数据库中的一条信息,如图:
这样就完成了对数据库的查询操作。
2.3删除数据
删除数据就比较简单了,代码如下:
// 删
private void DeleteData() {
// 实例化数据库创建类
DBHelper dbHelper = new DBHelper(MainActivity.this, "my_db1", null, 1);
SQLiteDatabase db = dbHelper.getReadableDatabase();
db.delete("student", null, null);
}
2.4修改数据
// 改
private void ModifyData() {
// 实例化数据库创建类
DBHelper dbHelper = new DBHelper(MainActivity.this, "my_db1", null, 1);
SQLiteDatabase db = dbHelper.getReadableDatabase();
ContentValues mContentValues = new ContentValues();
mContentValues.put("name", "小白");
mContentValues.put("age", 0);
db.update("student", mContentValues, null, null);
}
另外,由于使用控制台打印不太方便,所以我使用了一个ListView来展示数据,具体代码可以戳这里
至此,数据库的基本内容就是这样了
部分内容引用自郭霖我郭神的《第一行代码(第二版)》——6.4 SQLite数据库存储。
袁程序猿的CSDN博客:安卓学习心得
往期回顾:
小程序发布,你方了吗?
安卓四大组件——Service(服务)
安卓四大组件——BroadcastReceiver(广播)
搞懂 res ->values + res ->drawable : 资源
界面美化 —— 布局
Intent——把两个Activity关联起来!
常用控件
关于Activity的生命周期