轻量级数据库 ----SQLite

      提到APP中的数据储存,我们第一个会想到的就是SQLite,因为它的简单方便以及体积小,使其跻身主流的数据库的行列。优点就不过多赘述,今天主要写一些SQLite中的简单的使用以及实用的方法。

SQLiteDatabase db = openOrCreateDatabase("test.db",MODE_PRIVATE,null);
db.execSQL("create table if not exists usertb (_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)");

        上面是SQLite里最常用的创建数据库和创建表的模式,"test.db"是创建数据库的名称,加了后缀是怕只写名字的话有些应用可能无法识别,mode_private代表着数据库的模式为私有的,最后的那个是创建的数据库工厂。_id 是建立的usertb的主键,自增长的id,注意如果不加下划线的话,建立的_id将不被识别。其中,null为空值数据,integer为无符号的整型数据,real是浮点型数据,text为文本字符串数据,blob为blob型数据。SQLite中没有专门的boolean型数据,所以我们可以用整形来代替,0是false,1是true。而时间类型一般用text的"yyyy-MM-dd HH:mm:SS.SSS"或者integer的unix时间形式保存数据值。

db.execSQL(sql);//执行sql语句
db.insert(table,nullColumnHanck,values);//添加数据
db.delete(table,whereClause,whereArgs);//删除数据
db.update(table,values,whereClause,whereArgs);//修改数据
db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);//查询数据
db.rawQuery(sql,selectionArgs);//执行sql语句查询
         上面是SQLite中经常用到的几种操作方法,增删改查。

      增添新的数据的话,可以用

db.execSQL("insert into usertb(name,sex,age)values('xxx','man',18)");
       也可以用 

ContentValues values = new ContentValues();
values.put("name","xxx");
values.put("sex","man");
values.put("age",18);
db.insert("usertb",null,values);
      但我们一般会使用第二种,因为这样做可以使我们读代码时候更加简单明了,而且循环遍历写入数据可以更加简单。而修改我们会使用

values.put("sex","woman");
db.update("usertb",values,"_id>?",new String[] {"2"});
      这样我们就可以把usertb中所有ID大于2的条目的性别全部改为“woman”了。删除可以用

db.delete("usertb","name like ?",new String[]{"%x%"});
      这样可以杀出usertb中所有名字中带“x”的条目,查询的话比较简单,但是要把查询的信息打印出来我们就需要用到数据库操作符了。查询我们可以用

db.query("usertb",null,"_id>?",new String[]{"0"},null,null,"name");

       这是查询usertb中所有ID大于0的条目的name值,然后我们可以依次遍历条目中的内容

Cursor c =  db.query("usertb",null,"_id>?",new String[]{"0"},null,null,"name");
if(c != null){
    String[] columns = c.getColumnNames();
    while (c.moveToNext()){
        for (String columnsName : columns){
            Log.i("czx",c.getString(c.getColumnIndex(columnsName)));
        }
    }
}

     这样我们就循环遍历出了数据库中所有条目的所有字段。

     当然,这样在主线程中写会使代码繁复,这是我们可以用到SQLiteOpenHelper这个工具类。

package com.example.mysqlite;

import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by Administrator on 2016/7/19.
 * author : czx
 */
public class MySQLiteOpenHelper extends SQLiteOpenHelper {

    public MySQLiteOpenHelper(Context context, String name) {
        super(context, name, null, 1);
    }

    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
    }

    @Override //首次创建数据库时调用,一般可以把建库,建表操作写入
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("create table if not exists uertb(_id integer primary key autoincrement," +
                " name text not null,age integer not null,sex text not null)");
    }

    @Override //当数据库版本发生变化时,会自动调用
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}
       而Activity中可以直接调用Helper,

package com.example.mysqlite;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.StringDef;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

/**
 * Created by Administrator on 2016/7/19.
 * author : czx
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MySQLiteOpenHelper helper = new MySQLiteOpenHelper(MainActivity.this,"earth.db");
        SQLiteDatabase db = helper.getWritableDatabase();

        db.execSQL("insert into usertb(name,sex,age)values('xxx','man',18)");
        ContentValues values = new ContentValues();
        values.put("name","xxx");
        values.put("sex","man");
        values.put("age",18);
        db.insert("usertb",null,values);
        values.clear();
        values.put("name","yyy");
        values.put("sex","man");
        values.put("age",19);
        db.insert("usertb",null,values);
        values.clear();
        values.put("name","zzz");
        values.put("sex","man");
        values.put("age",18);
        db.insert("usertb",null,values);
        values.clear();
        values.put("name","czx");
        values.put("sex","man");
        values.put("age",25);
        db.insert("usertb",null,values);
        values.clear();

        values.put("sex","woman");
        db.update("usertb",values,"_id>?",new String[] {"2"});
        db.delete("usertb","name like ?",new String[]{"%x%"});

        Cursor c =  db.query("usertb",null,"_id>?",new String[]{"0"},null,null,"name");
        if(c != null){
            String[] columns = c.getColumnNames();
            while (c.moveToNext()){
                for (String columnsName : columns){
                    Log.i("czx",c.getString(c.getColumnIndex(columnsName)));
                }
            }
            c.close();
        }
        db.close();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值