Android之SQLite数据库存储
一. 创建数据库
-
创建一个 “数据库管理器” 实体类来继承
SQLiteOpenHelper
抽象类。其中需要重写两个方法用于创建数据库和升级数据库:onCreate()
和onUpgrade()
。 -
数据库管理器的构造方法接收四个参数。第一个是
context
(环境),第二个是数据库名,第三个是查询数据返回的自定义的cursor
、一般都是null
,第四个是数据库的版本号。 -
数据库管理器实例的两种方法,
getReadableDatabase()
和getWritableDatabase()
。这两个都可以创建或打开一个数据库,没有的时候创建,存在的时候直接打开就行操作。(当数据库不可以写入的时候read以只读方式打开,而write方式会出错。)
创建一个BookStore.db数据库,其中新建Book表
create table Book(
id integer primary key autoincrement,
author text,
price real,
pages integer,
name text
)
这是SQL语句,代码如下:
public class MyDatabaseHelper extends SQLiteOpenHelper {
/*建表语句定义成了一个字符串常量*/
public static final String CREATE_BOOK =
"create table Book("
+ "id integer primary key autoincrement,"
+ "author text,"
+ "price real,"
+ "pages integer,"
+ "name text)";
private Context mContext;
/*数据库管理器构造方法*/
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
/*创建数据库,同时创建表*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_LONG).show();
}
/*升级数据库*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
在布局中写一个创建按钮,然后MainActivity中的代码如下:
public class MainActivity extends AppCompatActivity {
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
Button createDatabase = (Button) findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dbHelper.getWritableDatabase();
}
});
}
}
二. 添加数据
用insert()方法添加数据。
insert()方法接收三个参数:
- “表名”
- “默认空值”
- “传入组装好的数据values”
而其中用到的contentvalues数据类型则是用来组装传入内容的。相当于一个map组,用put来压入数据。用完后要记得clear();代码如下:
/*插入数据,insert方法传入三个参数,“表名”“默认空值”“传入组装好的数据values”*/
Button addData = (Button) findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
/*用contentValues来组装要插入的数据 未赋值的自动生成默认值*/
ContentValues values = new ContentValues();
// 开始组装第一组数据
values.put("name", "The da vi code");
values.put("author", "Dan");
values.put("pages", 434);
values.put("price", 13.33);
db.insert("Book", null, values);//输入第一行数据
values.clear();//清空values。
// 开始组装第二条数据
values.put("name", "The lost");
values.put("author", "mask");
values.put("pages", 12);
values.put("price", 999);
db.insert("Book", null, values);//输入第二行数据
values.clear();//清空values。
}
});
三. 更新数据
使用update()方法,传入四个参数,分别是:
- “表名”
- “contentvalues值 修改的内容值”
- “SQL语句中的where约束条件”
- “where中的具体限定值”
同样将要改变的数据压入contentvalues中,然后传入。代码如下:
/*更新数据,使用update方法,传入四个参数,
“表名”“修改的内容值”“SQL语句中的where”“where中的具体限定值”*/
Button updateData = (Button) findViewById(R.id.update_data);
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price", 1.2);
db.update("Book", values, "name=?", new String[]{"The da vi code"});
}
});
四. 删除数据
使用delete()方法,不需要用content数据来传数据,因为只需要指定相应的数据进行删除即可。delete()方法传入三个参数:
- “表名”
- “SQL语句中的where约束条件”
- “where中的具体限定值”
代码如下:
/*删除数据,使用delete方法,传入三个参数,
* “表名”“SQL语句中的where”“where中的具体限定值”*/
Button deleteButton = (Button) findViewById(R.id.delete_data);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("Book", "pages>?", new String[]{"20"});
}
});
查询数据
同时需要用到cursor对象(光标)来输出查询结果,将查询结果赋给cursor对象,得到的cursor对象。
接着调用他的moveToFirst()方法将数据指针移动到第一行开始,然后加入循环,遍历每一行数据,通过moveToNext()来进行跳转。
通过cursor的getColumnIndex()方法获得某一列在表中位置索引,然后将索引传入相应的取值方法中,得到对应的数据。使用完后需要将cursor通过close关闭。
/*查询数据,使用query方法,传入参数较多。*/
Button queryButton = (Button) findViewById(R.id.query_data);
queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
//查询book中所有数据
Cursor cursor = db.query("Book", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
//遍历cursor对象 取出数据并打印
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("MainActivity", "book name is " + name);
Log.d("MainActivity", "book author is " + author);
Log.d("MainActivity", "book pages is " + pages);
Log.d("MainActivity", "book price is " + price);
}while (cursor.moveToNext());
}
cursor.close();
}
});