Android中SQLite的使用

SQLite是Android中内置的数据库,SQLite是轻量级数据库,支持标准的SQL语法,并且支持ACID事物。

在Android中提供了SQLIteOPenHelper类,帮助我们使用SQLite。SQLite是一个抽象类,其中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须重写。SQLiteOpenHelper 中还有两个非常重要的实例方法, getReadableDatabase() 和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。

SQLiteOpenHelper 中有两个构造方法可供重写。一般选择参数少的进行重写。第一个参数是Context,第二个参数是数据库的名称,第三个参数是自己定义的Cursor,一般我们传人null,第四个是当前数据库的版本号。

1.对数据库的操作

对数据的操作无非为四种:增删改差,对应到数据库里面是,insert(增加数据),delete(删除数据),update(修改数据),select(查询数据)。

 SQLite中提供了insert()方法进行插入数据,需要提供3个参数,第一个是表名,第二个是一般为null,第三个参数ContentValue对象,包含需要的值.

提供update()方法进行修改数据,需要提供4个参数,第一是表名,第二个是contentValue对象,第三,四个参数决定对哪些数据进行修改,为指定则默认所有。

提供delete()方法对数据进行删除,需要提供3个参数,第一是表名,第二,三两个参数指定要删除的数据的条件。未指定则默认所有。

其他query()方法对数据进行查询,需要提供7个参数,是最复杂的。第一个参数指定表名,第二个参数指定所需要的列,第三、四个参数指定查询哪些数据,第五、六个参数和组有关。一般现在直接用null,最后一个是排序方式。

下面来看具体的代码,

 

首先是布局文件,我们只为每个功能设定了一个按钮

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
 3     android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
 4     android:paddingRight="@dimen/activity_horizontal_margin"
 5     android:paddingTop="@dimen/activity_vertical_margin"
 6     android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
 7     android:orientation="vertical"
 8     >
 9 
10 
11     <Button
12         android:layout_width="match_parent"
13         android:layout_height="wrap_content"
14         android:id="@+id/create_database"
15         android:text="create database"
16         />
17 
18     <Button
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:id="@+id/add_btn"
22         android:text="add data"
23         />
24 
25     <Button
26         android:layout_width="match_parent"
27         android:layout_height="wrap_content"
28         android:id="@+id/update_btn"
29         android:text="update data"
30         />
31 
32     <Button
33         android:layout_width="match_parent"
34         android:layout_height="wrap_content"
35         android:id="@+id/delete"
36         android:text="delete data"
37         />
38     <Button
39         android:layout_width="match_parent"
40         android:layout_height="wrap_content"
41         android:id="@+id/select_btn"
42         android:text="search a data"
43         />
44 
45 </LinearLayout>
activity_main.xml

然后我们定义了MyDataBaseHelper继承DatabaseHelpler,代码如下

 1 public class MyDatabaseHelper extends SQLiteOpenHelper {
 2 
 3 
 4     public static final String CREATE_BOOK = "create table Book ("
 5             +"id integer primary key,"
 6             +"author text,"
 7             +"price real,"
 8             +"pages integer,"
 9             +"name text)";
10 
11 
12     private  Context mContext;
13 
14     public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
15         super(context, name, factory, version);
16         mContext = context;
17     }
18 
19 
20     @Override
21     public void onCreate(SQLiteDatabase db) {
22         db.execSQL(CREATE_BOOK);//用sql语句直接创建表
23 
24         Toast.makeText(mContext,"create successed",Toast.LENGTH_LONG).show();
25     }
26 
27     @Override
28     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
29 
30     }
31 }
View MyDatabaseHelper.java

最后在MainActivity.java中使用

 1 public class MainActivity extends AppCompatActivity {
 2 
 3     private  MyDatabaseHelper dbHelper;
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_main);
 8         dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
 9         Button createdb = (Button)findViewById(R.id.create_database);
10         createdb.setOnClickListener(new View.OnClickListener() {
11             @Override
12             public void onClick(View v) {
13                 dbHelper.getWritableDatabase();
14             }
15         });
16 
17 
18         Button addData = (Button)findViewById(R.id.add_btn);
19         addData.setOnClickListener(new View.OnClickListener() {
20             @Override
21             public void onClick(View v) {
22                 SQLiteDatabase db = dbHelper.getWritableDatabase();
23                 ContentValues values = new ContentValues();
24                 values.put("id",1);
25                 values.put("author","Tao Lin");
26                 values.put("pages",555);
27                 values.put("price", 65.9);
28                 values.put("name", "first code");
29                 db.insert("Book", null, values);//插入第一条数据
30                 values.clear();
31                 values.put("id", 2);
32                 values.put("author","Dan Brown");
33                 values.put("pages",510);
34                 values.put("price",19.95);
35                 values.put("name","the lost symbol");
36                 db.insert("Book", null, values);//插入第二条数据
37 
38 
39             }
40         });
41 
42         Button updataData = (Button)findViewById(R.id.update_btn);
43         updataData.setOnClickListener(new View.OnClickListener() {
44             @Override
45             public void onClick(View v) {
46                 SQLiteDatabase db = dbHelper.getWritableDatabase();
47                 ContentValues values = new ContentValues();
48                 values.put("price",50.99);
49                 db.update("Book", values, "name = ?", new String[]{"first code"});
50             }
51         });
52 
53 
54         Button deleteData = (Button)findViewById(R.id.delete);
55         deleteData.setOnClickListener(new View.OnClickListener() {
56             @Override
57             public void onClick(View v) {
58                 SQLiteDatabase db = dbHelper.getWritableDatabase();
59                 db.delete("Book","pages>?" ,new String[]{"550"});
60             }
61         });
62 
63         Button selectData = (Button)findViewById(R.id.select_btn);
64         selectData.setOnClickListener(new View.OnClickListener() {
65             @Override
66             public void onClick(View v) {
67                 SQLiteDatabase db = dbHelper.getWritableDatabase();
68                 Cursor cursor = db.query("Book",null,null,null,null,null,null);
69                 if (cursor.moveToNext()){
70                     do{
71                         String name = cursor.getString(cursor.getColumnIndex("name"));
72                         String author = cursor.getString(cursor.getColumnIndex("author"));
73                         int pages = cursor.getInt(cursor.getColumnIndex("pages"));
74                         double price = cursor.getDouble(cursor.getColumnIndex("price"));
75 
76                         Log.d("MainActivity","Book name is "+name);
77                         Log.d("MainActivity","Book author is "+author);
78                         Log.d("MainActivity","Book pages is "+pages);
79                         Log.d("MainActivity","Book price is "+price);
80 
81 
82                     }while (cursor.moveToNext());
83 
84                 }
85                 cursor.close();
86 
87 
88             }
89         });
90 
91     }
92 
93 
94 }
MainAcivity.java

 

 

如果你对SQL语句非常熟悉,Android也支持直接用SQL语句对数据库进行访问。具体的下次再说。

posted on 2015-12-26 22:35  麦冬  阅读(291)  评论(0编辑  收藏  举报