[转][Android]Android数据的四种存储方式
android.database.sqlite
类 SQLiteQueryBuilder
java.lang.Object
android.database.sqlite.SQLiteQueryBuilder
public class SQLiteQueryBuilderextends Object
This is a convience class that helps build SQL queries to be sent to SQLiteDatabase objects.
构造方法摘要 | |
---|---|
SQLiteQueryBuilder() |
方法摘要 | |
---|---|
static void
|
appendColumns(StringBuilder s, String[] columns) Add the names that are non-null in columns to s, separating them with commas. |
void
|
appendWhere(CharSequence inWhere) Append a chunk to the WHERE clause of the query. |
void
|
appendWhereEscapeString(String inWhere) Append a chunk to the WHERE clause of the query. |
String
|
buildQuery(String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit) Construct a SELECT statement suitable for use in a group of SELECT statements that will be joined through UNION operators in buildUnionQuery. |
static String
|
buildQueryString(boolean distinct, String tables, String[] columns, String where, String groupBy, String having, String orderBy, String limit) Build an SQL query string from the given clauses. |
String
|
buildUnionQuery(String[] subQueries, String sortOrder, String limit) Given a set of subqueries, all of which are SELECT statements, construct a query that returns the union of what those subqueries return. |
String
|
buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, Set<String> columnsPresentInTable, int computedColumnsOffset, String typeDiscriminatorValue, String selection, String[] selectionArgs, String groupBy, String having) Construct a SELECT statement suitable for use in a group of SELECT statements that will be joined through UNION operators in buildUnionQuery. |
String
|
getTables() Returns the list of tables being queried |
Cursor
|
query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder) Perform a query by combining all current settings and the information passed into this method. |
Cursor
|
query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit) Perform a query by combining all current settings and the information passed into this method. |
void
|
setCursorFactory(SQLiteDatabase.CursorFactory factory) Sets the cursor factory to be used for the query. |
void
|
setDistinct(boolean distinct) Mark the query as DISTINCT. |
void
|
setProjectionMap(Map<String,String> columnMap) Sets the projection map for the query. |
void
|
setTables(String inTables) Sets the list of tables to query. |
Android提供以下四种存储方式:
- SharePreference
- SQLite
- File
- ContentProvider
- 根据Context的getSharedPrerences(key, [模式])方法获取SharedPreference对象;
- 利用SharedPreference的editor()方法获取Editor对象;
- 通过Editor的putXXX()方法,将键值对存储数据;
- 通过Editor的commit()方法将数据提交到SharedPreference内。
private String setCityName(String _cityName){City.getCity().setCityName(_cityName);Context ctx =MainActivity.this;SharedPreferences sp =ctx.getSharedPreferences("CITY", MODE_PRIVATE);Editor editor=sp.edit(); editor.putString("CityName", City.getCity().getCityName()); editor.commit(); return City.getCity().getCityName(); }
- 同样根据Context对象获取SharedPreference对象;
- 直接使用SharedPreference的getXXX(key)方法获取数据。
private String getCityName(){String cityName = City.getCity().getCityName();if(cityName==null ||cityName==""){ Context ctx =MainActivity.this; SharedPreferences sp =ctx.getSharedPreferences("CITY", MODE_PRIVATE); City.getCity().setCityName(sp.getString("CityName", "广州")); } return City.getCity().getCityName(); }
- getSharedPrerences(key, [模式])方法中,第一个参数其实对应到XML的文件名,相同key的数据会保存到同一个文件下。
- 使用SharedPreference的getXXX(key)方法获取数据的时候,如果key不存在的活,不会出现报错,会返回none。建议使用getXXX()的时候指定默认值。
SQLite是一个轻量级关系型数据库,既然是关系型数据库,那操作起来其实跟mysql、sql server差不多的。需要注意的一点是,SQLite只有NULL、INTEGER、REAL(浮点数)、TEXT(字符串)和BLOB(大数据)五种类型,不存在BOOLEAN和DATE类型。
String sql="create table t_user (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL,password TEXT NOT NULL)"; db.execSQL(sql);
ContentValues values=new ContentValues(); values.put("name", "liangjh"); values.put("password", "123456"); db.insert("t_user", "id", values);
// 方式1 直接将条件写入到条件里面(个人觉得容易被注入,但其实数据都在客户端,没啥安全性可言) db.delete("t_user", "id=1", null); // 方式2 条件分开写,感觉比较安全 db.delete("t_user", "name=? and password =?", new String[]{"weiyg","112233"});
// 使用rawQuery // Cursor c = db.rawQuery("select * from t_user", null); // db.rawQuery("select * from t_user where id=1", null); // db.rawQuery("select * from t_user where id=?", new String[]{"1"}); // 使用query() Cursor c = db.query("t_user", new String[]{"id","name"}, "name=?", new String[]{"weiyg"}, null, null, null); c.moveToFirst(); while(!c.isAfterLast()){ String msg=""; for(int i=0,j=c.getColumnCount();i<j;i++){ msg+="--"+c.getString(i); } Log.v("SQLite", "data:"+msg); c.moveToNext(); }
ContentValues values=new ContentValues(); values.put("password", "111111"); // 方式1 条件写在字符串内 db.update("t_user", values, "id=1", null); // 方式2 条件和字符串分开 db.update("t_user", values, "name=? or password=?",new String[]{"weiyg","123456"});
无论何时,打开的数据库,记得关闭。
db.close()
另外使用beginTransaction()和endTransaction()可以设置事务。
- 在A程序中定义一个ContentProvider,重载其增删查改等方法;
- 在A程序中的AndroidManifest.xml中注册ContentProvider;
- 在B程序中通过ContentResolver和Uri来获取ContentProvider的数据,同样利用Resolver的增删查改方法来获得和处理数据。
1 public class MyProvider extends ContentProvider { 2 3 @Override 4 public int delete(Uri uri, String selection, String[] selectionArgs) { 5 // TODO Auto-generated method stub 6 return 0; 7 } 8 9 @Override 10 public String getType(Uri uri) { 11 // TODO Auto-generated method stub 12 return null; 13 } 14 15 @Override 16 public Uri insert(Uri uri, ContentValues values) { 17 // TODO Auto-generated method stub 18 return null; 19 } 20 21 @Override 22 public boolean onCreate() { 23 // 新建个数据库并插入一条数据 24 SQLiteDatabase db=this.getContext().openOrCreateDatabase("test_db2.db", Context.MODE_PRIVATE, null); 25 db.execSQL("CREATE TABLE t_user (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL)"); 26 ContentValues values=new ContentValues(); 27 values.put("name", "liangjh2"); 28 db.insert("t_user", "id", values); 29 db.close(); 30 return false; 31 } 32 33 @Override 34 public Cursor query(Uri uri, String[] projection, String selection, 35 String[] selectionArgs, String sortOrder) { 36 // 获取数据 37 SQLiteDatabase db=this.getContext().openOrCreateDatabase("test_db2.db", Context.MODE_PRIVATE, null); 38 Cursor c = db.query("t_user", null, null, null, null, null, null); 39 db.close(); 40 return c; 41 } 42 43 @Override 44 public int update(Uri uri, ContentValues values, String selection, 45 String[] selectionArgs) { 46 // TODO Auto-generated method stub 47 return 0; 48 } 49 50 }
<application ...>...<provider android:name=".MyProvider" android:authorities="com.example.androidtestdemo" android:exported="true"/> </application>
Context ctx=MainActivity.this; ContentResolver resolver =ctx.getContentResolver(); Uri uri=Uri.parse("content://com.example.androidtestdemo"); Cursor c = resolver.query(uri, null, null, null, null); c.moveToFirst(); while(!c.isAfterLast()){ for(int i=0,j=c.getColumnCount();i<j;i++){ Log.v("Android2",""+c.getString(i)); } c.moveToNext(); }
转载于:https://www.cnblogs.com/ZhuRenWang/p/4859848.html
[转][Android]Android数据的四种存储方式相关推荐
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...
ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...
- Android数据的四种存储方式
很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQL ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File 之 —— SharedPreferences...
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值 对数据,通常用来存储一些简单的配置信息.其存储位置在/dat ...
- [置顶] Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite...
SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite...
SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...
- android数据的五种存储方式
Android提供了5种方式存储数据 1 使用SharedPreferences存储数据 它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息. 其存储位置在/da ...
- Android中Activity的四种启动方式
谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...
- 数据存储-大数据的三种存储方式
互联网时代各种存储框架层出不穷,眼花缭乱,比如传统的关系型数据库:Oracle.MySQL:新兴的NoSQL:HBase.Cassandra.Redis:全文检索框架:ES.Solr等.如何为自己的业 ...
- android 背景色阴影,Android 阴影背景的四种实现方式
先上图,看看最终个效果. 总的来说有二种手段来实现 1. 使用layer-list 2. 使用Elevant 使用layer-list layer-list的方式的就一层一层绘制叠加,下面的item总 ...
最新文章
- 《Android深度探索(卷1):HAL与驱动开发》——6.4节使用多种方式测试Linux驱动...
- MapReduce提交作业常见问题
- 如何用 CSS 和 D3 创作一个抽象的黑白交叠动画
- MYSQL免安装版-安装配置过程
- Spring注解原理学习之@Size and @Pattern
- 剑指offer之partition算法
- 2022的第一天,立个目标
- Java 8:在2分钟内将智能流与数据库一起使用
- pytorch查缺补漏之CUDA,自动求导
- 高效访问Internet-启用ISA Server的缓存
- onload、onunload 和 onbeforeunload的区别
- 软件测试mysql存储过程的用处实例_软件测试中实际应用:MySQL5存储过程编写
- Phase2 Day16 数据库SQL
- (杂谈)攻击者与开发者的无形碰撞--逻辑漏洞的挖掘实战及反思(一)
- MIT线性代数笔记二十八讲 相似矩阵和若尔当标准型
- 依据前端传递的数字等生成二维码图片
- petalinux(3)——创建APP
- HTML表格做个人简历
- 截取某个字符串之前的字符
- 文本标注工具--BRAT 安装