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