Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android sqlite另類用法(對象存取)

android sqlite另類用法(對象存取)

編輯:關於Android編程

在andorid端使用sqlite數據庫是經常的事,通常來說都是對每個屬性對應一個字段,然後分字段的來讀取,但是今天我要說的不是這樣的。我們通過對象序列化來存取。因為一個好的程序員總是得學會偷懶。

Demo效果

\

好了看代碼吧。

我們首先還是新建一個對象,然後我們就對這個對象存取。

public class Student implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	String name;
	int age;

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}
然後是數據庫的連接類
/***
 * 單例模式實現數據庫連接
 * @author bobo
 *
 */
public class Dbhelper extends SQLiteOpenHelper {

	private static Dbhelper dbhelper = null;

	public static Dbhelper getInstens(Context context) {
		if (dbhelper == null) {
			dbhelper = new Dbhelper(context);
		}
		return dbhelper;
	}

	private Dbhelper(Context context) {
		super(context, datebase.db, null, 1);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		
		 //這張表采用二進制文件存儲對象注意第二個字段我們將對象存取在這裡面
		String sql_class_table=create table if not exists classtable(_id integer primary key autoincrement,classtabledata text);
		db.execSQL(sql_class_table);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
		// TODO Auto-generated method stub

	}

}
最後是一個數據庫操作類,最主要的方法在這個類裡面,通過二進制流把對象轉換為對象流然後取出二進制存取進數據庫,最後取的時候也一樣。首先取出二進制對象,然後通過流還原對象。

 

 

/**
 * 數據庫操作
 * @author bobo
 *
 */
public class StudentServcie {
	Context context;

	public StudentServcie(Context context) {
		// TODO Auto-generated constructor stub
		this.context = context;
	}

	/**
	 * 保存
	 * @param student
	 */
	public void saveObject(Student student) {
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		try {
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream);
			objectOutputStream.writeObject(student);
			objectOutputStream.flush();
			byte data[] = arrayOutputStream.toByteArray();
			objectOutputStream.close();
			arrayOutputStream.close();
			Dbhelper dbhelper = Dbhelper.getInstens(context);
			SQLiteDatabase database = dbhelper.getWritableDatabase();
			database.execSQL(insert into classtable (classtabledata) values(?), new Object[] { data });
			database.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public Student getObject() {
		Student student = null;
		Dbhelper dbhelper = Dbhelper.getInstens(context);
		SQLiteDatabase database = dbhelper.getReadableDatabase();
		Cursor cursor = database.rawQuery(select * from classtable, null);
		if (cursor != null) {
			while (cursor.moveToNext()) {
				byte data[] = cursor.getBlob(cursor.getColumnIndex(classtabledata));
				ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(data);
				try {
					ObjectInputStream inputStream = new ObjectInputStream(arrayInputStream);
					student = (Student) inputStream.readObject();
					inputStream.close();
					arrayInputStream.close();
					break;//這裡為了測試就取一個數據
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		}
		return student;

	}
}
同樣我們也可以對list,或者map對象進行保存,方法跟上面的一樣,但是map或者list裡面的對象必須序列化。

 

最後給出測試類。

public class MainActivity extends Activity {
	StudentServcie servcie;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		servcie = new StudentServcie(this);
	}
	public void onclick(View view) {
		switch (view.getId()) {
		case R.id.save:
			servcie.saveObject(new Student(李雷, 20));
			Toast.makeText(this, 存取完成, 0).show();
			break;
		case R.id.load:
			Student student =	servcie.getObject();
			if(student!=null)
			Toast.makeText(this, student.getName()+student.getAge(), 0).show();
			break;
		}
	}
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved