SQLite入门

一、什么是SQLite

SQLite是一款开源的、轻量级的、嵌入式的、关系型数据库。它在2000年由D. Richard Hipp发布,可以支援Java、Net、PHP、Ruby、Python、Perl、C等几乎所有的现代编程语言,支持Windows、Linux、Unix、Mac OS、Android、IOS等几乎所有的主流操作系统平台。

SQLite被广泛应用的在苹果、Adobe、Google的各项产品。如果非要举一个你身边应用SQLite的例子的话,如果你的机器中装的有迅雷,请打开迅雷安装目录,搜索一下sqlite3.dll,是不是找到了它的身影? 如果你装的有金山词霸,那么打开他的安装目录也会看到sqlite.dll的存在。是的,SQLite早就广泛的应用在我们接触的各种产品中了,当然我们今天学习它,是因为在Android开发中,Android推荐的数据库,也是内置了完整支持的数据库就是SQlite。

SQLite的特性:

1. ACID事务

2. 零配置 – 无需安装和管理配置

3. 储存在单一磁盘文件中的一个完整的数据库

4. 数据库文件可以在不同字节顺序的机器间自由的共享

5. 支持数据库大小至2TB

6. 足够小, 大致3万行C代码, 250K

7. 比一些流行的数据库在大部分普通数据库操作要快

8. 简单, 轻松的API

9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

10. 良好注释的源代码, 并且有着90%以上的测试覆盖率

11. 独立: 没有额外依赖

12. Source完全的Open, 你可以用于任何用途, 包括出售它

13. 支持多种开发语言,C, PHP, Perl, Java, ASP.NET,Python

二、SQLiteDatabase类和SQLiteOpenHelper类

(1)SQLiteDatabase类:提供了一系列管理SQLite数据库的方法。而且要对数据库操作的话,必须得到SQLiteDatabase对象。

(2)SQLiteOpenHelper类:作为一个助手类,用来获得SQLiteDatabase对象。它提供两个方面的功能:

  1. getReadableDatabase()或者getWritableDatabase()方法来得到SQLiteDatabase对象,通过该对象可以对SQLite数据库进行操作。

  2.提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作。

因此,SQLite、SQLiteDatabase、SQLiteOpenHelper的关系描述如下。

SQLiteOpenHelper---获得-->SQLiteDatabase---操作-->SQLite数据库。

也就是说,首先得到一个SQLiteOpenHelper对象,然后通过该对象的getReadableDatabase()或者getWritableDatabase()方法来得到SQLiteDatabase对象,然后再用SQLiteDatabase对象对SQLite数据库进行操作。

接下来用一个小工程演示下:

step1:新建android工程,命名为TestSQLite,工程目录如下图所示:

step2:设置布局文件main.xml

main.xml
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent">
 6     <Button
 7         android:id="@+id/createdatabase"
 8         android:layout_width="fill_parent"
 9         android:layout_height="wrap_content"
10         android:text="createDatabase"/>
11         
12     <Button
13         android:id="@+id/updatedatabase"
14         android:layout_width="fill_parent"
15         android:layout_height="wrap_content"
16         android:text="updateDatabase"/>
17     
18     <Button
19         android:id="@+id/insert"
20         android:layout_width="fill_parent"
21         android:layout_height="wrap_content"
22         android:text="insert"/>
23     
24     <Button
25         android:id="@+id/update"
26         android:layout_width="fill_parent"
27         android:layout_height="wrap_content"
28         android:text="update"/>
29     
30     <Button
31         android:id="@+id/delete"
32         android:layout_width="fill_parent"
33         android:layout_height="wrap_content"
34         android:text="delete"/>
35     
36     <Button
37         android:id="@+id/query"
38         android:layout_width="fill_parent"
39         android:layout_height="wrap_content"
40         android:text="queryTheCursor"/>
41     
42     <ListView
43         android:id="@+id/listView"
44         android:layout_width="fill_parent"
45         android:layout_height="wrap_content"/>
46     
47 </LinearLayout>

step3:创建抽象辅助类SQLiteOpenHelper的子类

DBHelper
 1 package com.cb.sqlite1;
 2 
 3 
 4 import android.content.Context;
 5 import android.database.sqlite.SQLiteDatabase;
 6 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 7 import android.database.sqlite.SQLiteOpenHelper;
 8 import android.util.Log;
 9 
10 public class DBHelper extends SQLiteOpenHelper{
11     
12 
13     private static String DATABASE_NAME = "test.db";
14     private static int VERSION = 1;
15     private String tag = "DBHelper";
16     
17     //在SQLiteOpenHelper的子类中,必须有构造函数
18     public DBHelper(Context context, String name, CursorFactory factory,
19             int version) {
20         //必须调用父类的构造函数
21         super(context, name, factory, version);
22     }
23     
24     public DBHelper(Context context, int version) {
25         this(context, DATABASE_NAME, null, version);
26     }
27     
28     public DBHelper(Context context) {
29         this(context, VERSION);
30     }
31     
32     
33     
34 
35     //该函数在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabase对象的时候,才会调用这个方法
36     @Override
37     public void onCreate(SQLiteDatabase db) {
38         db.execSQL("create table user (id int ,name varchar(20))");
39         Log.i(tag, "database onCreate()");
40     }
41     
42     //如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,即会调用onUpgrade
43     @Override
44     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
45         Log.i(tag, "database onUpgrade()");
46     }
47 
48 }

step4:TestSQLite.java

TestSQLite
package com.cb.sqlite1;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class TestSQLite extends Activity {
    private Button mCreateDatabaseBtn;
    private Button mUpdateDatabaseBtn;
    private Button mInsertBtn;
    private Button mUpdateBtn;
    private Button mDeleteBtn;
    private Button mQueryBtn;
    
    private String tag = "TestSQLite";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mCreateDatabaseBtn = (Button)findViewById(R.id.createdatabase);
        mUpdateDatabaseBtn = (Button)findViewById(R.id.updatedatabase);
        mInsertBtn = (Button)findViewById(R.id.insert);
        mUpdateBtn = (Button)findViewById(R.id.update);
        mDeleteBtn = (Button)findViewById(R.id.delete);
        mQueryBtn =(Button)findViewById(R.id.query);
        
        
        mCreateDatabaseBtn.setOnClickListener(new CreateDatabaseListener());
        mUpdateDatabaseBtn.setOnClickListener(new UpdateDatabaseListener());
        mInsertBtn.setOnClickListener(new InsertListener());
        mUpdateBtn.setOnClickListener(new UpdateListener());
        mDeleteBtn.setOnClickListener(new DeleteListener());
        mQueryBtn.setOnClickListener(new QueryListener());

        
    }
    
    class CreateDatabaseListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            Log.i(tag, "CreateDatabaseListener");
            DBHelper helper = new DBHelper(TestSQLite.this);
            SQLiteDatabase db = helper.getWritableDatabase();
        }
        
    }
    
    class UpdateDatabaseListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            Log.i(tag, "UpdateDatabaseListener");
            DBHelper helper = new DBHelper(TestSQLite.this, 2);
            SQLiteDatabase db = helper.getWritableDatabase();
        }
        
    }
    
    class InsertListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            Log.i(tag, "InsertListener");
            DBHelper helper = new DBHelper(TestSQLite.this);
            SQLiteDatabase db = helper.getWritableDatabase();
            
            ContentValues values = new ContentValues();
            values.put("id", 1);
            values.put("name", "cb");
            
            //发现插入数据时,也会调用onUpgrade()方法
            db.insert("user", null, values);
        }
        
    }
    
    class UpdateListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            Log.i(tag, "UpdateListener");
            
            DBHelper helper = new DBHelper(TestSQLite.this);
            SQLiteDatabase db = helper.getWritableDatabase();
            
            ContentValues values = new ContentValues();
            values.put("name", "hello,cb");
            
            db.update("user", values, "id = ?", new String[]{"1"});
        }
        
    }
    
    class DeleteListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            Log.i(tag, "DeleteListener");
            
            DBHelper helper = new DBHelper(TestSQLite.this);
            SQLiteDatabase db = helper.getWritableDatabase();
            
            db.delete("user", "id = ?", new String[]{"1"});
        }
        
    }
    
    class QueryListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            Log.i(tag, "QueryListener");
            DBHelper helper = new DBHelper(TestSQLite.this);
            SQLiteDatabase db = helper.getWritableDatabase();
            
            /*
             * Cursor类
             * 游标刚开始时,处于第一条记录的上方。
             * cursor.moveToNext()作用:
             * 1.将游标向下挪动一位
             * 2.判断当前游标位置下方是否还有数据
             * */
            Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
            while (cursor.moveToNext()) {
                String name = cursor.getString(cursor.getColumnIndex("name"));
                System.out.println("query--->"+name);
            }
        }
        
    }
}

step5:执行结果如下

ps:通过adb查看数据库(adb调试工具,让我们可以以linux的方式调试程序)

一些SQLite操作命令:

1.adb shell--------进入了linux命令行,就可以使用linux命令操作android环境。

2.cd  data/data/包名--------进入相应目录

3.ls --------查看文件,可以看到数据库

4.sqlite3 数据库名--------进入数据库命令环境,访问数据库

5.   .schema --------查看数据库下的信息

原文地址:https://www.cnblogs.com/chenbin7/p/2499515.html