Android开发(一) 自带数据库SQLite的用法

一、SQLite是什么

    SQLite数据库存储是Android系统提供的数据存储方式之一 SQLite是专为嵌入式设备设计的一款轻量级数据库 SQLite占用资源非常低,在嵌入式设备中,只需要几百K的内存 SQLite支持标准的SQL语法,遵循数据库的ACID事务 SQLite是android系统自带,不需要单独安装,不需要用户名密码就可以使用。

二、SQLite怎么用


step1:新建类继承SQLiteOpenHelper

 新建一个类(类名自定义)继承SQLiteOpenHelper,并实现构造方法、重写oncreate和onupgrade方法。

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
public class DBHelper extends SQLiteOpenHelper {
 
     private String createSQL = "create table student("
             + "id integer primary key  autoincrement not null ,"
             + "name varchar(20) not null,"
             + "age integer not null ,"
             + "gender varchar(2) not null)" ;
 
     /**
      *
      * @param context
      * @param name 数据库名字
      * @param factory 数据库进行查询的时候会返回一个cursor,这个cursor就是在上面的factory中产生的。
如果有需求,可以自定义factory,这样返回的cursor就会符合自己的需求!
      * @param version 数据库版本号
      */
     public DBHelper(Context context, String name, CursorFactory factory, int version) {
         super (context, name, factory, version);
     }
 
     @Override
     public void onCreate(SQLiteDatabase db) {
         db.execSQL(createSQL);
     }
 
     /**
      * 该方法会在数据库需要升级的时候调用
      *
      * @param db
      * @param oldVersion
      * @param newVersion
      */
     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         db.execSQL( "ALTER TABLE student ADD COLUMN other TEXT" );
     }
 
}

step2:创建SQLiteDatabase对象

这里有两种创建方式,分别是:

1、只读模式

1
SQLiteDatabase  sqldb = dbhelper.getReadableDatabase();

2、读写模式

1
SQLiteDatabase  sqldb = dbhelper.getWritableDatabase();

step3:通过实现增删改查操作

1、增

1
2
3
4
5
6
7
8
9
10
11
12
private void insert() {
         String name = nameEdit.getText().toString();
         //获得SQLiteDatabase对象,读写模式
         sqldb = dbhelper.getWritableDatabase();
         //ContentValues类似HashMap,区别是ContentValues只能存简单数据类型,不能存对象
         ContentValues values = new ContentValues();
         values.put( "name" , name);
         values.put( "age" , 20 );
         values.put( "gender" , "男" );
         //执行插入操作
         sqldb.insert(TABLE_NAME, null , values);
     }

   2、删

1
2
3
4
5
6
private void delete() {
         sqldb = dbhelper.getWritableDatabase();
         //第二个参数是WHERE语句(即执行条件,删除哪条数据)
         //第三个参数是WHERE语句中占位符(即"?"号)的填充值
         sqldb.delete(TABLE_NAME, "name=?" , new String[]{ "jack" }); //删除name的值是jack的那条记录
     }

   3、改

1
2
3
4
5
6
7
8
9
10
11
private void modify() {
         SQLiteDatabase  sqldb = dbhelper.getWritableDatabase();
 
         ContentValues values = new ContentValues();
         values.put( "name" , "Jet" );
         //第二个参数是修改的字段及修改的值(已经存放到ContentValues中)
         //第三个参数是WHERE语句
         //第四个参数是WHERE语句中占位符的填充值
         //如果第三四个参数为null,那就将每条记录都改掉
         sqldb.update(TABLE_NAME, values, null , null );
     }

  4、查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void show() {
         //得到数据库对象
         sqldb = dbhelper.getReadableDatabase();
         //创建游标
         Cursor mCursor = sqldb.query(TABLE_NAME, new String[] { "id" , "name" , "age" , "gender" }, "age>?" , new String[]{ "10" }, null , null ,
                 null );
         //游标置顶
         mCursor.moveToFirst();
         //遍历
         do {
             String name = mCursor.getString(mCursor.getColumnIndex( "name" ));
             System.out.println(name);
         } while (mCursor.moveToNext());
     }

三、举个数据库连接实例

  DBHelper类代码

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
public class DBHelper extends SQLiteOpenHelper {
 
     private String createSQL = "create table student("
             + "id integer primary key  autoincrement not null ,"
             + "name varchar(20) not null,"
             + "age integer not null ,"
             + "gender varchar(2) not null)" ;
 
     /**
      *
      * @param context
      * @param name 数据库名字
      * @param factory 数据库进行查询的时候会返回一个cursor,这个cursor就是在上面的factory中产生的。
如果有需求,可以自定义factory,这样返回的cursor就会符合自己的需求!
      * @param version 数据库版本号
      */
     public DBHelper(Context context, String name, CursorFactory factory, int version) {
         super (context, name, factory, version);
     }
 
     @Override
     public void onCreate(SQLiteDatabase db) {
         db.execSQL(createSQL);
     }
 
     /**
      * 该方法会在数据库需要升级的时候调用
      *
      * @param db
      * @param oldVersion
      * @param newVersion
      */
     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         db.execSQL( "ALTER TABLE student ADD COLUMN other TEXT" );
     }
 
}


  MainActivity类代

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public class MainActivity extends Activity implements OnClickListener {
 
     private Button addBtn;
     private Button deleteBtn;
     private Button modifyBtn;
     private Button showBtn;
     private EditText nameEdit;
 
     private DBHelper dbhelper;
     private SQLiteDatabase sqldb;
 
     private static final String TABLE_NAME = "student" ;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         bindID();
         dbhelper = new DBHelper( this , "demodb" , null , 1 );
     }
 
     /**
      * 绑定ID和监听事件
      */
     private void bindID() {
         addBtn = (Button) findViewById(R.id.addBtn);
         deleteBtn = (Button) findViewById(R.id.deleteBtn);
         modifyBtn = (Button) findViewById(R.id.modifyBtn);
         showBtn = (Button) findViewById(R.id.showBtn);
         nameEdit = (EditText) findViewById(R.id.nameEdit);
 
         addBtn.setOnClickListener( this );
         deleteBtn.setOnClickListener( this );
         modifyBtn.setOnClickListener( this );
         showBtn.setOnClickListener( this );
     }
 
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
         case R.id.addBtn:
             insert();
             break ;
         case R.id.deleteBtn:
             delete();
             break ;
         case R.id.modifyBtn:
             modify();
             break ;
         case R.id.showBtn:
             show();
             break ;
         default :
             break ;
         }
     }
 
     private void insert() {
         String name = nameEdit.getText().toString();
         //获得SQLiteDatabase对象,读写模式
         sqldb = dbhelper.getWritableDatabase();
         //ContentValues类似HashMap,区别是ContentValues只能存简单数据类型,不能存对象
         ContentValues values = new ContentValues();
         values.put( "name" , name);
         values.put( "age" , 20 );
         values.put( "gender" , "男" );
         //执行插入操作
         sqldb.insert(TABLE_NAME, null , values);
     }
 
     private void delete() {
         sqldb = dbhelper.getWritableDatabase();
         //第二个参数是WHERE语句(即执行条件,删除哪条数据)
         //第三个参数是WHERE语句中占位符(即"?"号)的填充值
         sqldb.delete(TABLE_NAME, "name=?" , new String[]{ "jack" });
     }
 
     private void modify() {
         SQLiteDatabase  sqldb = dbhelper.getWritableDatabase();
 
         ContentValues values = new ContentValues();
         values.put( "name" , "Jet" );
         //第二个参数是修改的字段及修改的值(已经存放到ContentValues中)
         //第三个参数是WHERE语句
         //第四个参数是WHERE语句中占位符的填充值
         //如果第三四个参数为null,那就将每条记录都改掉
         sqldb.update(TABLE_NAME, values, null , null );
     }
 
     private void show() {
         //得到数据库对象
         sqldb = dbhelper.getReadableDatabase();
         //创建游标
         Cursor mCursor = sqldb.query(TABLE_NAME, new String[] { "id" , "name" , "age" , "gender" }, "age>?" , new String[]{ "10" }, null , null ,
                 null );
         //游标置顶
         mCursor.moveToFirst();
         //遍历
         do {
             String name = mCursor.getString(mCursor.getColumnIndex( "name" ));
             System.out.println(name);
         } while (mCursor.moveToNext());
     }
     @Override
     protected void onDestroy() {
         super .onDestroy();
         //退出程序后,关闭数据库资源
         sqldb.close();
     }
}


    布局文件代码

<linearlayout 
android:layout_height= "match_parent" 
android:layout_width= "match_parent" 
android:orientation= "vertical" 
tools:context= "${relativePackage}.${activityClass}" 
 
<edittext 
android:hint= "请输入学生姓名" 
android:id= "@+id/nameEdit" 
android:layout_height= "wrap_content" 
android:layout_width= "match_parent" >
<button 
android:id= "@+id/addBtn" 
android:layout_height= "wrap_content" 
android:layout_width= "match_parent" 
android:text= "新增" >
</button>
<button 
android:id= "@+id/deleteBtn" 
android:layout_height= "wrap_content" 
android:layout_width= "match_parent" 
android:text= "删除" >
</button>
<button 
android:id= "@+id/modifyBtn" 
android:layout_height= "wrap_content" 
android:layout_width= "match_parent" 
android:text= "修改" >
</button>
<button 
android:id= "@+id/showBtn" 
android:layout_height= "wrap_content" 
android:layout_width= "match_parent" 
android:text= "显示" >
</button>
</edittext>
</linearlayout>

猜你喜欢

转载自blog.csdn.net/walk_power/article/details/79469460
今日推荐