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数据类型的关联表
把数据类型搞定了…我们就开始使用我们的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 中查看在设备中我们保存的数据库文件在
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里面的方法 |
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 类 继承这个类我们同时要实现以下几个方法:
还有必须添加一个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 学习笔记所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)