Android開発(三)データベースストレージ

90952 ワード

1、Sqliteデータベースを使用してユーザーの情報を保存し、ここで二つの表t_が建てられたuser,t_address.t_userはユーザ情報を格納し、t_addressは、ユーザのアドレス情報を格納する.
UserInfo対応t_を表すには、2つのクラスを使用します.userテーブル、Addressクラス対応t_address、パッケージcom.diandianmi.modelに2つのクラスがあります.詳細は次のとおりです.
UserInfoクラス

   
   
   
   
1 package com.diandianmi.model; 2 3 import java.sql.Timestamp; 4 5 import android.graphics.Bitmap; 6 7 public class UserInfo { 8 public static final String ID = " _id " ; // Id 9 public static final String USERID = " userid " ; // Id 10 public static final String NAME = " name " ; // 11 public static final String NICKNAME = " nickname " ; // 12 public static final String PASSWORD = " password " ; // 13 public static final String SEX = " sex " ; // 14 public static final String ICON = " icon " ; // 15 public static final String EMAIL = " email " ; // 16 public static final String CELLPHONE = " cellphone " ; // 17 public static final String TELEPHONE = " telephone " ; // 18 public static final String CONSTELLATION = " constellation " ; // 19 public static final String BLOODTYPE = " bloodtype " ; // 20 public static final String HONOR = " honor " ; // 21 public static final String HONESTY = " honesty " ; // 22 public static final String MONEY = " money " ; // 23 public static final String HOBBY = " hobby " ; // 24 public static final String ORIGINALADDRESS = " originaladdress " ; // 25 public static final String CURRENTADDRESS = " currentAddress " ; // 26 public static final String REGISTERTIME = " registertime " ; // 27 28 private int id; 29 private String userId; 30 private String name; 31 private String nickname; 32 private String password; 33 private String sex; 34 private Bitmap icon; 35 private String email; 36 private String cellphone; 37 private String telephone; 38 private String constellation; 39 private String bloodType; 40 private int honor; 41 private int honesty; 42 private int money; 43 private String hobby; 44 private Address originalAddress; 45 private Address currentAddress; 46 private Timestamp registerTime; 47 public int getId() { 48 return id; 49 } 50 public void setId( int id) { 51 this .id = id; 52 } 53 public String getUserId() { 54 return userId; 55 } 56 public void setUserId(String userId) { 57 this .userId = userId; 58 } 59 public String getName() { 60 return name; 61 } 62 public void setName(String name) { 63 this .name = name; 64 } 65 public String getPassword() { 66 return password; 67 } 68 public void setPassword(String password) { 69 this .password = password; 70 } 71 public Bitmap getIcon() { 72 return icon; 73 } 74 public void setIcon(Bitmap icon) { 75 this .icon = icon; 76 } 77 public String getEmail() { 78 return email; 79 } 80 public void setEmail(String email) { 81 this .email = email; 82 } 83 84 public String getConstellation() { 85 return constellation; 86 } 87 public void setConstellation(String constellation) { 88 this .constellation = constellation; 89 } 90 public String getBloodType() { 91 return bloodType; 92 } 93 public void setBloodType(String bloodType) { 94 this .bloodType = bloodType; 95 } 96 public int getHonor() { 97 return honor; 98 } 99 public void setHonor( int honor) { 100 this .honor = honor; 101 } 102 public int getHonesty() { 103 return honesty; 104 } 105 public void setHonesty( int honesty) { 106 this .honesty = honesty; 107 } 108 public int getMoney() { 109 return money; 110 } 111 public void setMoney( int money) { 112 this .money = money; 113 } 114 public Address getOriginalAddress() { 115 return originalAddress; 116 } 117 public void setOriginalAddress(Address originalAddress) { 118 this .originalAddress = originalAddress; 119 } 120 public Address getCurrentAddress() { 121 return currentAddress; 122 } 123 public void setCurrentAddress(Address currentAddress) { 124 this .currentAddress = currentAddress; 125 } 126 public Timestamp getRegisterTime() { 127 return registerTime; 128 } 129 public void setRegisterTime(Timestamp registerTime) { 130 this .registerTime = registerTime; 131 } 132 public String getHobby() { 133 return hobby; 134 } 135 public void setHobby(String hobby) { 136 this .hobby = hobby; 137 } 138 public String getTelephone() { 139 return telephone; 140 } 141 public void setTelephone(String telephone) { 142 this .telephone = telephone; 143 } 144 public String getCellphone() { 145 return cellphone; 146 } 147 public void setCellphone(String cellphone) { 148 this .cellphone = cellphone; 149 } 150 public String getSex() { 151 return sex; 152 } 153 public void setSex(String sex) { 154 this .sex = sex; 155 } 156 public String getNickname() { 157 return nickname; 158 } 159 public void setNickname(String nickname) { 160 this .nickname = nickname; 161 } 162 163 } 164

UserInfoListクラス

   
   
   
   
1 package com.diandianmi.model; 2 3 import java.util.ArrayList; 4 5 public class UserInfoList extends ArrayList < UserInfo > { 6 7 } 8

Addressクラス

   
   
   
   
1 package com.diandianmi.model; 2 3 public class Address { 4 5 public static final String ID = " _id " ; // Id 6 public static final String PROVINCE = " province " ; // 7 public static final String CITY = " city " ; // 8 public static final String COUNTY = " county " ; // 9 public static final String TOWN = " town " ; // 10 public static final String STREET = " street " ; // 11 12 private String province; 13 private String city; 14 private String county; 15 private String town; 16 private String street; 17 public String getProvince() { 18 return province; 19 } 20 public void setProvince(String province) { 21 this .province = province; 22 } 23 public String getCity() { 24 return city; 25 } 26 public void setCity(String city) { 27 this .city = city; 28 } 29 public String getCounty() { 30 return county; 31 } 32 public void setCounty(String county) { 33 this .county = county; 34 } 35 public String getTown() { 36 return town; 37 } 38 public void setTown(String town) { 39 this .town = town; 40 } 41 public String getStreet() { 42 return street; 43 } 44 public void setStreet(String street) { 45 this .street = street; 46 } 47 } 48

2、SqliteHelperクラスはSQLiteOpenHelperを継承し、データベースを操作する.SQLiteOpenHelperは、Androidが提供するデータベースを管理するツールクラスで、データベースの作成とバージョンの更新を管理できます.SQLiteOpenHelperのサブクラスを作成し、そのonCreate(SQLiteDatabase db)メソッドとonUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)メソッドを拡張するのが一般的です.サービス操作クラスとしてcom.diandianmi.serviceを構築します.
SqliteHelperクラス

   
   
   
   
1 package com.diandianmi.service; 2 3 import com.diandianmi.model.UserInfo; 4 5 import android.content.Context; 6 import android.database.sqlite.SQLiteDatabase; 7 import android.database.sqlite.SQLiteDatabase.CursorFactory; 8 import android.database.sqlite.SQLiteOpenHelper; 9 10 public class SqliteHelper extends SQLiteOpenHelper { 11 12 public static final String TB_NAME = " t_user " ; 13 public static final String TB_ADDRESS = " t_address " ; 14 15 public SqliteHelper(Context context, String name, CursorFactory factory, 16 int version) { 17 super (context, name, factory, version); 18 } 19 20 @Override 21 public void onCreate(SQLiteDatabase db) { 22 String sql = " CREATE TABLE IF NOT EXISTS " + 23 TB_NAME + " ( " + 24 UserInfo.ID + " integer primary key, " + 25 UserInfo.USERID + " varchar(100), " + 26 UserInfo.NAME + " varchar(100), " + 27 UserInfo.NICKNAME + " varchar(100), " + 28 UserInfo.PASSWORD + " varchar(100), " + 29 UserInfo.SEX + " varchar(10), " + 30 UserInfo.EMAIL + " varchar(255), " + 31 UserInfo.TELEPHONE + " varchar(12), " + 32 UserInfo.CELLPHONE + " varchar(11), " + 33 UserInfo.CONSTELLATION + " varchar(10), " + 34 UserInfo.BLOODTYPE + " varchar(5), " + 35 UserInfo.HONOR + " integer, " + 36 UserInfo.HONESTY + " integer, " + 37 UserInfo.MONEY + " integer, " + 38 UserInfo.HOBBY + " varchar(255), " + 39 UserInfo.REGISTERTIME + " varchar(20), " + 40 UserInfo.ICON + " blob " + 41 " ) " ; 42 db.execSQL(sql); 43 44 sql = " CREATE TABLE IF NOT EXISTS " + 45 TB_ADDRESS + " ( " + 46 " _id integer primary key, " + 47 " userid varchar(100), " + 48 " province varchar(5), " + 49 " city varchar(10), " + 50 " country varchar(20), " + 51 " town varchar(50), " + 52 " street varchar(100) " + 53 " ) " ; 54 db.execSQL(sql); 55 } 56 57 @Override 58 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 59 db.execSQL( " DROP TABLE IF EXISTS " + TB_NAME); 60 db.execSQL( " DROP TABLE IF EXISTS " + TB_ADDRESS); 61 onCreate(db); 62 } 63 64 } 65

3.データベースの操作を行うDatabaseSerivceクラス.

   
   
   
   
1 package com.diandianmi.service; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.sql.Timestamp; 6 7 import com.diandianmi.model.UserInfo; 8 import com.diandianmi.model.UserInfoList; 9 10 import android.content.ContentValues; 11 import android.content.Context; 12 import android.database.Cursor; 13 import android.database.sqlite.SQLiteDatabase; 14 import android.graphics.Bitmap; 15 import android.graphics.BitmapFactory; 16 17 public class DataBaseService { 18 private static String DB_NAME = " diandianmi.db " ; 19 private static int DB_VERSION = 1 ; 20 private SQLiteDatabase db; 21 private SqliteHelper dbHelper; 22 23 public DataBaseService(Context context){ // , 。 24 dbHelper = new SqliteHelper(context,DB_NAME, null ,DB_VERSION); 25 db = dbHelper.getWritableDatabase(); 26 } 27 28 public void close(){ // 29 db.close(); 30 dbHelper.close(); 31 } 32 33 public UserInfoList getUserInfo(){ // 34 UserInfoList userList = new UserInfoList(); 35 36 Cursor cursor = db.query(SqliteHelper.TB_NAME, null , null , null , null , null , UserInfo.ID + " DESC " ); 37 38 cursor.moveToFirst(); 39 while ( ! cursor.isAfterLast() && (cursor.getString( 2 ) != null )){ 40 UserInfo user = new UserInfo(); 41 user.setId(cursor.getInt( 0 )); 42 user.setUserId(cursor.getString( 1 )); 43 user.setName(cursor.getString( 2 )); 44 user.setNickname(cursor.getString( 3 )); 45 user.setPassword(cursor.getString( 4 )); 46 user.setSex(cursor.getString( 5 )); 47 user.setEmail(cursor.getString( 6 )); 48 user.setTelephone(cursor.getString( 7 )); 49 user.setCellphone(cursor.getString( 8 )); 50 user.setConstellation(cursor.getString( 9 )); 51 user.setBloodType(cursor.getString( 10 )); 52 user.setHonor(cursor.getInt( 11 )); 53 user.setHonesty(cursor.getInt( 12 )); 54 user.setMoney(cursor.getInt( 13 )); 55 user.setHobby(cursor.getString( 14 )); 56 user.setRegisterTime(Timestamp.valueOf(cursor.getString( 15 ))); 57 ByteArrayInputStream stream = new ByteArrayInputStream(cursor.getBlob( 16 )); 58 // user.setIcon(Drawable.createFromStream(stream,"image")); 59 user.setIcon(BitmapFactory.decodeStream(stream)); 60 61 userList.add(user); 62 cursor.moveToNext(); 63 } 64 65 cursor.close(); 66 67 return userList; 68 } 69 70 public Boolean haveUserInfo(String userid){ // Id 。 71 Boolean flag = false ; 72 Cursor cursor = db.query(SqliteHelper.TB_NAME, null ,UserInfo.USERID + " = " + userid, null , null , null , null ); 73 flag = cursor.moveToFirst(); 74 cursor.close(); 75 return flag; 76 } 77 78 public Boolean haveUser(String userName,String password){ // 79 Boolean flag = false ; 80 Cursor cursor = db.query(SqliteHelper.TB_NAME, null ,UserInfo.NAME + " =' " + userName + " ' and " + UserInfo.PASSWORD + " =' " + password + " ' " , null , null , null , null ); 81 flag = cursor.moveToFirst(); 82 cursor.close(); 83 return flag; 84 } 85 86 public int updateUserIcon(Bitmap userIcon,String userid){ // 87 ContentValues values = new ContentValues(); 88 // values.put(UserInfo.NAME, name); 89 final ByteArrayOutputStream os = new ByteArrayOutputStream(); 90 userIcon.compress(Bitmap.CompressFormat.PNG, 100 , os); 91 values.put(UserInfo.ICON,os.toByteArray()); 92 int id = db.update(SqliteHelper.TB_NAME, values, UserInfo.ID + " = " + userid, null ); 93 return id; 94 } 95 96 public int updateUserInfo(UserInfo user){ // 97 ContentValues values = new ContentValues(); 98 values.put(UserInfo.USERID, user.getUserId()); 99 values.put(UserInfo.NAME, user.getName()); 100 values.put(UserInfo.NICKNAME, user.getNickname()); 101 values.put(UserInfo.PASSWORD, user.getPassword()); 102 values.put(UserInfo.SEX, user.getSex()); 103 values.put(UserInfo.EMAIL, user.getEmail()); 104 values.put(UserInfo.TELEPHONE, user.getTelephone()); 105 values.put(UserInfo.CELLPHONE, user.getCellphone()); 106 values.put(UserInfo.CONSTELLATION, user.getConstellation()); 107 values.put(UserInfo.BLOODTYPE, user.getBloodType()); 108 values.put(UserInfo.HONOR, user.getHonor()); 109 values.put(UserInfo.HONESTY, user.getHonesty()); 110 values.put(UserInfo.MONEY,user.getMoney()); 111 values.put(UserInfo.HOBBY, user.getHobby()); 112 values.put(UserInfo.REGISTERTIME, user.getRegisterTime() + "" ); 113 114 int id = db.update(SqliteHelper.TB_NAME, values, UserInfo.ID + " = " + user.getId(), null ); 115 116 return id; 117 } 118 119 public Long addUser(UserInfo user){ // 120 ContentValues values = new ContentValues(); 121 values.put(UserInfo.USERID, user.getUserId()); 122 values.put(UserInfo.NAME, user.getName()); 123 values.put(UserInfo.NICKNAME, user.getNickname()); 124 values.put(UserInfo.PASSWORD, user.getPassword()); 125 values.put(UserInfo.SEX, user.getSex()); 126 values.put(UserInfo.EMAIL, user.getEmail()); 127 values.put(UserInfo.TELEPHONE, user.getTelephone()); 128 values.put(UserInfo.CELLPHONE, user.getCellphone()); 129 values.put(UserInfo.CONSTELLATION, user.getConstellation()); 130 values.put(UserInfo.BLOODTYPE, user.getBloodType()); 131 values.put(UserInfo.HONOR, user.getHonor()); 132 values.put(UserInfo.HONESTY, user.getHonesty()); 133 values.put(UserInfo.MONEY,user.getMoney()); 134 values.put(UserInfo.HOBBY, user.getHobby()); 135 values.put(UserInfo.REGISTERTIME, user.getRegisterTime() + "" ); 136 if (user.getIcon() != null ){ 137 final ByteArrayOutputStream os = new ByteArrayOutputStream(); 138 user.getIcon().compress(Bitmap.CompressFormat.PNG, 100 , os); 139 values.put(UserInfo.ICON,os.toByteArray()); 140 } 141 142 // user.getIcon() 143 Long id = db.insert(SqliteHelper.TB_NAME, UserInfo.ID, values); 144 return id; 145 } 146 147 public int delUser(String userId){ // 148 int id = db.delete(SqliteHelper.TB_NAME, UserInfo.USERID + " = " + userId, null ); 149 return id; 150 } 151 } 152

クエリー・メソッドでCursorオブジェクトを返します.AndroidのCursorはJDBCのResultSetに似ています.