Android XUtils 3 프레임 워 크 의 기본 사용 방법(2)

21014 단어 xutils쓰다
지난 편Android 에서 XUtils 3 프레임 워 크 사용 방법 에 대한 자세 한 설명(1)글 은 주로 XUtil 3 의 주해 모듈,네트워크 모듈,이미지 로드 모듈 을 소개 했다.오늘 은 모두 에 게 데이터 베이스 모듈 에 대한 설명 을 가 져 다 주 었 다.현재 주류 의 ORM 프레임 워 크 가 매우 많다.예 를 들 어 OrmLite,GreenDao,Active Android,Realm 등 이다.이런 프레임 워 크 는 모두 자신의 장점 과 단점 을 가진다.여러분 은 자신의 프로젝트 의 실제 수요 에 따라 선택 할 수 있 습 니 다.다음은 오늘 의 데이터베이스 모듈 에 들 어 가 는 소 개 를 시작 하 겠 습 니 다.
오늘 은 주로 다음 과 같은 몇 가지 모듈 을 가 져 옵 니 다.
표 삭제 만 드 는 방법
어떻게 표 에 대해 첨삭 검사 와 수정 작업 을 진행 합 니까?
어떻게 데이터 베 이 스 를 만 들 고 삭제 합 니까?
어떻게 한 표 대 한 표를 만 들 고,여러 표 대 한 표,여러 표 대 여러 표 의 외 키 를 조작 합 니까?
ORM 프레임 워 크 에 대해 잘 아 는 사람 은 자바 빈 대상 을 만 들 고 클래스 의 위 와 속성 에 주석 라벨 을 추가 하면 표를 만 들 수 있다 는 것 을 알 고 있 을 것 입 니 다.다음은 XUtils 3 의 실체 bean 의 쓰 기 를 보 여 드 리 겠 습 니 다.

@Table(name="person")
public class PersonTable {
@Column(name="id",isId=true,autoGen=true)
private int id;
//  
@Column(name="name")
private String name;
//  
@Column(name="age")
private int age;
//  
@Column(name="sex")
private String sex;
//  
@Column(name="salary")
private String salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
@Override
public String toString() {
return "PersonTable [id=" + id + ", name=" + name + ", age=" + age
+ ", sex=" + sex + ", salary=" + salary + "]";
}
}
위의 실체 bean 을 통 해 우 리 는 표 에 대응 하 는 실체 bean 을 알 아야 한다.다음 과 같은 몇 가 지 를 주의해 야 한다.
1.클래스 이름 에@Table 탭 을 추가 합 니 다.탭 에 있 는 속성 name 의 값 은 나중에 생 성 된 데이터베이스 표 의 이름 입 니 다.
2.실체 bean 의 속성 은@Column 탭 을 추가 해 야 합 니 다.그러면 이 탭 의 name 속성의 값 은 데이터베이스 에 있 는 표 의 필드 에 대응 합 니 다.
3.실체 bean 의 일반 속성 입 니 다.@Column 탭 을 추가 하지 않 으 면 표 생 성 시 표 에 필드 를 추가 하지 않 습 니 다.
4.실체 bean 에는 반드시 메 인 키 가 있어 야 합 니 다.메 인 키 가 없 으 면 표 가 생 성 되 지 않 습 니 다.@Column(name="id",isId=true,autoGen=true)이 속성 name 의 값 은 표 의 메 인 키 의 표 지 를 대표 합 니 다.isId 이 속성 은 표 의 메 인 키 를 대표 합 니 다.autoGen 은 메 인 키 가 자체 성장 하 는 지 여 부 를 대표 합 니 다.autoGen 이라는 속성 을 쓰 지 않 으 면,기본 값 은 자가 성장 속성 입 니 다.
실체 bean 을 어떻게 쓰 는 지 알 게 되 었 으 니 프로그램 에서 데이터 베 이 스 를 만 드 는 방법 과 표를 만 드 는 방법 을 살 펴 보 자.

public class XUtil {
static DbManager.DaoConfig daoConfig;
public static DaoConfig getDaoConfig(){
File file=new File(Environment.getExternalStorageDirectory().getPath());
if(daoConfig==null){
daoConfig=new DbManager.DaoConfig()
.setDbName("shiyan.db")
.setDbDir(file)
.setDbVersion(1)
.setAllowTransaction(true)
.setDbUpgradeListener(new DbUpgradeListener() {
@Override
public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
}
});
}
return daoConfig;
}
}
XUti.getDaoConfig()방법 을 통 해 DaoConfig 대상 을 얻 을 수 있 습 니 다.getDaoConfig()방법 을 통 해 우 리 는 이 방법 이 주로 다음 과 같은 일 을 할 수 있다 는 것 을 알 수 있다.
1.setDbName 데이터베이스 이름 설정
2.setDbdir 는 데이터베이스 에 저 장 된 경 로 를 설정 합 니 다.
3.setDbVersion 데이터베이스 버 전 설정
4.setAllowTransaction(true)설정 으로 트 랜 잭 션 을 시작 할 수 있 습 니 다.
5.setDb Upgrade Listener 는 버 전 업그레이드 감청 방법 을 설정 합 니 다.
그럼 구체 적 으로 저희 가 언제 시 계 를 만 들 었 죠?만약 우리 가 단순히 XUti.getDaoConfig()방법 을 호출 하 는 것 이 PersonTable 이라는 실체 에 대응 하 는 person 시 계 를 만 들 수 없다 면 시 계 를 어떻게 만 듭 니까?
몇 걸음 만 필요 합 니 다.
1.DaoConfig daoConfig=XUtil.getDaoConfig();
2.DbManager db = x.getDb(daoConfig);
여기 서 제 가 알려 드 리 고 싶 은 것 은 데이터베이스 에 표 가 생 성 된 시간 입 니 다.데이터베이스 에 있 는 작업 이 이 표 의 작업 과 관련 될 때 만 현재 표 가 존재 하 는 지 여 부 를 판단 하고 존재 하지 않 으 면 표를 만 들 수 있 습 니 다.존재 한다 면 해당 하 는 CRUD 작업 을 할 수 있 습 니 다.그러나 우리 가 표 의 CRUD 작업 을 하려 면우 리 는 먼저 위의 두 단 계 를 집행 해 야 한다.쉽게 말 하면 Dbmanger 라 는 상 대 를 받 아야 한 다 는 것 이다.내 가 왜 이렇게 말 할 까?그럼 일단 DbManger 의 여산 정 체 를 살 펴 보 자.
DbManager 부분 소스 코드 는 다음 과 같 습 니 다.

public interface DbManager extends Closeable {
DaoConfig getDaoConfig();
SQLiteDatabase getDatabase();
/**
*           List    ,
*       id      ,        id  .
*
* @param entity
* @return
* @throws DbException
*/
boolean saveBindingId(Object entity) throws DbException;
/**
*              List    ,   id         .
*
* @param entity
* @throws DbException
*/
void saveOrUpdate(Object entity) throws DbException;
/**
*           List    
*
* @param entity
* @throws DbException
*/
void save(Object entity) throws DbException;
/**
*              List    ,   id               .
*
* @param entity
* @throws DbException
*/
void replace(Object entity) throws DbException;
///////////// delete
void deleteById(Class<?> entityType, Object idValue) throws DbException;
void delete(Object entity) throws DbException;
void delete(Class<?> entityType) throws DbException;
void delete(Class<?> entityType, WhereBuilder whereBuilder) throws DbException;
///////////// update
void update(Object entity, String... updateColumnNames) throws DbException;
void update(Object entity, WhereBuilder whereBuilder, String... updateColumnNames) throws DbException;
///////////// find
<T> T findById(Class<T> entityType, Object idValue) throws DbException;
<T> T findFirst(Class<T> entityType) throws DbException;
<T> List<T> findAll(Class<T> entityType) throws DbException;
<T> Selector<T> selector(Class<T> entityType) throws DbException;
DbModel findDbModelFirst(SqlInfo sqlInfo) throws DbException;
List<DbModel> findDbModelAll(SqlInfo sqlInfo) throws DbException;
///////////// table
/**
*    
*
* @param entityType
* @throws DbException
*/
void dropTable(Class<?> entityType) throws DbException;
/**
*     ,
*   entityType            .
*
* @param entityType
* @param column
* @throws DbException
*/
void addColumn(Class<?> entityType, String column) throws DbException;
///////////// db
/**
*    
*
* @throws DbException
*/
void dropDb() throws DbException;
/**
*      ,
* xUtils             ,         .
*
* @throws IOException
*/
void close() throws IOException;
///////////// custom
void execNonQuery(SqlInfo sqlInfo) throws DbException;
void execNonQuery(String sql) throws DbException;
Cursor execQuery(SqlInfo sqlInfo) throws DbException;
Cursor execQuery(String sql) throws DbException;
}
DbManager 라 는 종 류 를 통 해 우 리 는 주로 다음 과 같은 몇 가지 일 을 했다 는 것 을 알 수 있다.
1.getDaoConfig 데이터베이스 설정 정보 가 져 오기
2.getDatabase 데이터베이스 인 스 턴 스 가 져 오기
3.saveBindingId saveOrUpdate save 데이터 삽입 3 가지 방법(데이터 저장)
4.replace 유일한 색인 이 존재 할 때 만 신중 함
5.delete 작업 의 4 가지 방법(데이터 삭제)
6.update 작업 의 2 가지 방법(데이터 수정)
7.find 조작 6 가지 방법(데이터 조회)
8.dropTable 삭제 표
9.addColumn 열 추가
10.dropDb 데이터베이스 삭제
삽입 조작

private void insert() {
try {
PersonTable person=new PersonTable();
person.setName("  ");
person.setAge(19);
person.setSex("woman");
person.setSalary(4000);
db.save(person);
//db.saveOrUpdate(person);
//db.saveBindingId(person);
} catch (DbException e) {
e.printStackTrace();
}
}
결 과 는 다음 과 같다.
 
세 가지 삽입 작업 에 필요 한 매개 변 수 는 모두 하나의 실체 bean 이다.save 와 saveOrUpdate 의 차 이 는 하나의 실체 에 있 는 메 인 키 가 같 을 때 saveOrUpdate 를 사용 하면 현재 메 인 키 에 대응 하 는 이 데 이 터 를 교체 하고 save 를 사용 하면 오 류 를 보고 하 는 것 입 니 다.
savebindingId 는 주로 저 장 된 데이터 입 니 다.현재 표 에 메 인 키 라운드 메 인 키 가 있 으 면 연결 합 니 다.
이 방법 을 실행 한 후에 데이터베이스 에 person 표 에 데이터 가 하나 더 있 는 것 을 볼 수 있 습 니 다.
조회 조작
현재 데이터베이스 에 있 는 표 의 효 과 는 다음 과 같 습 니 다.
 
1.findById 의 사용
이 방법 은 주로 메 인 키 의 값 을 통 해 표 안의 데 이 터 를 찾 는 것 이다.
필요:위 person 표 에서 id 가 3 인 데 이 터 를 찾 습 니 다.

private void query(){
try {
PersonTable person = db.findById(PersonTable.class, "2");
Log.e("person",person.toString());
} catch (DbException e) {
e.printStackTrace();
}
}
결 과 는 다음 과 같다.
 
2.findFirst 사용
이 방법 은 현재 표 의 첫 번 째 데 이 터 를 되 돌려 주 는 것 입 니 다.
필요:위 person 표 의 첫 번 째 데 이 터 를 찾 습 니 다.

private void query() {
try {
PersonTable person = db.findFirst(PersonTable.class);
Log.e("person", person.toString());
} catch (DbException e) {
e.printStackTrace();
}
}
 
3.findAll 의 사용
이 방법 은 현재 표 의 모든 데 이 터 를 되 돌려 주 는 것 입 니 다.
필요:person 표 의 모든 데 이 터 를 찾 습 니 다.

private void query() {
try {
List<PersonTable> persons = db.findAll(PersonTable.class);
Log.e("persons", persons.toString());
} catch (DbException e) {
e.printStackTrace();
}
}
 
4.selector 의 사용
이 방법 은 주로 특정한 조건 을 찾 는 데 쓰 인 다.
수요:person 표 에서 age 가 30 이상 이 고 성별 이 man 인 데 이 터 를 찾 습 니 다.

private void query() {
try {
List<PersonTable> persons = db.selector(PersonTable.class).where("age", ">", 30).and("sex", "=", "man").findAll();
for(PersonTable person:persons){
Log.e("person",person.toString());
}
} catch (DbException e) {
e.printStackTrace();
}
}
 
5.findDb ModelFirst 사용
이 방법 에 대해 말하자면,이 방법 은 DbModel 대상 을 되 돌려 줍 니 다.그러면 이 대상 은 무엇 입 니까?
DbMobel 소스 코드 는 다음 과 같 습 니 다.

public final class DbModel {
/**
* key: columnName
* value: valueStr
*/
private HashMap<String, String> dataMap = new HashMap<String, String>();
public String getString(String columnName) {
return dataMap.get(columnName);
}
public int getInt(String columnName) {
return Integer.valueOf(dataMap.get(columnName));
}
public boolean getBoolean(String columnName) {
String value = dataMap.get(columnName);
if (value != null) {
return value.length() == 1 ? "1".equals(value) : Boolean.valueOf(value);
}
return false;
}
public double getDouble(String columnName) {
return Double.valueOf(dataMap.get(columnName));
}
public float getFloat(String columnName) {
return Float.valueOf(dataMap.get(columnName));
}
public long getLong(String columnName) {
return Long.valueOf(dataMap.get(columnName));
}
public Date getDate(String columnName) {
long date = Long.valueOf(dataMap.get(columnName));
return new Date(date);
}
public java.sql.Date getSqlDate(String columnName) {
long date = Long.valueOf(dataMap.get(columnName));
return new java.sql.Date(date);
}
public void add(String columnName, String valueStr) {
dataMap.put(columnName, valueStr);
}
/**
* @return key: columnName
*/
public HashMap<String, String> getDataMap() {
return dataMap;
}
/**
* @param columnName
* @return
*/
public boolean isEmpty(String columnName) {
return TextUtils.isEmpty(dataMap.get(columnName));
}
}
소스 코드 를 통 해 우 리 는 DbModel 의 본질 이 바로 key 가 현재 표 의 필드 이 고 value 는 현재 기 록 된 값 의 HashMap 이라는 것 을 분석 했다.
수요:person 표 의 첫 번 째 데 이 터 를 찾 은 그 사람의 나이 age 는 얼마 입 니까?

private void query() {
try {
DbModel model = db.findDbModelFirst(new SqlInfo("select * from person"));
Log.e("age", model.getString("age"));
} catch (DbException e) {
e.printStackTrace(); 
}
}
 
위의 sqlInfo 대상 이 만 든 구조 적 인 파 라 메 터 는 하나의 sql 문 구 를 입력 하면 됩 니 다.
6.findDb ModelAll 의 용법
이 방법의 용 도 는 sqlInfo 정 보 를 만족 시 키 는 모든 데이터 필드 의 집합 을 되 돌려 주 는 것 이다.
필요:person 표 의 나이 age 가 25 이상 인 모든 사람의 이름 을 찾 습 니 다.

private void query() {
try {
List<DbModel> persons = db.findDbModelAll(new SqlInfo("select * from person where age > 25"));
for(DbModel person:persons){
Log.e("name", person.getString("name"));
}
} catch (DbException e) {
e.printStackTrace();
}
}

기본적으로 조회 의 6 가지 방식 을 모두 한 번 말 했 습 니 다.물론 위의 6 가지 수 요 는 반드시 위의 조회 방법 으로 결 과 를 찾 을 수 있 는 것 이 아 닙 니 다.제 가 이렇게 조회 하 는 목적 은 주로 여러분 에 게 XUtils 3 의 6 가지 조회 방법 을 어떻게 사용 하 는 지 알려 주 는 것 입 니 다.위의 6 가지 방법 을 알 게 되 었 습 니 다.저 는 당신 의 조회 에 큰 문제 가 없 을 것 이 라 고 믿 습 니 다.복잡 한 조 회 는 단지 sql 문장의 기본 적 인 공력 일 뿐 이 니 모두 빨리 연습 을 시작 합 시다.
조작 을 수정 하 다
현재 데이터베이스 에 있 는 표 의 효 과 는 다음 과 같 습 니 다.
 
수정 방법 은 모두 두 가지 가 있 습 니 다.
첫 번 째 종류:
수요:우 리 는 위의 id 가 1 인 이 기록 의 age 를 25 세로 수정 합 니 다.

private void update() {
try{
PersonTable person = db.findById(PersonTable.class, 1);
person.setAge(25);
db.update(person, "age");
}catch(Exception e){
e.printStackTrace();
}
}
방법 을 통 해 우 리 는 먼저 DBManager 를 통 해 찾 는 방법 을 통 해 id 가 1 인 이 실체 bean 을 찾 아야 한 다 는 것 을 알 고 있 습 니 다.만약 에 안에 있 는 필드 를 수정 해 야 한다 면 이 속성의 값 을 다시 설정 한 다음 에 DBManager.update 방법 을 호출 해 야 합 니 다.첫 번 째 매개 변 수 는 수정 해 야 할 실체 이 고 두 번 째 매개 변 수 는 대응 하 는 속성 입 니 다.
 
두 번 째:
수요:person 표 에서 성별 이 man 인 월급 샐 러 리 를 모두 6000 으로 바 꿉 니 다.

private void update() {
try {
List<PersonTable> persons = db.findAll(PersonTable.class);
for(PersonTable person:persons){
person.setSalary(6000);
db.update(person, WhereBuilder.b("sex", "=", "man"), "salary");
}
} catch (Exception e) {
e.printStackTrace();
}
}

데 이 터 를 수정 하 는 것 은 모두 두 가지 방법 으로 대체적으로 하나의 실체 bean 대상 이 조작 해 야 한다.위의 두 번 째 방법 은 데 이 터 를 수정 할 때 제한 조건 이 하나 더 생 겨 서 데 이 터 를 수정 하 는 것 이 유연 해 보인다.
위의 두 번 째 update 방법의 매개 변 수 는 간단하게 소개 합 니 다.
첫 번 째 매개 변수:실체 bean 대상
두 번 째 매개 변수:where Builder 대상 은 주로 정적 b 방법 으로 where 조건 문 구 를 구성 합 니 다.
세 번 째 매개 변수:수정 해 야 할 필드 이름 입 니 다.만약 에 당신 의 요구 가 2 개 이상 의 필드 를 수정 한 것 이 라면 그 뒤에 해당 하 는 매개 변 수 를 추가 하면 됩 니 다.예 를 들 어 두 번 째 방법 은 salary 뿐만 아니 라 age 를 40 세로 통일 시 켜 야 합 니 다.다음 과 같이 참고 하 십시오.

private void update() {
try {
List<PersonTable> persons = db.findAll(PersonTable.class);
for(PersonTable person:persons){
person.setSalary(6000);
person.setAge(40);
db.update(person, WhereBuilder.b("sex", "=", "man"), "salary","age");
}
} catch (Exception e) {
e.printStackTrace();
}
}
삭제 작업
현재 데이터베이스 에 있 는 person 표 의 효 과 는 다음 과 같 습 니 다.
 
1.deleteById 의 용법
이 방법 은 주로 표 의 메 인 키 에 따라 단일 기록 을 삭제 하 는 것 이다.
필요:위 person 표 의 id 가 5 인 기록 삭제

private void delete() {
try {
db.deleteById(PersonTable.class, 5);
} catch (DbException e) {
e.printStackTrace();
}
}
결 과 는 다음 과 같다.
 
2.delete(Object entity)의 용법
이 방법 은 주로 실체 bean 에 따라 표 안의 하나 이상 의 데 이 터 를 삭제 하 는 것 이다.
필요:name 이 낙타 라 는 메시지 의 기록 삭제

private void delete() {
try {
PersonTable person = db.selector(PersonTable.class).where("name", "=", "  ").findFirst();
db.delete(person);
} catch (DbException e) {
e.printStackTrace(); 
}
}
 
3.delete(Class entityType)
이 방법 은 주로 표 안의 모든 데 이 터 를 삭제 하 는 데 사용 되 지만 주의:표 는 존재 할 수 있 습 니 다.다만 표 안의 데이터 가 없습니다.

private void delete() {
try {
db.delete(PersonTable.class);
} catch (DbException e) {
e.printStackTrace(); 
}
}
4.delete(Class entityType, WhereBuilder whereBuilder)
이 방법 은 주로 where 문장의 조건 에 따라 삭제 작업 을 한다.
필요:person 표 총 sex 를 woman 및 salary 5000 정보 삭제

private void delete() {
try {
db.delete(PersonTable.class, WhereBuilder.b("sex", "=", "woman").and("salary", "=", "5000"));
} catch (DbException e) {
e.printStackTrace();
}
}
 
5.dropTable(Class entityType)
이 방법 은 시 계 를 삭제 하 는 데 쓰 인 다.

private void delete() {
try {
db.dropTable(PersonTable.class);
} catch (DbException e) {
e.printStackTrace();
}
}
6.dropDb()
이 방법 은 데이터 베 이 스 를 삭제 하 는 데 쓰 인 다.
db.dropDb();
기타 방법
1.addColumn(Class<> entityType, String column)
필요:위 표 에 country 필드 를 추가 합 니 다.
PersonTable 의 실체 코드 는 다음 과 같 습 니 다.

@Table(name="person")
public class PersonTable {
@Column(name="id",isId=true,autoGen=true)
private int id;
//  
@Column(name="name")
private String name;
//  
@Column(name="age")
private int age;
//  
@Column(name="sex")
private String sex;
//  
@Column(name="salary")
private int salary;
//  
@Column(name="country",property="  ")
private String country;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "PersonTable [id=" + id + ", name=" + name + ", age=" + age
+ ", sex=" + sex + ", salary=" + salary + ", country="
+ country + "]";
}
}

private void addColumn() {
try {
db.addColumn(PersonTable.class, "country");
} catch (DbException e) {
e.printStackTrace();
}
}
addColumn 방법 을 실 행 했 습 니 다.person 표 에 country 필드 가 하나 더 있 는 것 을 보 았 습 니 다.
결 과 는 다음 과 같다.

총결산
위 에 서 는 주로 XUtils 3 의 데이터베이스 모듈 을 소개 했다.데이터 베 이 스 를 어떻게 만 드 는 지,표를 어떻게 만 드 는 지,표 에 열 을 추가 하 는 지,표를 어떻게 삭제 하고 수정 하 는 지 를 포함한다.이렇게 많은 말 을 했 으 니 여러분 들 은 XUtils 3 의 데이터 베이스 모듈 에 대해 기본 적 인 이 해 를 가지 게 될 것 이 라 고 믿 습 니 다.한 표 대 한 표,여러 표 대 한 표,여러 표 대 여러 표 등 수요 에 대해 특정한 표 에 필드 를 추가 하거나 제3자 표를 만들어 표 와 표 간 의 관 계 를 유지 하 는 것 입 니 다.이런 유형의 예 는 제 가 예 를 들 어 설명 하지 않 겠 습 니 다.그 이 유 는 위의 첨삭 과 수정 방법 을 떠 날 수 없 기 때 문 입 니 다.저 는 당신 이 위의 방법 을 완전히 사용 하기 만 하면 당신 의 XUtils 3 데이터 베이스 모듈 의 기본 적 인 사용 에 문제 가 없 을 것 이 라 고 믿 습 니 다.

좋은 웹페이지 즐겨찾기