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();

1,我们到adb 中查看在设备中我们保存的数据库文件在
cd /data/data/<package_name>/databases
2,ls 命令看下

3,用sqlite3命令进入数据库

这样我们就看到我们刚才创建的表了…
这里给出插入操作的代码
- 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);
- }

剩下的操作…请阅读官方文档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 类
继承这个类我们同时要实现以下几个方法:
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()
自己参照文档补全吧