一.android下數據庫的創建
1.寫一個DBOpenHelper繼承SQLiteOpenHelper
1.1通過構造函數創建一個數據庫
public MyOpenHelper(Context context) {
super(context, "person.db", null, 2);
}
1.2複寫方法oncreate()和onUpgrade()
//數據庫第一次創建的時候調用
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("數據庫被創建了!");
db.execSQL("create table person(personid integer primary key autoincrement,name varchar(20))");
}
//當數據庫版本發送變化的時候調用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("數據庫版本變化了!");
db.execSQL("alter table person add Tel varchar(20) NULL");
}
2.測試DBOpenHelper,可以在Activity的佈局文件中添加button,通過創建監聽來實現對數據庫的操作
package com.yunchao.db;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
public class MyDbActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void click(View view){
MyOpenHelper dbhelper = new MyOpenHelper(this);
dbhelper.getReadableDatabase();
}
}
二:Android下數據庫的增刪改查
//讀數據庫不用加鎖,寫數據庫需要加鎖,在某一時刻只能有一個線程寫數據庫,但是可以有多個線程
讀數據庫,每秒1000都沒有問題
1.創建dao,也就是crud服務
package com.yunchao.db.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.yunchao.db.MyOpenHelper;
import com.yunchao.db.domain.Person;
public class PersonDao {
private MyOpenHelper helper;
public PersonDao(Context context) {
helper=new MyOpenHelper(context);
}
//向數據庫中增加數據
public void add(String name,String Tel){
SQLiteDatabase db = helper.getWritableDatabase();
if(db.isOpen()){
//insert into person(name,Tel) values('yunchao','13011808832')
db.execSQL("insert into person(name,Tel) values(?,?)", new Object[]{name,Tel});
db.close();
}
}
//查詢數據庫中的數據
public boolean find(String name){
boolean result=false;
SQLiteDatabase db = helper.getReadableDatabase();
if(db.isOpen()){
Cursor cursor = db.rawQuery("select *from person where name=?", new String[]{name});
if(cursor.moveToFirst()){
result=true;
}
cursor.close();
db.close();
}
return result;
}
//更新數據庫的操作
public void update(String newTel,String name,String oldTel){
SQLiteDatabase db = helper.getWritableDatabase();
if(db.isOpen()){
db.execSQL("update person set Tel=? where name=? and Tel=?", new Object[]{newTel,name,oldTel});
db.close();
}
}
//刪除數據庫中數據的操作
public boolean delete(String name,String Tel){
boolean result=false;
SQLiteDatabase db = helper.getWritableDatabase();
if(db.isOpen()){
db.execSQL("delete from person where name=? and Tel=?", new Object[]{name,Tel});
db.close();
result=true;
}
return result;
}
//查找數據庫中的所有數據
public List<Person> findAll(){
List<Person> persons = new ArrayList<Person>();
SQLiteDatabase db = helper.getReadableDatabase();
if(db.isOpen()){
Cursor cursor = db.rawQuery("select * from person", null);
while(cursor.moveToNext()){
int id=cursor.getInt(cursor.getColumnIndex("personid"));
String name=cursor.getString(cursor.getColumnIndex("name"));
String phone=cursor.getString(cursor.getColumnIndex("Tel"));
Person p=new Person(id,name,phone);
persons.add(p);
}
cursor.close();
db.close();
}
return persons;
}
}
2.測試dao
package com.yunchao.db.test;
import java.util.List;
import com.yunchao.db.dao.PersonDao;
import com.yunchao.db.domain.Person;
import android.test.AndroidTestCase;
public class TestPersonDao extends AndroidTestCase {
public void testadd() throws Exception{
PersonDao dao = new PersonDao(getContext());
for(int i=0;i<20;i++){
dao.add("zhangsan"+i, "1589080");
}
}
public void testfind() throws Exception{
PersonDao dao = new PersonDao(getContext());
boolean result=dao.find("zhangsan");
assertEquals(true, result);
}
public void testupdate() throws Exception{
PersonDao dao = new PersonDao(getContext());
dao.update("112", "zhangsan", "1589080");
}
public void testdelete() throws Exception{
PersonDao dao = new PersonDao(getContext());
boolean result = dao.delete("zhangsan9", "1589080");
assertEquals(true, result);
}
public void testfindAll() throws Exception{
PersonDao dao = new PersonDao(getContext());
List<Person> persons=dao.findAll();
System.out.println(persons.size());
}
}