Android数据库操作类实例 实体类:UserInfo.java
package
my.db;
import
java.io.Serializable;
import
android.graphics.drawable.Drawable;
public
class
UserInfo
implements
Serializable {
public
static
final
String
ID
=
"_id"
;
public
static
final
String
USERID
=
"userId"
;
public
static
final
String
TOKEN
=
"token"
;
public
static
final
String
TOKENSECRET
=
"tokenSecret"
;
public
static
final
String
USERNAME
=
"userName"
;
public
static
final
String
USERICON
=
"userIcon"
;
private
String
id
;
private
String
userId
;
// 用户id
private
String
token
;
private
String
tokenSecret
;
private
String
userName
;
private
Drawable
userIcon
;
//getter and setter省略
}
SqliteHelper类:
package my.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class SqliteHelper extends SQLiteOpenHelper{
//用来保存UserID、Access Token、Access Secret的表名
public static final String TB_NAME= "users";
public SqliteHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
//创建表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL( "CREATE TABLE IF NOT EXISTS "+
TB_NAME+ "("+
UserInfo. ID+ " integer primary key,"+
UserInfo. USERID+ " varchar,"+
UserInfo. TOKEN+ " varchar,"+
UserInfo. TOKENSECRET+ " varchar,"+
UserInfo. USERNAME+ " varchar,"+
UserInfo. USERICON+ " blob"+
")"
);
Log. e("Database" ,"onCreate" );
}
//更新表
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL( "DROP TABLE IF EXISTS " + TB_NAME );
onCreate(db);
Log. e("Database" ,"onUpgrade" );
}
//更新列
public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){
try{
db.execSQL( "ALTER TABLE " +
TB_NAME + " CHANGE " +
oldColumn + " "+ newColumn +
" " + typeColumn
);
} catch(Exception e){
e.printStackTrace();
}
}
}
CRUD类DataHelper:
package
my.db;
import
java.io.ByteArrayInputStream;
import
java.io.ByteArrayOutputStream;
import
java.util.ArrayList;
import
java.util.List;
import
android.content.ContentValues;
import
android.content.Context;
import
android.database.Cursor;
import
android.database.sqlite.SQLiteDatabase;
import
android.graphics.Bitmap;
import
android.graphics.drawable.Drawable;
import
android.util.Log;
public
class
DataHelper {
// 数据库名称
private
static
String
DB_NAME
=
"weibo.db"
;
// 数据库版本
private
static
int
DB_VERSION
= 2;
private
SQLiteDatabase
db
;
private
SqliteHelper
dbHelper
;
public
DataHelper(Context context) {
dbHelper
=
new
SqliteHelper(context,
DB_NAME
,
null
,
DB_VERSION
);
db
=
dbHelper
.getWritableDatabase();
}
public
void
Close() {
db
.close();
dbHelper
.close();
}
// 获取users表中的UserID、Access Token、Access Secret的记录
public
List<UserInfo> GetUserList(Boolean isSimple) {
List<UserInfo> userList =
new
ArrayList<UserInfo>();
Cursor cursor =
db
.query(SqliteHelper.
TB_NAME
,
null
,
null
,
null
,
null
,
null
, UserInfo.
ID
+
" DESC"
);
cursor.moveToFirst();
while
(!cursor.isAfterLast() && (cursor.getString(1) !=
null
)) {
UserInfo user =
new
UserInfo();
user.setId(cursor.getString(0));
user.setUserId(cursor.getString(1));
user.setToken(cursor.getString(2));
user.setTokenSecret(cursor.getString(3));
if
(!isSimple) {
user.setUserName(cursor.getString(4));
ByteArrayInputStream stream =
new
ByteArrayInputStream(cursor.getBlob(5));
Drawable icon = Drawable.createFromStream(stream,
"image"
);
user.setUserIcon(icon);
}
userList.add(user);
cursor.moveToNext();
}
cursor.close();
return
userList;
}
// 判断users表中的是否包含某个UserID的记录
public
Boolean HaveUserInfo(String UserId) {
Boolean b =
false
;
Cursor cursor =
db
.query(SqliteHelper.
TB_NAME
,
null
, UserInfo.
USERID
+
"=?"
,
new
String[]{UserId},
null
,
null
,
null
);
b = cursor.moveToFirst();
Log. e(
"HaveUserInfo"
, b.toString());
cursor.close();
return
b;
}
// 更新users表的记录,根据UserId更新用户昵称和用户图标
public
int
UpdateUserInfo(String userName, Bitmap userIcon, String UserId) {
ContentValues values =
new
ContentValues();
values.put(UserInfo.
USERNAME
, userName);
// BLOB类型
final
ByteArrayOutputStream os =
new
ByteArrayOutputStream();
// 将Bitmap压缩成PNG编码,质量为100%存储
userIcon.compress(Bitmap.CompressFormat.
PNG
, 100, os);
// 构造SQLite的Content对象,这里也可以使用raw
values.put(UserInfo.
USERICON
, os.toByteArray());
int
id =
db
.update(SqliteHelper.
TB_NAME
, values, UserInfo.
USERID
+
"=?"
,
new
String[]{UserId});
Log. e(
"UpdateUserInfo2"
, id +
""
);
return
id;
}
// 更新users表的记录
public
int
UpdateUserInfo(UserInfo user) {
ContentValues values =
new
ContentValues();
values.put(UserInfo.
USERID
, user.getUserId());
values.put(UserInfo.
TOKEN
, user.getToken());
values.put(UserInfo.
TOKENSECRET
, user.getTokenSecret());
int
id =
db
.update(SqliteHelper.
TB_NAME
, values, UserInfo.
USERID
+
"="
+ user.getUserId(),
null
);
Log. e(
"UpdateUserInfo"
, id +
""
);
return
id;
}
// 添加users表的记录
public
Long SaveUserInfo(UserInfo user) {
ContentValues values =
new
ContentValues();
values.put(UserInfo.
USERID
, user.getUserId());
values.put(UserInfo.
TOKEN
, user.getToken());
values.put(UserInfo.
TOKENSECRET
, user.getTokenSecret());
Long uid =
db
.insert(SqliteHelper.
TB_NAME
, UserInfo.
ID
, values);
Log. e(
"SaveUserInfo"
, uid +
""
);
return
uid;
}
// 添加users表的记录
public
Long SaveUserInfo(UserInfo user,
byte
[] icon) {
ContentValues values =
new
ContentValues();
values.put(UserInfo.
USERID
, user.getUserId());
values.put(UserInfo.
USERNAME
, user.getUserName());
values.put(UserInfo.
TOKEN
, user.getToken());
values.put(UserInfo.
TOKENSECRET
, user.getTokenSecret());
if
(icon!=
null
){
values.put(UserInfo.
USERICON
, icon);
}
Long uid =
db
.insert(SqliteHelper.
TB_NAME
, UserInfo.
ID
, values);
Log. e(
"SaveUserInfo"
, uid +
""
);
return
uid;
}
// 删除users表的记录
public
int
DelUserInfo(String UserId) {
int
id =
db
.delete(SqliteHelper.
TB_NAME
,
UserInfo.
USERID
+
"=?"
,
new
String[]{UserId});
Log. e(
"DelUserInfo"
, id +
""
);
return
id;
}
public
static
UserInfo getUserByName(String userName,List<UserInfo> userList){
UserInfo userInfo =
null
;
int
size = userList.size();
for
(
int
i=0;i<size;i++){
if
(userName.equals(userList.get(i).getUserName())){
userInfo = userList.get(i);
break
;
}
}
return
userInfo;
}
}