一、首先写一个类继承SQLiteOpenHelper类
重写他的方法指定db的名称、版本,重写oncreat和onUpgrade方法,写SQL语句创建表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class MySQLiteOpenhelper extends SQLiteOpenHelper { private static String name = "person.db" ; private static int version = 1 ; public MySQLiteOpenhelper(Context context){ super (context,name, null ,version); } /* *数据库第一次被创建时调用的方法 *db是被创建的数据库 */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table person(id integer primary key autoincrement,name varchar(20),number varchar(20) )"); } /*当数据库版本更新时调用此方法*/ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } |
二、创建一个DAO类对外提供增删改查接口
其中执行增删改查的方法可以用SQL语句也可以使用系统给出的API,下面的代码中把两种方法都写了出来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
public class Persondao { private MySQLiteOpenhelper helper; public Persondao(){ } public Persondao(Context context){ helper = new MySQLiteOpenhelper(context); } public void add(String name,String number){ SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL( "insert into person (name,number)values(?,?)" , new Object[]{name,number}); /*ContentValues values = new ContentValues(); values.put("number",number); values.put("name", name); long id = db.insert("Person",null, values);*/ db.close(); } public boolean find(String name){ SQLiteDatabase db = helper.getWritableDatabase(); //Cursor cursor = db.rawQuery("select *from person where name=?", new String[]{name}); Cursor cursor = db.query( "person" , null , "name=?" , new String[]{name}, null , null , null ); boolean result =cursor.moveToNext(); cursor.close(); db.close(); return result; } public int update(String name,String newnumber){ SQLiteDatabase db = helper.getWritableDatabase(); //db.execSQL("update person set number=? where name=?",new Object[]{newnumber,name}); ContentValues values = new ContentValues(); values.put( "number" ,newnumber); int number = db.update( "person" , values, "name=?" , new String[]{newnumber}); db.close(); return number; } public int delet(String name){ SQLiteDatabase db = helper.getWritableDatabase(); //db.execSQL("delete from person where name=?",new String[]{name}); int number = db.delete( "person" , "name=?" , new String[]{name}); db.close(); return number; } public List<Person> findAll(){ List<Person> persons = new ArrayList<Person>(); SQLiteDatabase db = helper.getWritableDatabase(); //Cursor cursor = db.rawQuery("select *from person", null); Cursor cursor = db.query( "person" , new String[]{ "id" , "name" , "number" }, null , null , null , null , null ); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex( "id" )); String name = cursor.getString(cursor.getColumnIndex( "name" )); String number = cursor.getString(cursor.getColumnIndex( "number" )); Person p = new Person(); persons.add(p); } db.close(); cursor.close(); return persons; } } |
三、增删改查操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class ToDoDB extends SQLiteOpenHelper { private final static String DATABASE_NAME = "todo_db" ; private final static int DATABASE_VERSION = 1 ; private final static String TABLE_NAME = "todo_table" ; public final static String FIELD_id = "_id" ; public final static String FIELD_TEXT = "todo_text" ; public ToDoDB(Context context) { super (context, DATABASE_NAME, null , DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { /* 建立table */ String sql = "CREATE TABLE " + TABLE_NAME + " (" + FIELD_id + " INTEGER primary key autoincrement, " + " " + FIELD_TEXT + " text)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } public Cursor select() { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db .query(TABLE_NAME, null, null, null, null, null, null); return cursor; } public long insert(String text) { SQLiteDatabase db = this.getWritableDatabase(); /* 将新增的值放入ContentValues */ ContentValues cv = new ContentValues(); cv.put(FIELD_TEXT, text); long row = db.insert(TABLE_NAME, null, cv); return row; } public void delete(int id) { SQLiteDatabase db = this.getWritableDatabase(); String where = FIELD_id + " = ?"; String[] whereValue = { Integer.toString(id) }; db.delete(TABLE_NAME, where, whereValue); } public void update(int id, String text) { SQLiteDatabase db = this.getWritableDatabase(); String where = FIELD_id + " = ?"; String[] whereValue = { Integer.toString(id) }; /* 将修改的值放入ContentValues */ ContentValues cv = new ContentValues(); cv.put(FIELD_TEXT, text); db.update(TABLE_NAME, cv, where, whereValue); } } |
四、写一个JavaBean设置他的get、set方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class Person { private int id; private String name; private String number; public Person(){ } public Person( int id, String name, String number) { this .id = id; this .name = name; this .number = number; } public int getId() { return id; } public void setId( int id) { this .id = id; } public String getName() { return name; } public void setName(String name) { this .name = name; } public String getNumber() { return number; } public void setNumber(String number) { this .number = number; } } |
五、mainactivity中使用它
1
2
3
4
5
6
|
private SQLiteOpenHelper helper; Persondao dao = new Persondao(); helper = new MySQLiteOpenhelper( this ); helper.getWritableDatabase(); SQLiteDatabase db = helper.getWritableDatabase(); |
六、关于数据库的事务处理
android开发中数据库的操作非常慢,将所有操作打包成一个事务能够大大的提高处理速度,其中最重要的是保证了数据的一致性,让事务中的所有操作都能成功执行,或者失败,或者这所有操作都回滚。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SQLiteDatabase db = helper.getWritableDatabase(); db.beginTransaction(); try { //在这里执行多个数据库操作,执行过程中可能会抛出异常 db.execSQL( "update person set number=? where name=?" , new Object[]{ "1" ,jacky}); db.execSQL( "update person set number=? where name=?" , new Object[]{ "2" , "sunny" }); db.setTransactionSuccessful(); } catch { //捕获异常 throw e; } finally { //所有操作完成结束一个事务 db.endTransaction(); db.close; } |