1 public class MyDatabaseHelper extendsSQLiteOpenHelper {2
3 //把定义SQL建表语句成字符串常量4
5 //图书的详细信息6 //ID、作者、价格、页数、书名
7 public static final String CREATE_BOOK = "create table Book("
8 +"id integer primary key autoincrement,"
9 +"author text,"
10 +"price real,"
11 +"pages integer,"
12 +"name text)";13
14 privateContext mContext;15
16 //构造方法
17 publicMyDatabaseHelper(Context context, String name,18 SQLiteDatabase.CursorFactory factory, intversion){19 super(context,name,factory,version);20 mContext =context;21 }22
23 //建表
24 @Override25 public voidonCreate(SQLiteDatabase db) {26 db.execSQL(CREATE_BOOK);27 Toast.makeText(mContext,"数据库创建成功", Toast.LENGTH_SHORT).show();28 }29
30 @Override31 public void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion){32 }33 }
目前数据库中有一个Book表,如果想要添加一个Category表,就需要对数据库进行升级,这时需要用到MyDatabaseHelper中的onUpgrade()方法。
首先和Book表的建立一样需要先写好建表语句:
create table Category (
id integer primary key autoincrement
category_name text
category_code integer)
修改后的代码如下:
public class MyDatabaseHelper extendsSQLiteOpenHelper {//把定义SQL建表语句成字符串常量//图书的详细信息//ID、作者、价格、页数、书名
public static final String CREATE_BOOK = "create table Book("
+"id integer primary key autoincrement,"
+"author text,"
+"price real,"
+"pages integer,"
+"name text)";//图书的分类//图书的id、分类名、分类代码
public static final String CREATE_CATEGORY = "create table Category("
+ "id integer primary key autoincrement,"
+ "category_name text,"
+ "category_code inter)";privateContext mContext;//构造方法
publicMyDatabaseHelper(Context context, String name,
SQLiteDatabase.CursorFactory factory,intversion){super(context,name,factory,version);
mContext=context;
}//建表
@Overridepublic voidonCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);
Toast.makeText(mContext,"数据库创建成功", Toast.LENGTH_SHORT).show();
}
@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion){
db.execSQL("drop table if exists Book");
db.execSQL("drop table if exists Category");
onCreate(db);
}
}
在onUpgrade()方法中先使用drop语句如果已经存在Book表和Category表,就把两张表都删掉,因为数据库已经存在了,onCreate()方法怎么样都不会再执行的。
然后在MainActivity修改代码:
1 public class MainActivity extendsAppCompatActivity {2
3 privateMyDatabaseHelper dbHelper;4
5 @Override6 protected voidonCreate(Bundle savedInstanceState) {7 super.onCreate(savedInstanceState);8 setContentView(R.layout.activity_main);9
10 //创建帮助类的实例
11 dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,2);12
13 //注册按钮
14 Button creatDatabase =(Button) findViewById(R.id.creat_database);15 //按钮响应
16 creatDatabase.setOnClickListener(newView.OnClickListener() {17 @Override18 public voidonClick(View view) {19 dbHelper.getWritableDatabase();20 }21 });22 }23 }
dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,2);把最后一个参数从之前的1改为2,再按下创建数据库就可完成升级。
接下来完成数据库的添加、更新、删除、查询操作。
先修改布局文件添加4个按钮:
1 <?xml version="1.0" encoding="utf-8"?>
2
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical">
6
7
9 android:layout_width="match_parent"
10 android:layout_height="wrap_content"
11 android:text="建立数据库"/>
12
13
15 android:layout_width="match_parent"
16 android:layout_height="wrap_content"
17 android:text="添加数据"/>
18
19
21 android:layout_width="match_parent"
22 android:layout_height="wrap_content"
23 android:text="更新数据"/>
24
25
27 android:layout_width="match_parent"
28 android:layout_height="wrap_content"
29 android:text="删除数据"/>
30
31
33 android:layout_width="match_parent"
34 android:layout_height="wrap_content"
35 android:text="查询数据"/>
36
在MainActivity中这样完成:
1 public class MainActivity extendsAppCompatActivity {2
3 privateMyDatabaseHelper dbHelper;4
5 @Override6 protected voidonCreate(Bundle savedInstanceState) {7 super.onCreate(savedInstanceState);8 setContentView(R.layout.activity_main);9
10 //创建帮助类的实例
11 dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,2);12
13 //注册按钮
14 Button creatDatabase =(Button) findViewById(R.id.creat_database);15 Button adddata =(Button) findViewById(R.id.add_data);16 Button updataData =(Button) findViewById(R.id.updata_data);17 Button deleteData =(Button) findViewById(R.id.delete_data);18 Button queryData =(Button) findViewById(R.id.query_data);19 //按钮响应
20 creatDatabase.setOnClickListener(newView.OnClickListener() {21 @Override22 public voidonClick(View view) {23 dbHelper.getWritableDatabase();24 }25 });26
27 //添加数据
28 adddata.setOnClickListener(newView.OnClickListener() {29 @Override30 public voidonClick(View view) {31 SQLiteDatabase db =dbHelper.getWritableDatabase();32 ContentValues values = newContentValues();33 //第一条数据
34 values.put("name","The Da Vinci Code");35 values.put("author","Dan Brown");36 values.put("pages",45);37 values.put("price",16.96);38 db.insert("Book",null,values);39 values.clear();40 //第二条数据
41 values.put("name","The Lost symbol");42 values.put("author","Dan Brown");43 values.put("pages",510);44 values.put("price",19.95);45 db.insert("Book",null,values);46 Toast.makeText(MainActivity.this,"添加数据成功",Toast.LENGTH_SHORT).show();47 }48 });49
50 //更新数据
51 updataData.setOnClickListener(newView.OnClickListener() {52 @Override53 public voidonClick(View view) {54 SQLiteDatabase db =dbHelper.getWritableDatabase();55 ContentValues values = newContentValues();56 values.put("price",10.899);57 db.update("Book", values, "name = ?",new String[] {"The Da Vinci Code"});58 }59 });60
61 //删除数据
62 deleteData.setOnClickListener(newView.OnClickListener() {63 @Override64 public voidonClick(View view) {65 SQLiteDatabase db =dbHelper.getWritableDatabase();66 db.delete("Book","pages > ?",new String[] {"500"});67 }68 });69
70 //查询数据
71 queryData.setOnClickListener(newView.OnClickListener() {72 @Override73 public voidonClick(View view) {74 SQLiteDatabase db =dbHelper.getWritableDatabase();75 Cursor cursor = db.query("Book", null, null ,null, null, null, null);76 if(cursor.moveToFirst()){77 String name = cursor.getString(cursor.getColumnIndex("name"));78 String author = cursor.getString(cursor.getColumnIndex("author"));79 int pages = cursor.getInt(cursor.getColumnIndex("pages"));80 double price = cursor.getDouble(cursor.getColumnIndex("price"));81 Log.d("MainActivity","book name is " +name);82 Log.d("MainActivity","book auther is " +author);83 Log.d("MainActivity","book pagesis " +pages);84 Log.d("MainActivity","book price is " +price);85 }86 }87 });88 }89 }
添加数据:先使用dbHelper.getWritableDatabase()方法创建一个SQLiteDatabase的实例db,用于操作数据库,然后创键一个ContentValues的实例values,用来存放要添加的数据。然后是要values的put()方法将数据存入values中,再使用db的insert()方法将数据添加进数据库。然后使用clear()方法清空values再添加下一个数据。最后提醒添加成功。
更新数据:一样使用dbHelper.getWritableDatabase()创建一个一个SQLiteDatabase的实例db,在创建一个values,将要更新的数据存放在values中,然后使用update()方法更新数据。第三个和第四个参数用于判断修改的是哪一行的数据。
删除数据:使用delete()方法,第一个参数是想要操作的表名,第二个第三个指定操作的行。
查询数据:将数据存放在cursor对象中,query()方法最短也要有7个参数,例如:(返回值)方法名:query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy),其中table指定想要查询的表名,columns指定查询的列名,selection指定where的约束条件,selectionArgs为where中的占位符提供具体的值,groupBy指定group by的列,having对group by后的结果进行约束,orderBy查询结果的排序方式。
db.query("Book", null, null ,null, null, null, null );这样的用法表示将遍历整个Book表。
然后使用cursor的moveToFirst方法将指针移到第一行,再一次向下移动实现遍历,再使用cursor.getColumnIndex()方法得到相应列的索引,通过getString、getInt、getDouble获得相应类型的数据,最后输出查询的结果。