通过项目实践,来熟悉利用SQLiteDatabase来操作SQLite的基本用法。
package com.my.databasetest;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
public class MyDatabaseHelper extends SQLiteOpenHelper {
private Context mContext; //上下文
//建表语句,表名:Book
public static final String CREATE_BOOK = "create table Book ("
+ "id integer primary key autoincrement, "
+ "author text, "
+ "price real, "
+ "pages integer, "
+ "name text)";
//构造函数
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, "创建成功!", Toast.LENGTH_SHORT).show();
}
//升级方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
修改activity_main.xml中的代码:
package com.my.databasetest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private MyDatabaseHelper myDatabaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//利用帮助类创建数据库,数据库名BookStore,版本号 1
myDatabaseHelper = 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 v) {
myDatabaseHelper.getWritableDatabase();
}
});
}
}
运行程序:
查看已创建的数据库中的数据:
Tools\Android\Android Device Monitor,在新出现的窗口中点击File Explorer,data\data\当前项目包名\databases目录下,可以看到数据库,但是无法查看其中具体的数据。
另一种方法:
将sdk的platform-tools配置到环境变量中(安装SDK时就应该将此目录配置到环境变量中,Android Studio自带的SDK会自动配置环境变量,但是不会配置该目录,仍需手动配置),里面是SDK自带的adb调试工具。
1、进入控制台,输入adb shell,进入设备控制台。
2、使用cd命令进入当前项目的databases目录,然后输入ls进行查看。
3、借助sqlite命令打开数据库:sqlite3 + 数据库名
4、输入 .table 查看数据表。
5、还可以通过 .schema 来查看建表语句。
修改MyDatabaseHelper类代码:
(1)、在原来的Book建表语句下新增以下代码:
//建表语句,表名:Category
public static final String CREATE_CATEGORY = "create table Category ("
+ "id integer primary key autoincrement, "
+ "category_name text, "
+ "category_code integer)";
(2)、修改onCreate()代码:
//创建方法
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext, "创建成功!", Toast.LENGTH_SHORT).show();
}
(3)、在onUpgrade()方法中新增以下代码:
//升级方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists Book");
db.execSQL("drop table if exists Category");
onCreate(db);
}
(4)、在MainActivity中,将创建数据库语句的参数,版本号改为2.
//利用帮助类创建数据库,数据库名BookStore,版本号 1,升级后版本号 2
myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,2);
升级方法中使用DROP语句,若存在Book表,删除,若存在Category表,删除,然后调用onCreate()方法,重新建表。
运行程序后,点击创建按钮,会重新弹出Toast提示。使用adb工具查看。
修改MainActivity的createDatabase点击事件下添加一下代码:
Button addData = (Button)findViewById(R.id.add_data);
//点击事件,新增数据
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//开始组装第一条数据
values.put("name","The Da Vinci Code");
values.put("author","Dan Brown");
values.put("pages",454);
values.put("price",16.96);
db.insert("Book",null,values);
values.clear();
//开始组装第二条数据
values.put("name","The Lost Symbol");
values.put("author","Dan Brown");
values.put("pages",510);
values.put("price",19.95);
db.insert("Book",null,values);
}
});
修改MainActivity中的代码,在addData的点击事件下,新增一下代码:
Button updateData = (Button)findViewById(R.id.update_data);
//点击事件,更新数据
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price",10.99);
//更新方法,将书名为The Da Vinci Code的价格更改为values中的数据
db.update("Book",values,"name = ?",new String[] {"The Da Vinci Code"});
}
});
运行程序,点击更新,查看数据库中的数据。
修改MainActivity中的代码,在update点击事件的下面添加以下代码:
Button deleteData = (Button)findViewById(R.id.delete_data);
//点击事件,删除数据
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
//删除方法,将Book表中pages大于500的数据整行删除。
db.delete("Book","pages > ?",new String[] {"500"});
}
});
运行程序,点击删除,查看数据库中的数据。
修改MainActivity中的代码,在deleteData的点击事件下添加以下代码:
Button queryData = (Button)findViewById(R.id.query_data);
//点击事件,查询数据
queryData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = myDatabaseHelper.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();
}
});
运行程序:
db.execSQL("insert into Book (name,author,pages,price) values(?,?,?,?)",new String[] {"The Da Vinci Code","Dan Brown","454",16.96});
db.execSQL("update Book set price = ? where name = ?",new String[] {"10.99","The Da Vinci Code"});
db.execSQL("delete from Book where pages > ?",new String[] {"500"});
db.rawQuery("select * from Book",null);
以上总结自郭神(郭霖)《第一行代码 第二版》并做了少量修改。