Android开发Sqlite数据库初体验

1、Sqlite简介:

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

2、Android如何使用Sqlite数据库

1)Android提供Sqlite数据库操作接口:SQLiteOpenHelper抽象类:

主要方法有:

synchronized void     close()  Close any open database object.

synchronized SQLiteDatabase getReadableDatabase() Create and/or open a database.

synchronized SQLiteDatabase getWritableDatabase() Create and/or open a database that will be used for reading and writing.

abstract void onCreate(SQLiteDatabase db) Called when the database is created for the first time.

void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) Called when the database needs to be downgraded.

void onOpen(SQLiteDatabase db) Called when the database has been opened.

abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) Called when the database needs to be upgraded.

2)继承SQLiteOpenHelper抽象类

直接上代码比较直观:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
//DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能,
//第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作
//第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class DataBaseHelper extends SQLiteOpenHelper{
    private static final int VERSION = 1;
    //在SQLiteOepnHelper的子类当中,必须有该构造函数
    public DataBaseHelper(Context context, String name, CursorFactory factory,
            int version) {
        //必须通过super调用父类当中的构造函数
        super(context, name, factory, version);
    }

    public DataBaseHelper(Context context,String name){
        this(context,name,VERSION); //实质是调用下面的这个构造函数,即第三个构造函数
    }
    public DataBaseHelper(Context context,String name,int version){
        this(context, name,null,version); //实质是调用第一个构造函数
    }
    //该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        System.out.println("create a Database");
        //execSQL函数用于执行SQL语句
        db.execSQL("create table user(id int,name varchar(20))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        System.out.println("update a Database");
    }

}

继承SQLiteOpenHelper抽象类重写相应的方法,根据自己的业务逻辑重写。

2、在Activity中调用如何操作数据库:

 

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

public class SqliteActivity extends Activity {
    /** Called when the activity is first created. */
    private Button createButton;
    private Button insertButton;
    private Button updateButton;
    private Button updateRecordButton;
    private Button queryButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        createButton = (Button) findViewById(R.id.createDatabase);
        updateButton = (Button) findViewById(R.id.updateDatabase);
        insertButton = (Button) findViewById(R.id.insert);
        updateRecordButton = (Button) findViewById(R.id.update);
        queryButton = (Button) findViewById(R.id.query);

        createButton.setOnClickListener(new CreateListener());
        updateButton.setOnClickListener(new UpdateListener());
        insertButton.setOnClickListener(new InsertListener());
        updateRecordButton.setOnClickListener(new UpdateRecordListener());
        queryButton.setOnClickListener(new QueryListener());
    }

    class CreateListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            DataBaseHelper dbHelper = new DataBaseHelper(SqliteActivity.this,
                    "test_mars_db");
            // 只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
            SQLiteDatabase db = dbHelper.getReadableDatabase();
        }

    }

    class UpdateListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            DataBaseHelper dbHelper = new DataBaseHelper(SqliteActivity.this,
                    "test_mars_db", 2);
            // 只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
            SQLiteDatabase db = dbHelper.getReadableDatabase();

        }

    }

    class InsertListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            // 生成ContentValues对象
            ContentValues values = new ContentValues();
            // 想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
            values.put("id", 1);
            values.put("name", "zhangsan");
            DataBaseHelper dbHelper = new DataBaseHelper(SqliteActivity.this,
                    "test_mars_db", 2);
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            // 调用insert方法,就可以将数据插入到数据库当中
            db.insert("user", null, values);
        }
    }

    // 更新操作就相当于执行SQL语句当中的update语句
    // UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX...
    class UpdateRecordListener implements OnClickListener {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            // 得到一个可写的SQLiteDatabase对象
            DataBaseHelper dbHelper = new DataBaseHelper(SqliteActivity.this,
                    "test_mars_db");
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put("name", "zhangsanfeng");
            // 第一个参数是要更新的表名
            // 第二个参数是一个ContentValeus对象
            // 第三个参数是where子句
            db.update("user", values, "id=?", new String[] { "1" });
        }
    }

    class QueryListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            System.out.println("aaa------------------");
            Log.d("myDebug", "myFirstDebugMsg");

            DataBaseHelper dbHelper = new DataBaseHelper(SqliteActivity.this,
                    "test_mars_db");
            SQLiteDatabase db = dbHelper.getReadableDatabase();
            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);
            }
        }
    }

}

上述对SQLite数据库进行增删改查操作

3、通过adb工具查看数据库并操作数据库

启动虚拟机后。在DOS窗口输入adb若出现不是内部命令,则配置一下adb的环境变量。

在终端输入:

-----------------

adb shell

------------------

则进入了Android的linux命令行:

cd data/data目录中则可以看到若干个文件夹。进入自己工程所在的目录中例如本例:为android.sqlite,即为工程建立时的包路径。

然后cd 进入database目录中这个目录下存放的就是数据库文件。可以通过ls -l命令查看文件。

通过命令进入sqlite命令行:

------------------------------

sqlite3 test_mars_db

-----------------------

test_mars_db为数据库名字。

进入了sqlite命令终端后就可以通过sql语句操作数据库了

提示:sqlite数据库命令以.开头。例如:  ./schema 显示当前数据库中存放有哪些表以及创建表的语句是什么。

      slq语句的执行和其他数据库一样。退出:.exit  命令

退出adb终端: exit 命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值