SQLiteDatabase 학습(二)
오늘은 주로 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은 주로 두 가지 역할을 합니다.
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
다섯째, 구체적인 첨삭 및 수정 클래스 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류에 대해 맞춤형 수정을 해야 합니다.
고마워요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.