4.11 android 存储方式——Sqlite

android的五种存储方式分别是: 

SharedPreferences   file  sqlite  contentproviter  http

Sqlite

定义 
1,SQLite是轻量级嵌入式数据库引擎 
2,支持 SQL 语言 

3,利用很少的内存就有很好的性能

sqliteOpenHelper

public class SqliteOpenHepler extends SQLiteOpenHelper{
    /*数据库的名字*/
    public static final String dbname="MyDB";
    /*数据库的版本*/
    public static final int VERSION=1;
    /*表名*/
    public static final String tableName="user";

    public SqliteOpenHepler(Context context) {
        super(context, dbname, null, VERSION);
    }

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

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

    //数据库第一次被创建时,onCreate()会被调用
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("create table "+tableName+"("+"id integer primary key autoincrement,"+"username text,"+"age integer,"+"sex text)");

    }

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

    }
}

sqliteBase

public class SqliteBase {
    SqliteOpenHepler sqliteDBHelper;//SqliteDBHelper实例,用于得到SQLiteDatabase实例,具体操作表结构
    SQLiteDatabase sqLiteDatabase;//SQLiteDatabase实例,用于具体操作表数据


    //初始化
    public void initSql(Context context) {
        sqliteDBHelper = new SqliteOpenHepler(context);
        sqLiteDatabase = sqliteDBHelper.getReadableDatabase();//可读的
        sqLiteDatabase = sqliteDBHelper.getWritableDatabase();//可写的
    }

    //打开某个指定的本地数据库文件
    public void openDB(Context context, String DBHath) {
        String path = context.getDatabasePath(DBHath).getPath();// 获取数据库路径
        sqLiteDatabase = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
    }

    //打开某个指定的本地数据库文件,如果这个数据库文件不存在则创建这个数据库
    public void openOrCreateDB(Context context, String DBHath) {
        String path = context.getDatabasePath(DBHath).getPath();// 获取数据库路径
        sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(path, null, null);
        int version = sqLiteDatabase.getVersion();//当前数据库版本,如果没有这个数据库,则版本号为0
        if (SqliteOpenHepler.VERSION != version) {
            sqLiteDatabase.beginTransaction();// 开始事务
            try {
                if (version == 0) {
                    // 执行我们的onCreate方法
                    sqliteDBHelper.onCreate(sqLiteDatabase);
                } else {
                    // 如果我们应用升级了mNewVersion2,而原版本为1则执行onUpgrade方法
                    sqliteDBHelper.onUpgrade(sqLiteDatabase, version, SqliteOpenHepler.VERSION);
                }
                sqLiteDatabase.setVersion(SqliteOpenHepler.VERSION);// 设置最新版本
                sqLiteDatabase.setTransactionSuccessful();// 设置事务成功
            } finally {
                sqLiteDatabase.endTransaction();// 结束事务
            }
        }
        sqliteDBHelper.onOpen(sqLiteDatabase);
    }

public long insert() {
    ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据
    cv.put("username", "ZYX");//添加title
    cv.put("age", 18); //添加weather
    cv.put("sex", ""); //添加context
    //如果你想插入一条所有字段值都为NULL的记录,必须要指定一个字段名来作为该参数,来告诉数据库,将要插入的这条记录都为NULL值。
    //如果是使用NUll的话,这样插入一条完全为NUll的记录,数据库将会报错。
    return sqLiteDatabase.insert("user", null, cv);//执行插入操作
}

使用sql语句添加

//使用sql语句添加
public void insertBySql() {
    String sql = "insert into user(username,age,sex) values (?,?,?)";//插入操作的SQL语句
    Object[] objects = {"ZYX",18,""};
    sqLiteDatabase.execSQL(sql, objects);//执行SQL语句
}

public int delete() {
    String whereClause = "username=?";//删除的条件
    String[] whereArgs = {"ZYX"};//删除的条件参数
    return sqLiteDatabase.delete("user", whereClause, whereArgs);//执行删除
}

使用sql语句删除

public void deleteBySql() {
    String sql = "delete from user where username='ZYX'";//删除操作的SQL语句
    sqLiteDatabase.execSQL(sql);//执行删除操作
}

public int update() {
    ContentValues cv = new ContentValues();//实例化ContentValues
    cv.put("age", 21);//添加要更改的字段及内容
    String whereClause = "username=?";//修改条件
    String[] whereArgs = {"ZYX"};//修改条件的参数
    return sqLiteDatabase.update("user", cv, whereClause, whereArgs);//执行修改
}

使用sql语句修改

public void updateBySql() {
    String sql = "update user set age = 21 where username = ? ";//修改的SQL语句
    Object[] whereArgs = {"ZYX"};//删除的条件参数
    sqLiteDatabase.execSQL(sql, whereArgs);//执行修改
}

使用sql语句查询

public void queryBySql() {
    Cursor result = sqLiteDatabase.rawQuery("SELECT username,sex,age FROM user", null);
    if (result.moveToFirst()) {//移动到第一行
        while (!result.isAfterLast()) {//如果不是最后一行,继续往下执行
            String userName = result.getString(0);
            int userSex = result.getInt(1);
            int userage = result.getInt(2);
            result.moveToNext();//移动到下一行
        }
        result.close();//关闭游标
    }
}

 /**
     * @param sql
     * @param table         表名称
     * @param distinct      指定“true”或“false”表示要不要过滤重复值
     * @param selectionArgs 条件语句的参数数组
     * @param columns       表示要查询的列所有名称集
     * @param selection     表示WHERE之后的条件语句,可以使用占位符
     * @param groupBy       指定分组的列名
     * @param having        指定分组条件,配合groupBy使用
     * @param orderBy       指定排序的列名
     * @param limit         指定分页参数
     * @return Cursor 返回值,相当于结果集ResultSet
     */
sqLiteDatabase.rawQuery(String sql, String[]selectionArgs);

sqLiteDatabase.query(String table, String[]columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);

sqLiteDatabase.query(String table, String[]columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);

sqLiteDatabase.query(String distinct, String table, String[]columns, String selection, String[]selectionArgs, String groupBy, String having, String orderBy, String limit);

//例子
String[] params = {"aaa"};
String[] columns= {"username", "usersex", "userage"};

Cursor cursor = sqLiteDatabase.query("userinfo", columns, "username = ?", params, null, null, null);//查询并获得游标
        if (cursor.moveToFirst()) {//判断游标是否为空
            for (int i = 0; i < cursor.getCount(); i++) {
                cursor.move(i);//移动到指定记录
                String username = cursor.getString(cursor.getColumnIndex("username");
                int userage= cursor.getInt(cursor.getColumnIndex("userage"));
            }
        }
return cursor;

//        Cursor.move( int offset); //以当前位置为参考,移动到指定行
//        Cursor.moveToFirst();    //移动到第一行
//        Cursor.moveToLast();     //移动到最后一行
//        Cursor.moveToPosition( int position); //移动到指定行
//        Cursor.moveToPrevious(); //移动到前一行
//        Cursor.moveToNext();     //移动到下一行
//        Cursor.isFirst();        //是否指向第一条
//        Cursor.isLast();     //是否指向最后一条
//        Cursor.isBeforeFirst();  //是否指向第一条之前
//        Cursor.isAfterLast();    //是否指向最后一条之后
//        Cursor.isNull( int columnIndex);  //指定列是否为空(列基数为0)
//        Cursor.isClosed();       //游标是否已关闭
//        Cursor.getCount();       //总数据项数
//        Cursor.getPosition();    //返回当前游标所指向的行数
//        Cursor.getColumnIndex(String columnName);//返回某列名对应的列索引值
//        Cursor.getString( int columnIndex);   //返回当前行指定列的值
 Android sqlite3数据库管理工具

 Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具。开发者可以方便的使用其对sqlite数据库进行命令行的操作。

 程序运行生成的*.db文件一般位于"/data/data/项目名(包括所处包名)/databases/*.db",因此要对数据库文件进行操作需要先找到数据库文件:

 1、进入shell 命令

 adb shell

 2、找到数据库文件

 #cd data/data
 #ls                --列出所有项目
 #cd project_name   --进入所需项目名
 #cd databases
 #ls                --列出现寸的数据库文件

 3、进入数据库

 #sqlite3 test_db   --进入所需数据库
 会出现类似如下字样:

 SQLite version 3.6.22
 Enter ".help" for instructions
 Enter SQL statements terminated with a ";"
 sqlite>
 至此,可对数据库进行sql操作。

 4、sqlite常用命令

 >.databases        --产看当前数据库
 >.tables           --查看当前数据库中的表
 >.help             --sqlite3帮助
 >.schema            --各个表的生成语句
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值