SQLiteDatabase 학습(二)

12295 단어
전언
오늘은 주로 sqlite가android에서 생성되고 저장되며 sqlite의 삭제와 수정에 대해 이야기합니다.
다음은 하나의 예로 해설을 하겠다
데이터베이스를 만들려면 SQLiteOpenHelper를 계승해야 합니다.
다음은 사용자 데이터베이스를 만드는 클래스 DBOpenHelper입니다
package com.example.pei.textdemo.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Title:     
 * Description:
 * 

* Created by pei * Date: 2017/11/16 */ public class DBOpenHelper extends SQLiteOpenHelper{ private static final String DB_NAME = "test_demo.db";// private static SQLiteDatabase INSTANCE; private Context mContext; public SQLiteDatabase getInstance() { if (INSTANCE == null) { INSTANCE = new DBOpenHelper(mContext).getWritableDatabase(); } return INSTANCE; } public DBOpenHelper(Context context) { this(context, DB_NAME, null, 1); this.mContext=context; } public DBOpenHelper(Context context, String dbName, SQLiteDatabase.CursorFactory factory, int version) { super(context, dbName, factory, version); } // , @Override public void onCreate(SQLiteDatabase db) { String createTable = "CREATE TABLE IF NOT EXISTS user(_id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
" + " name text,
" + " sex text,
" + " age integer);"; // db.execSQL(createTable); } // , @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }


둘째, 데이터베이스 삭제 검색의 추상적인 유형을 제공하는데 주로 전체 데이터베이스에 관련된 삭제 검색을 통일적으로 관리하는 데 사용된다.
다음은 추상 클래스 DBHelper에 대한 추가 삭제 및 수정
package com.example.pei.textdemo.sqlite;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.pei.textdemo.app.AppContext;

import java.util.List;

/**
 * Title:          
 * Description:
 * 

* Created by pei * Date: 2017/11/16 */ public abstract class DBHelper { protected DBOpenHelper mDBOpenHelper; /** **/ protected SQLiteDatabase getDateBase(){ mDBOpenHelper=new DBOpenHelper(AppContext.getInstance()); return mDBOpenHelper.getInstance(); } /** **/ protected void closeDB(){ SQLiteDatabase db = getDateBase(); if(db!=null){ db.close(); } } /** * * @param tableName: * @return */ protected boolean isTableExist(String tableName){ Cursor cursor = getDateBase().rawQuery("select name from sqlite_master where type='table';", null); while(cursor.moveToNext()){ // String name = cursor.getString(0); if(name.equals(tableName)){ return true; } } return false; } /** **/ protected abstract List> checkAll(); /** **/ protected abstract void insert(Object obj); /** **/ protected abstract void delete(Object obj); /** **/ protected abstract void update(Object obj); }


3 처리 데이터의 대상을 제공한다
다음은 대상person의 코드입니다. 간단합니다. 기본적인 set,get 방법을 제공합니다.
package com.example.pei.textdemo.sqlite;

import com.example.pei.textdemo.models.BaseModel;

/**
 * Title:
 * Description:
 * 

* Created by pei * Date: 2017/11/16 */ public class Person extends BaseModel { private String name; private String sex; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }


4 Person이 계승해야 하는 베이스 모델 클래스
baseModel은 주로 두 가지 역할을 합니다.
  • 1 Serializable 인터페이스를 실현하여 데이터의 질서화를 편리하게 한다
  • 2는 ObjectToString 방법을 제공합니다. 한 대상의 모든 속성을 표시하는 역할을 하는데 사실은 로그를 인쇄하는 데 편리합니다. 다음은 베이스 모델 코드
  • 입니다.
    package com.example.pei.textdemo.models;
    
    
    import java.io.Serializable;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * Title:
     * Description:
     * 

    * Created by pei * Date: 2017/10/30 */ public class BaseModel implements Serializable{ /** **/ public String objectToString(Object obj){ List>FiledInfos=getFiledsInfo(obj); StringBuffer buffer=new StringBuffer(); if(!FiledInfos.isEmpty()){ for(Mapmap:FiledInfos){ String tag=map.get("name").toString(); if(!"$change".equals(tag)&&!"serialVersionUID".equals(tag)){ String str=map.get("name")+"="+map.get("value")+" "; buffer.append(str); } } }else{ if(obj!=null){ String className=obj.getClass().getSimpleName(); buffer.append(className); }else{ buffer.append("objectToString null"); } } return buffer.toString(); } /** * (type), (name), (value) map list */ private List getFiledsInfo(Object obj){ List>list=new ArrayList(); if(obj!=null) { Field fields[] = obj.getClass().getDeclaredFields(); String fieldNames[] = new String[fields.length]; Map mapInfo = null; for (int i = 0; i < fields.length; i++) { Object o = getFieldValueByName(fields[i].getName(), obj); mapInfo = new HashMap(); mapInfo.put("type", fields[i].getType().toString()); mapInfo.put("name", fields[i].getName()); mapInfo.put("value", getFieldValueByName(fields[i].getName(), obj)); list.add(mapInfo); } } return list; } /** * */ private Object getFieldValueByName(String fieldName,Object obj){ Object value=null; try { String firstLetter=fieldName.substring(0,1).toUpperCase(); String getter="get" +firstLetter+fieldName.substring(1); Method method=obj.getClass().getMethod(getter,new Class[] {}); value = method.invoke(obj, new Object[] {}); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return value; } /** * */ private String[] getFiledName(Object obj){ Field fields[]=obj.getClass().getDeclaredFields(); String fieldNames[]=new String[fields.length]; for(int i=0;i


    다섯째, 구체적인 첨삭 및 수정 클래스 UserdBHelper 제공
    이런 것들은 추상적인 클래스 DBHelper를 계승해야 한다. activity에서 삭제와 수정이 관련될 때 기본적으로 이 클래스의 방법을 호출한다.
    package com.example.pei.textdemo.sqlite;
    
    import android.database.Cursor;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Title:
     * Description:
     * 

    * Created by pei * Date: 2017/11/16 */ public class UserDBHelper extends DBHelper{ private UserDBHelper() { } private static class Holder { private static UserDBHelper instance = new UserDBHelper(); } public static UserDBHelper getInstance() { return Holder.instance; } @Override protected List checkAll() { List list = new ArrayList<>(); //COLLATE NOCASE // Cursor cursor = getDateBase().rawQuery("select * from T_cpz where isqy='True' COLLATE NOCASE;", null); Cursor cursor = getDateBase().rawQuery("select * from user", null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); String sex = cursor.getString(cursor.getColumnIndex("sex")); int age=cursor.getInt(cursor.getColumnIndex("age")); Person person=new Person(); person.setName(name); person.setSex(sex); person.setAge(age); list.add(person); } cursor.close(); return list; } @Override protected void insert(Object obj){ Person person= (Person) obj; String sql="INSERT INTO user(name,sex,age) VALUES('"+ person.getName()+"','"+ person.getSex()+"','"+ person.getAge()+"');"; getDateBase().execSQL(sql); } @Override protected void delete(Object obj) { Person person = (Person) obj; String sql = "DELETE FROM user WHERE name='" + person.getName() + "';"; getDateBase().execSQL(sql); } @Override protected void update(Object obj) { Person person = (Person) obj; String sql="UPDATE user SET age="+person.getAge()+" WHERE name='"+person.getName()+"';"; getDateBase().execSQL(sql); } }


    6 다음에activity에서 언급된 구체적인 데이터의 처리를 살펴보자
    여기에는 일부 추가 삭제된 코드만 표시하고, 단지 범례만 표시합니다
    //                //  
    //                Person person=new Person();
    //                person.setName("  ");
    //                person.setSex(" ");
    //                person.setAge(28);
    //                Person person1=new Person();
    //                person1.setName("  ");
    //                person1.setSex(" ");
    //                person1.setAge(26);
    //                UserDBHelper.getInstance().insert(person);
    //                UserDBHelper.getInstance().insert(person1);
    //                List persons=UserDBHelper.getInstance().checkAll();
    //                for(Person p:persons){
    //                    LogUtil.e(SqliteActivity.class,"===p="+p.objectToString(p));
    //                }
    
    //                //  
    //                Person updatePerson = new Person();
    //                updatePerson.setName("  ");
    //                updatePerson.setSex(" ");
    //                updatePerson.setAge(30);
    //                UserDBHelper.getInstance().update(updatePerson);
    //                List persons = UserDBHelper.getInstance().checkAll();
    //                for (Person p : persons) {
    //                    LogUtil.e(SqliteActivity.class, "===p=" + p.objectToString(p));
    //                }
    
    //                //  
    //                Person deletePerson = new Person();
    //                deletePerson.setName("  ");
    //                deletePerson.setSex(" ");
    //                deletePerson.setAge(30);
    //                UserDBHelper.getInstance().delete(deletePerson);
    //                List persons = UserDBHelper.getInstance().checkAll();
    //                for (Person p : persons) {
    //                    LogUtil.e(SqliteActivity.class, "===p=" + p.objectToString(p));
    //                }
    
                    //    
                    List persons = UserDBHelper.getInstance().checkAll();
                    for (Person p : persons) {
                        LogUtil.e(SqliteActivity.class, "===p=" + p.objectToString(p));
                    }
    
    
    

    ok, 오늘은android 데이터베이스에 대한 간단한 설명일 뿐입니다. 프로젝트에서 구체적으로 활용할 때 상기 helper류에 대해 맞춤형 수정을 해야 합니다.
    고마워요!

    좋은 웹페이지 즐겨찾기