您的位置:首页 > 移动开发 > Android开发

学习笔记 新浪微博篇 六 Android SQLite 部署篇

2016-09-27 11:12 447 查看

1. 首先我们要创建自己的DBHelper类继承SQLiteOpenHelper

作用:这是用来初始化数据库和更新数据库的

位置package DB;

public class DBHelper extends SQLiteOpenHelper{

public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context,name, factory,version);

}

@Override
public void onCreate(SQLiteDatabase db) {
//初始化表
db.execSQL(DBinfo.Table.CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}


2.然后我们创建DBinfo类 (里面有静态类,静态类里都是静态属性)

这个类是用来封装SQ语句的 还有一些DB的名称和版本

例如DBHelper类里db.execSQL(DBinfo.Table.CREATE_TABLE);这个函数,就是利用了DBinfo类进行数据库操作

位置package DB;

public class DBinfo
{
public static class DB
{
//数据库名称
public static final String DB_NAME="weibo";
//数据库版本
public static final int VERSION=1;

}
public static class Table{
数据,删除库创建
public static final String TABLE_NAME="User";
public static final String CREATE_TABLE1="CREATE TABLE IF NOT EXISTS"+TABLE_NAME+"( _id INTEGER PRIMARY KEY AUTOINCREMENT,uerId TEXT,userName TEXT,token TEXT,tokenSecret TEXT,isDefault TEXT,userIcon BLOB)";
public static final String CREATE_TABLE="CREATE TABLE IF NOT EXISTS"+" "+TABLE_NAME+"("
+"_id INTEGER PRIMARY KEY AUTOINCREMENT,"
+"userId TEXT,"
+"userName TEXT,"
+"token TEXT,"
+"tokenSecret TEXT,"
+"isDefault TEXT,"
+"userIcon BLOB)";
public static final String DROP_TABLE="DROP TABLE"+TABLE_NAME;
}
}


3. 创建Dao,创建UserInfo类,是一个JAVABEAN,用来统一存储数据

位置package Bean;

import android.graphics.drawable.Drawable;

//用于传入数据

public class UserInfo {
private int _id;
private String userId;
private String userName;
private String token;
private String tokenSecret;
private String isDefault;
private Drawable userIcon;

public UserInfo( String userId, String userName, String token, String tokenSecret, String isDefault) {
this.userId = userId;
this.userName = userName;
this.token = token;
this.tokenSecret = tokenSecret;
this.isDefault = isDefault;
}

public int get_id() {
return _id;
}

public void set_id(int _id) {
this._id = _id;
}

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getToken() {
return token;
}

public void setToken(String token) {
this.token = token;
}

public String getTokenSecret() {
return tokenSecret;
}

public void setTokenSecret(String tokenSecret) {
this.tokenSecret = tokenSecret;
}

public String getIsDefault() {
return isDefault;
}

public void setIsDefault(String isDefault) {
this.isDefault = isDefault;
}

public Drawable getUserIcon() {
return userIcon;
}

public void setUserIcon(Drawable userIcon) {
this.userIcon = userIcon;
}
}


4.这里是进行数据库实际操作的类

里面包含数据库建立 增加 修改 查询操作

位置Service包

public class UserInfoServices {
这种只是说明变量
private static  DBHelper dbHelper;
private  UserInfo userInfo=new UserInfo();

private String[] couloms=new String[]{userInfo.ID,userInfo.USER_ID,userInfo.USER_NAME,userInfo.TOKEN,
userInfo.TOKEN_SECRET,userInfo.IS_DEFAULT,userInfo.USER_ICON};创建数据库放在构造函数中进行

public UserInfoServices(Context context)
{
//这种才是实例化对象
dbHelper=new DBHelper(context, DBinfo.DB.DB_NAME,null,DBinfo.DB.VERSION);
dbHelper.getWritableDatabase();
}

创建数据库,表

添加用户信息

public void insertUserInfo(UserInfo userInfo){
SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues values= new ContentValues();
values.put("userId",userInfo.getUserId());
values.put("userName",userInfo.getUserName());
values.put("token",userInfo.getToken());
values.put("tokenSecret",userInfo.getTokenSecret());
values.put("isDefault",userInfo.getIsDefault());
db.insert(DBinfo.Table.TABLE_NAME,null,values);
db.close();
}

更新用户信息

public void updateUserInfo(UserInfo userInfo){
SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("token",userInfo.getToken());
values.put("tokenSecret",userInfo.getTokenSecret());
db.update(DBinfo.Table.TABLE_NAME,values,"userId=?",new String[]{userInfo.getUserId()});
db.close();

}

查询用户userId

public String getUserId(String id){

SQLiteDatabase db = dbHelper.getReadableDatabase();

Cursor cursor = db.query(DBinfo.Table.TABLE_NAME, null, "userId=?", new String[]{id}, null, null, null);

if(null != cursor &&  cursor.getCount() >0) {
cursor.close();
db.close();
return "1111";
}else{
cursor.close();
db.close();
return null;
}

}

获取数据库中所有的数据,放在集合中

public List<UserInfo> findAllUsers()
private Handler handler只是声明变量,如果有空指针一定要实例化,这里可以放在构造函数中进行
{
SQLiteDatabase db =dbHelper.getReadableDatabase();
List<UserInfo> users=new ArrayList<UserInfo>();
Cursor cursor = db.query(DBinfo.Table.TABLE_NAME,null, null, null, null, null, null);

if(null != cursor &&  cursor.getCount() >0)
{
UserInfo userInfo ;
while(cursor.moveToNext())
{

userInfo = new UserInfo();

int id =cursor.getInt(cursor.getColumnIndex("_id"));
String uId = cursor.getString(cursor.getColumnIndex("userId"));
String userName = cursor.getString(cursor.getColumnIndex("userName"));
String token = cursor.getString(cursor.getColumnIndex("token"));
String tokenSecret = cursor.getString(cursor.getColumnIndex("tokenSecret"));
String isDefault = cursor.getString(cursor.getColumnIndex("isDefault"));
byte[] byteIcon = cursor.getBlob(cursor.getColumnIndex("userIcon"));

userInfo.set_id(id);
userInfo.setUserId(uId);
userInfo.setIsDefault(isDefault);
userInfo.setToken(token);
userInfo.setTokenSecret(tokenSecret);
userInfo.setToken(token);
userInfo.setUserName(userName);

if(null !=byteIcon)
{

ByteArrayInputStream is = new ByteArrayInputStream(byteIcon);
Drawable userIcon=Drawable.createFromStream(is, "image");

userInfo.setUserIcon(userIcon);
}

users.add(userInfo);

}

}

cursor.close();
db.close();

return users;

}
}


5. 最后一步,在Activity类中写入你要创建数据库和表的语句UserInfoServices来具体实现SQ操作

位置你的activity包

public class AccessActivity extends Activity {
private JavascriptUtil javascriptUtil=new JavascriptUtil();
private String data;
private AutoUtil autoUtil=new AutoUtil();
private UserInfoServices userInfoServices=new UserInfoServices();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
data=javascriptUtil.PIN;
do{
data=javascriptUtil.PIN;
//不停地去读data的值,知道读到为止,因为view.loadUrl("javascript:window.Methods.getPin('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
//和Intent是异步处理的,当处理第一个的时候,不等结果返回就会执行Intent,实现页面的跳转
}while(data==null);
autoUtil.getAccessToken(data);
userInfoServices=new UserInfoServices(getApplicationContext());//创建表,具体实现有UserInfoServices来实现

if(userInfoServices.getUserId(autoUtil.userId)==null) {//插入语信息具体实现由UserInfoServices
userInfoServices.insertUserInfo(new UserInfo(autoUtil.userId, autoUtil.accessToken.getScreenName(), autoUtil.token, autoUtil.tokenSecret, "1"));
}else{//更新语信息具体实现由UserInfoServices
userInfoServices.updateUserInfo(new UserInfo(autoUtil.userId, autoUtil.accessToken.getScreenName(), autoUtil.token, autoUtil.tokenSecret, "1"));
}
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
}


6.另外关于SQ里有没有信息

userInfoServices=new UserInfoServices(getApplicationContext());
list=userInfoServices.findAllUsers();
if(list==null||list.isEmpty()){
Intent intent=new Intent(getApplicationContext(),AuthActivity.class);
startActivity(intent);
finish();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息