android下數據庫SQLite


一.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());
        }
       
       
}

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章