初识 sqlite 与 content provider 学习笔记

初识 sqlite 与 content provider 学习笔记,第1张

概述1,SQLite 简单使用 1,SQLite支持的数据类型 NULL. The value is a NULL value. INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value. REAL. The value is a 1,sqlite 简单使用

1,sqlite支持的数据类型

NulL. The value is a NulL value.

INTEGER. The value is a signed integer,stored in 1,2,3,4,6,or 8 bytes depending on the magnitude of the value.

REAL. The value is a floating point value,stored as an 8-byte IEEE floating point number.

TEXT. The value is a text string,stored using the database enCoding (UTF-8,UTF-16BE or UTF-16LE).

BLOB. The value is a blob of data,stored exactly as it was input.

2,相关数据库定义数据类型词与sqlite数据类型的关联表
Example Typenames From The
CREATE table Statement
or CAST Expression
Resulting Affinity Rule Used To Determine Affinity
INT
INTEGER
tinyint
SMALliNT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8
INTEGER 1
CHaraCTER(20)
VARCHAR(255)
varying CHaraCTER(255)
NCHAR(55)
NATIVE CHaraCTER(70)
NVARCHAR(100)
TEXT
CLOB
TEXT 2
BLOB
no datatype specifIEd
NONE 3
REAL
DOUBLE
DOUBLE PRECISION
float
REAL 4
NUMERIC
DECIMAL(10,5)
BOolEAN
DATE
DATETIME
NUMERIC 5

把数据类型搞定了…我们就开始使用我们的androID的sqlite了…

第一步:实现一个sqliteOpenHelper类
                          //创建一个继承sqliteOpenHelper类               publicclassMyOpenHelperextendssqliteOpenHelper{               //必须实现的一个构造方法publicMyOpenHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){super(context,name,factory,version);               //Todoauto-generatedconstructorstub}               //设置数据库初始化版本号               privatestaticfinalintDATABASE_VERSION=1;               //设置数据库创建的表名               privatestaticfinalStringtable_name="users";               //构建创建表的sql的语句               privatestaticfinalStringtable_CREATE_sql="CREATEtable"+               table_name+"(IDINTEGERprimarykey,nameTEXT)";               //自定义构造方法传入content,与数据库名字               publicMyOpenHelper(Contextcontext,Stringname){this(context,null,DATABASE_VERSION);}               //自定义构造方法传入用来升级数据库的版本号               publicMyOpenHelper(Contextcontext,intversion){               this(context,version);}@OverrIDepublicvoIDonCreate(sqliteDatabasedb){               //Todoauto-generatedmethodstub               Log.d("sqlite","sql-->Createtable"+table_CREATE_sql);               db.execsql(table_CREATE_sql);}               @OverrIDe               publicvoIDonUpgrade(sqliteDatabasedb,intoldVersion,intnewVersion){               //Todoauto-generatedmethodstub}}            

ok

第二步:使用MyOpenHelper
                      //某             String dataBasename = "employee"';             MyOpenHelper moh = new MyOpenHelper(sqlite_contentprovIDerActivity.this,dataBasename );             sqliteDatabase sdb = moh.getReadableDatabase();             toastsql = Toast.makeText(context,"创建数据库成功",Toast.LENGTH_LONG);             toastsql.show();           

650) this.width=650;" border="0" alt="" src="http://img.jb51.cc/vcimg/static/loading.png" src="http://img1.51cto.com/attachment/201202/230349622.png">

1,我们到adb 中查看在设备中我们保存的数据库文件在

cd /data/data/<package_name>/databases

2,ls 命令看下

650) this.width=650;" border="0" alt="" src="http://img.jb51.cc/vcimg/static/loading.png" src="http://img1.51cto.com/attachment/201202/230458374.png">

3,用sqlite3命令进入数据库

650) this.width=650;" border="0" alt="" src="http://img.jb51.cc/vcimg/static/loading.png" src="http://img1.51cto.com/attachment/201202/230509939.png">

这样我们就看到我们刚才创建的表了…

这里给出插入 *** 作的代码

                      Stringdatabasename="employee";             MyOpenHelpermoh=newMyOpenHelper(sqlite_contentprovIDerActivity.this,databasename);             //获取一个可写 *** 作             sqliteDatabasesdb=moh.getWritableDatabase();             ContentValuescv=newContentValues();             String[]name={"tom","achai","nevin","week"};             for(inti=0;i<name.length;i++){             cv.put("name",name[i]);             sdb.insert("users",cv);             }          

650) this.width=650;" border="0" alt="" src="http://img.jb51.cc/vcimg/static/loading.png" src="http://img1.51cto.com/attachment/201202/230518679.png">

剩下的 *** 作…请阅读官方文档sqliteDatabase里面的方法

2,创建属于自己的content provIDer

1,建立一个属于自己的content provIDer你必须要做 设置一个存储数据的地方,可以使用androID 提供的文件存储方法,或者使用sqlite databases,然而,你可以存储任何你想要的数据,androID提供的sqliteOpenHelper可以帮助你创建属于和管理你自己的数据库, 实现ContentProvIDer 提供用于访问数据的类 在AndroIDManifest.xml,声明你的 content provIDer 2,编写一个数据工具类
                              publicclassContentProvIDerData{                 publicstaticfinalStringAUTHORIY="kg.tom.FirstProvIDer";                 publicclassContentProvIDerData{                 //定义我们provIDer使用的认证uri                 publicstaticfinalStringAUTHORIY="kg.tom.FirstProvIDer";                 //定义我们数据库的名字                 publicstaticfinalStringDATABASE_name="kg_tom_pro_test";                 //定义数据库的版本号                 publicstaticfinalintDATABASE_VERSION=1;                 //定义创建表的名字                 publicstaticfinalStringUSERS_table_name="users";                 //实现BaseColums,自带两列,_ID,_count                 publicstaticfinalclassUsertableMetaDataimplementsBaseColumns{                 //定义创建表的名字                 publicstaticfinalStringtable_name="users";                 //定义provIDer的uri                 publicstaticfinalUriCONTENT_URI=Uri.parse("content://"+AUTHORIY+"/users");                 //定义一条数据的类型                 publicstaticfinalStringCONTENT_TYPE="vnd.androID.cursor.dir/vnd.firstprovIDer.user";                 //定义一组数据的类型                 publicstaticfinalStringCONTENT_TYPE_ITEM="vnd.androID.cursor.item/vnd.fiRSStprovIDer.user";                 //定义列名                 publicstaticfinalStringUSER_name="name";                 //定义排序规则                 publicstaticfinalStringDEFulT_SORT_ORDER="_IDdesc";                 }}               
2,继承content provIDer 类

继承这个类我们同时要实现以下几个方法:

query()
insert()
update()
delete()
getType()
onCreate()

还有必须添加一个UriMatcher对象

关于UriMatcher对象的使用文档有很好的解释

                      //定义URI标识符,数值定义请参考文档             publicstaticfinalintINCOMING_USER_ColLECTION=1;             publicstaticfinalintINCOMING_USER_SINGLE=2;             //定义UriMatcher对象             publicstaticfinalUriMatcheruMatcher;             //把标识符加入到URI中,固定写法             static{             uMatcher=newUriMatcher(UriMatcher.NO_MATCH);             //第一个参数为             contentprovIDerauthoriy             uMatcher.addURI(AUTHORIY,"users",INCOMING_USER_ColLECTION);             uMatcher.addURI(AUTHORIY,"users/#",INCOMING_USER_SINGLE);}          

一个完整的content provIDer

                      publicclassFirstProvIDerextendsContentProvIDer{             //定义URI标识符             publicstaticfinalintINCOMING_USER_ColLECTION=1;             publicstaticfinalintINCOMING_USER_SINGLE=2;             //定义UriMatcher对象             publicstaticfinalUriMatcheruMatcher;             //把标识符加入到URI中,固定写法             static{             uMatcher=newUriMatcher(UriMatcher.NO_MATCH);uMatcher.addURI(ContentProvIDerData.AUTHORIY,INCOMING_USER_ColLECTION);             uMatcher.addURI(ContentProvIDerData.AUTHORIY,INCOMING_USER_SINGLE);}             //这里是定义查询用的列名的别名             publicstaticHashMap<String,String>userMap;             privateDataBaseHelperdh;             static{             userMap=newHashMap<String,String>();             userMap.put(UsertableMetaData._ID,"ID");             userMap.put(UsertableMetaData.USER_name,            UsertableMetaData.USER_name);}             @OverrIDe             publicintdelete(Uriuri,Stringselection,String[]selectionArgs){             //Todoauto-generatedmethodstub             return0;}             //根据传入的URI             @OverrIDe             publicStringgetType(Uriuri){             //Todoauto-generatedmethodstub             Log.d("sqlite","getType-->");             switch(uMatcher.match(uri)){             caseINCOMING_USER_ColLECTION:             returnUsertableMetaData.CONTENT_TYPE;             caseINCOMING_USER_SINGLE:             returnUsertableMetaData.CONTENT_TYPE_ITEM;default:             thrownewIllegalArgumentException("unKNownuri"+uri);}}             @OverrIDe             publicUriinsert(Uriuri,ContentValuesvalues){             //Todoauto-generatedmethodstub             Log.d("insert","class"+getClass());             Log.d("insert","content"+getContext());             sqliteDatabasedb=dh.getWritableDatabase();             longrowID=db.insert(UsertableMetaData.table_name,values);             if(rowID>0){             UriinsertUri=ContentUris.withAppendedID             (UsertableMetaData.CONTENT_URI,rowID);             getContext().getContentResolver().notifyChange(insertUri,null);             returninsertUri;}             returnnull;}             @OverrIDe             publicbooleanonCreate(){             //Todoauto-generatedmethodstub             Log.d("sqlite","createPro--->");             dh=newDataBaseHelper(getContext(),ContentProvIDerData.DATABASE_name);             //sqliteDatabasedb=dh.getReadableDatabase();returntrue;}             @OverrIDe             publicCursorquery(Uriuri,String[]projection,            String[]selectionArgs,StringsortOrder){             //Todoauto-generatedmethodstub             sqlitequeryBuilderqb=newsqlitequeryBuilder();             switch(uMatcher.match(uri)){             caseINCOMING_USER_ColLECTION:             qb.settables(UsertableMetaData.table_name);             qb.setProjectionMap(userMap);             break;             caseINCOMING_USER_SINGLE:             qb.settables(UsertableMetaData.table_name);             qb.setProjectionMap(userMap);             qb.appenDWhere(UsertableMetaData._ID+"="+             uri.getPathSegments().get(1));             break;}             StringorderBy;             if(TextUtils.isEmpty(sortOrder)){             orderBy=UsertableMetaData.DEFulT_SORT_ORDER;}else{             orderBy=sortOrder;}             sqliteDatabasedb=dh.getWritableDatabase();             Cursorc=qb.query(db,projection,selection,            selectionArgs,sortOrder);             c.setNotificationUri(getContext().getContentResolver(),uri);             Log.d("sqlite","first--->>");returnc;}             @OverrIDe             publicintupdate(Uriuri,ContentValuesvalues,            String[]selectionArgs){             //Todoauto-generatedmethodstub             return0;}}          

3,在activity中的方法中用上这几行代码就可以进行插入

                      //定义插入用数据的对象,本质是一个             mapContentValuesvalues=newContentValues();             //键,值对values.put("ID",1);             //定义表名             Stringname=ContentProvIDerData.USERS_table_name;             //键值对             values.put(ContentProvIDerData.UsertableMetaData.USER_name,"tom");             //进行contentprovIDer的插入 *** 作             Uriuri=getContentResolver().insert(             ContentProvIDerData.UsertableMetaData.CONTENT_URI,values);          

至于剩下的

query()

delete()

自己参照文档补全吧

总结

以上是内存溢出为你收集整理的初识 sqlite 与 content provider 学习笔记全部内容,希望文章能够帮你解决初识 sqlite 与 content provider 学习笔记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1176970.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存