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 { // 如果我们应用升级了mNewVersion为2,而原版本为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 --各个表的生成语句