<b>NULL</b>. The value is a NULL value.
<b>INTEGER</b>. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
<b>REAL</b>. The value is a floating point value, stored as an 8-byte IEEE floating point number.
<b>TEXT</b>. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16LE).
<b>BLOB</b>. The value is a blob of data, stored exactly as it was input.
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類
public class MyOpenHelper extends SQLiteOpenHelper{
//必須實作的一個構造方法public MyOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version);
// TODO Auto-generated constructor stub }
//設定資料庫初始化版本号
private static final int DATABASE_VERSION = 1;
//設定資料庫建立的表名
private static final String TABLE_NAME = "users";
//建構建立表的 SQL 的語句
private static final String TABLE_CREATE_SQL = "CREATE TABLE " +
TABLE_NAME+"(id INTEGER primary key,name TEXT)";
//自定義構造方法傳入content,與資料庫名字
public MyOpenHelper(Context context,String name){ this(context,name,null,DATABASE_VERSION); }
//自定義構造方法傳入用來更新資料庫的版本号
public MyOpenHelper(Context context,String name,int version){
this(context,name,null,version); } @Override public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.d("sqlite","sql-->CreateTable"+ TABLE_CREATE_SQL);
db.execSQL(TABLE_CREATE_SQL); }
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub } }
ok
//某
String dataBaseName = "employee"';
MyOpenHelper moh = new MyOpenHelper(Sqlite_contentproviderActivity.this,dataBaseName );
SQLiteDatabase sdb = moh.getReadableDatabase();
toastSQL = Toast.makeText(context, "建立資料庫成功", Toast.LENGTH_LONG);
toastSQL.show();
<a target="_blank" href="http://blog.51cto.com/attachment/201202/230349622.png"></a>
<code>cd /data/data/<package_name>/databases</code>
<a target="_blank" href="http://blog.51cto.com/attachment/201202/230458374.png"></a>
3,用sqlite3指令進入資料庫
<a target="_blank" href="http://blog.51cto.com/attachment/201202/230509939.png"></a>
這樣我們就看到我們剛才建立的表了…
這裡給出插入操作的代碼
String databaseName = "employee";
MyOpenHelper moh = new MyOpenHelper(Sqlite_contentproviderActivity.this, databaseName);
//擷取一個可寫操作
SQLiteDatabase sdb = moh.getWritableDatabase();
ContentValues cv = new ContentValues();
String[] name = {"tom","achai","nevin","week"};
for (int i = 0; i < name.length; i++) {
cv.put("name", name[i]);
sdb.insert("users", null, cv);
}
<a target="_blank" href="http://blog.51cto.com/attachment/201202/230518679.png"></a>
剩下的操作…請閱讀官方文檔SQLiteDatabase裡面的方法
設定一個存儲資料的地方,可以使用android 提供的檔案存儲方法,或者使用SQLite databases,然而,你可以存儲任何你想要的資料,android提供的SQLiteOpenHelper可以幫助你建立屬于和管理你自己的資料庫,
實作ContentProvider 提供用于通路資料的類
在AndroidManifest.xml,聲明你的 content provider
public class ContentProviderData {
public static final String AUTHORIY = "kg.tom.FirstProvider";
public class ContentProviderData {
//定義我們provider使用的認證uri
public static final String AUTHORIY = "kg.tom.FirstProvider";
//定義我們資料庫的名字
public static final String DATABASE_NAME = "kg_tom_pro_test";
//定義資料庫的版本号
public static final int DATABASE_VERSION = 1;
//定義建立表的名字
public static final String USERS_TABLE_NAME = "users" ;
//實作BaseColums,自帶兩列,_id,_count
public static final class UserTableMetaData implements BaseColumns{
//定義建立表的名字
public static final String TABLE_NAME = "users";
//定義provider的uri
public static final Uri CONTENT_URI = Uri.parse("content://"+AUTHORIY + "/users");
//定義一條資料的類型
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.firstprovider.user";
//定義一組資料的類型
public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.firsstprovider.user";
//定義列名
public static final String USER_NAME = "name";
//定義排序規則
public static final String DEFULT_SORT_ORDER = "_id desc";
} }
繼承這個類我們同時要實作以下幾個方法:
<code>query()</code>
<code>insert()</code>
<code>update()</code>
<code>delete()</code>
<code>getType()</code>
<code>onCreate()</code>
還有必須添加一個UriMatcher對象
關于UriMatcher對象的使用文檔有很好的解釋
//定義URI辨別符,數值定義請參考文檔
public static final int INCOMING_USER_COLLECTION = 1;
public static final int INCOMING_USER_SINGLE = 2;
//定義UriMatcher對象
public static final UriMatcher uMatcher;
//把辨別符加入到URI中,固定寫法
static{
uMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//第一個參數為
content provider authoriy
uMatcher.addURI(AUTHORIY, "users", INCOMING_USER_COLLECTION);
uMatcher.addURI(AUTHORIY, "users/#", INCOMING_USER_SINGLE);}
一個完整的content provider
public class FirstProvider extends ContentProvider {
//定義URI辨別符
public static final int INCOMING_USER_COLLECTION = 1;
public static final int INCOMING_USER_SINGLE = 2;
//定義UriMatcher對象
public static final UriMatcher uMatcher;
//把辨別符加入到URI中,固定寫法
static{
uMatcher = new UriMatcher(UriMatcher.NO_MATCH); uMatcher.addURI(ContentProviderData.AUTHORIY, "users", INCOMING_USER_COLLECTION);
uMatcher.addURI(ContentProviderData.AUTHORIY, "users/#", INCOMING_USER_SINGLE); }
//這裡是定義查詢用的列名的别名
public static HashMap<String , String> userMap;
private DataBaseHelper dh;
userMap = new HashMap<String, String>();
userMap.put(UserTableMetaData._ID, "id");
userMap.put(UserTableMetaData.USER_NAME,
UserTableMetaData.USER_NAME); }
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0; }
//根據傳入的URI
public String getType(Uri uri) {
Log.d("sqlite", "getType-->");
switch(uMatcher.match(uri)){
case INCOMING_USER_COLLECTION:
return UserTableMetaData.CONTENT_TYPE;
case INCOMING_USER_SINGLE:
return UserTableMetaData.CONTENT_TYPE_ITEM; default:
throw new IllegalArgumentException("unKnown uri" + uri); } }
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
Log.d("insert", "class" + getClass());
Log.d("insert", "content" + getContext());
SQLiteDatabase db = dh.getWritableDatabase();
long rowId = db.insert(UserTableMetaData.TABLE_NAME, null, values);
if(rowId > 0){
Uri insertUri = ContentUris.withAppendedId
(UserTableMetaData.CONTENT_URI, rowId);
getContext().getContentResolver().notifyChange(insertUri, null);
return insertUri; }
return null; }
public boolean onCreate() {
Log.d("sqlite", "createPro--->");
dh = new DataBaseHelper(getContext(), ContentProviderData.DATABASE_NAME);
// SQLiteDatabase db = dh.getReadableDatabase(); return true; }
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(UserTableMetaData.TABLE_NAME);
qb.setProjectionMap(userMap);
break;
qb.appendWhere(UserTableMetaData._ID+ "=" +
uri.getPathSegments().get(1) );
break; }
String orderBy;
if(TextUtils.isEmpty(sortOrder)){
orderBy = UserTableMetaData.DEFULT_SORT_ORDER; }else{
orderBy = sortOrder; }
Cursor c = qb.query(db, projection, selection,
selectionArgs, null, null, sortOrder);
c.setNotificationUri(getContext().getContentResolver(), uri);
Log.d("sqlite", "first--->>"); return c; }
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
return 0; } }
3,在activity中的方法中用上這幾行代碼就可以進行插入
//定義插入用資料的對象,本質是一個
map ContentValues values = new ContentValues();
//鍵,值對 values.put("id", 1);
//定義表名
String name = ContentProviderData.USERS_TABLE_NAME;
//鍵值對
values.put(ContentProviderData.UserTableMetaData.USER_NAME, "tom");
//進行content provider 的插入操作
Uri uri = getContentResolver().insert(
ContentProviderData.UserTableMetaData.CONTENT_URI, values);
至于剩下的
query()
delete()
自己參照文檔補全吧
本文轉自 liam2199 部落格,原文連結:http://blog.51cto.com/youxilua/773107 如需轉載請自行聯系原作者