android 五种存储方式——Sqlite

来源:互联网 发布:开淘宝店怎么样 编辑:程序博客网 时间:2024/06/04 19:37

android的五种存储方式分别是:
1,SharedPreferences
2,file
3,sqlite
4,contentproviter
5,http

Sqlite

定义
1,SQLite是轻量级嵌入式数据库引擎
2,支持 SQL 语言
3,利用很少的内存就有很好的性能

SQLiteOpenHelper

//创建一个数据库,创建表结构,更新表结构public class SqliteDBHelper extends SQLiteOpenHelper {    public static final String DATABASE_NAME = "test_db";//数据库名字    public static final int VERSION = 1;//数据库版本    public static final String TABLE_NAME = "userinfo";//表名    // 数据库中创建一张表的与语句    public static final String CREATE_BOOK = "create table " + TABLE_NAME + " ("            + "id integer primary key autoincrement,"            + "username text,"            + "userage integer,"            + "usersex integer)";    // 重载构造方法    public SqliteDBHelper(Context context) {        super(context, DATABASE_NAME, null, VERSION);    }    //默认构造方法    public SqliteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);    }    //默认构造方法    public SqliteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {        super(context, name, factory, version, errorHandler);    }    //数据库第一次被创建时,onCreate()会被调用    @Override    public void onCreate(SQLiteDatabase db) {        //使用参数db,创建对象        db.execSQL(CREATE_BOOK);    }    //数据库版本变化时,会调用onUpgrade()    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

SqliteDBHelper

public class SqliteBase {    SqliteDBHelper sqliteDBHelper;//SqliteDBHelper实例,用于得到SQLiteDatabase实例,具体操作表结构    SQLiteDatabase sqLiteDatabase;//SQLiteDatabase实例,用于具体操作表数据    //初始化    public void initSql(Context context) {        sqliteDBHelper = new SqliteDBHelper(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 (SqliteDBHelper.VERSION != version) {            sqLiteDatabase.beginTransaction();// 开始事务            try {                if (version == 0) {                    // 执行我们的onCreate方法                    sqliteDBHelper.onCreate(sqLiteDatabase);                } else {                    // 如果我们应用升级了mNewVersion为2,而原版本为1则执行onUpgrade方法                    sqliteDBHelper.onUpgrade(sqLiteDatabase, version, SqliteDBHelper.VERSION);                }                sqLiteDatabase.setVersion(SqliteDBHelper.VERSION);// 设置最新版本                sqLiteDatabase.setTransactionSuccessful();// 设置事务成功            } finally {                sqLiteDatabase.endTransaction();// 结束事务            }        }        sqliteDBHelper.onOpen(sqLiteDatabase);    }}

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

使用sql语句添加

    public void insertBySql() {        String sql = "insert into userinfo(username,userage) values (?,?)";//插入操作的SQL语句        Object[] objects = {"bbb", 18};        sqLiteDatabase.execSQL(sql, objects);//执行SQL语句    }

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

使用sql语句删除

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

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

使用sql语句修改

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

使用sql语句查询

 public void queryBySql() {        Cursor result = sqLiteDatabase.rawQuery("SELECT username,usersex,userage FROM userinfo", 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            --各个表的生成语句
原创粉丝点击