Android 앱 개발 기초 편-데이터 저장(SQLite 데이터베이스)

23041 단어 Android
Android 앱 개발 기초 편-데이터 저장(SQLite 데이터베이스)
    선언:Android 에서 SQLite 데이터베이스 에 대한 지원 을 제공 합 니 다.개발 자 는 응용 프로그램 에서 자신의 데이터 베 이 스 를 만 들 고 조작 하여 데 이 터 를 저장 하고 데 이 터 를 조작 할 수 있다.
SQLite 데이터베이스 만 들 기
    응용 프로그램 에서 SQLite 데이터 베 이 스 를 사용 하려 면 SQLiteOpenHelper 클래스 를 계승 하 는 보조 클래스 를 만 든 다음 onCreate()방법 을 다시 쓸 수 있 습 니 다.예 를 들 어:
package com.test.testapplication;

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

/**
 * Created by linyingkun on 2017/3/3.
 */

public class DBHelper extends SQLiteOpenHelper {

    private Context mContext;

    //         、   。          ,
    //      、              ,  
    //                      。
    public DBHelper(Context context) {
        super(context, "testdb", null, 1);

        mContext = context;
    }

    // onCreate()      SQL    //    @Override
    public void onCreate(SQLiteDatabase db) {

        String create_table = "CREATE TABLE students(id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "name VARCHAR(20),age VARCHAR(20));";
        db.execSQL(create_table);

    }

    //    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

2.데이터 베 이 스 를 만 들 고 데 이 터 를 조작 합 니 다.
    2.1 데이터베이스 만 들 기
    절 차 를 마 친 후 응용 에서 데이터 베 이 스 를 사용 해 야 하 는 곳 에서 보조 클래스 대상 을 얻 은 다음 getReadable Database()또는 getWriteable Database()방법 으로 데이터 베 이 스 를 만 듭 니 다.이 단 계 를 통 해 시스템 에 같은 이름 의 데이터베이스 가 존재 하지 않 으 면 시스템 의/data/데이터/패키지 이름/databases 디 렉 터 리 아래 보조 클래스 에서 지정 한 이름 의 데이터 베 이 스 를 만 들 고 onCreate()방법 이 호출 됩 니 다.단,시스템 에 같은 이름 의 데이터베이스 가 존재 한다 면 onCreate()방법 은 더 이상 호출 되 지 않 고 데이터 버 전이 바 뀌 었 을 때 만 onUpgrade()방법 이 호출 됩 니 다.
DBHelper dbHelper = new DBHelper(this);
SQLiteDatabase writableDatabase = dbHelper.getWritableDatabase();

    2.2 데이터베이스 에서 의 데이터 조작
    데이터베이스 에 있 는 데 이 터 를 조작 하려 면 데이터베이스 대상 을 직접 사용 하여 대응 하 는 SQL 문 구 를 실행 할 수도 있 고 ORM(대상 관계 맵)을 통 해 매 핑 할 수도 있다.다음은 예 시 를 살 펴 보 자.
    2.2.1 증가
    일반 방법:
 
  
//           SQL//insert into    (  12,...) values ("  1","  2",...)
//String insert = "INSERT INTO students (name,age) VALUES ('s1','20')";
//         execSQL()    SQL  
writableDatabase.execSQL(sql);

    ORM 방법:
 
  
//  ContentValues  
ContentValues contentValues = new ContentValues();
// ContentValues               
contentValues.put("name", "s2");
contentValues.put("age", "21");
//         insert()   Contentvalues         
writableDatabase.insert("students", null, contentValues);

    2.2.2 조사
    일반 방법
//SQL//select    (*         ) from    where   ( name="s1",           )
String query = "SELECT * FROM students";
//        rawQuery()Cursor  
//  1SQL  
//  2:         ,        null。  ,    
//SELECT * FROM students WHERE name="s1",   
//SELECT * FROM students WHERE name=?2new String[]{"s1"}Cursor cursor = writableDatabase.rawQuery(query, null);
// cursor      
boolean b = cursor.moveToFirst();
//  b truewhile (b) {
    //               index
    int nameIndex = cursor.getColumnIndex("name");
    int ageIndex = cursor.getColumnIndex("age");

    //             
    String name = cursor.getString(nameIndex);
    String age = cursor.getString(ageIndex);

    // cursor      
    b = cursor.moveToNext();

    ORM 방법:
//        query()//  1//  2:      ,Stringnew String[]{"name","age"},
//  3:    。Stringname
//  4:          ,String//  5//  6//  7:  
//            ,       ,     null。
Cursor cursor = writableDatabase.query("students", new String[]{"name", "age"},
        "name=?", new String[]{"s1"}, null, null, null);
boolean b = cursor.moveToFirst();
while (b) {
    int nameIndex = cursor.getColumnIndex("name");
    int ageIndex = cursor.getColumnIndex("age");
    String name = cursor.getString(nameIndex);
    String age = cursor.getString(ageIndex);
    b = cursor.moveToNext();
    Log.e("MainActivity", name + ":" + age);
}

    2.2.3 삭제
    일반 방법
//     SQL//delete from    where   
String delete = "DELETE FROM students WHERE name=?";
//         execSQL()    SQL//  1SQL  
//  2:    。      SQL   ,        ,
//      ?         ,     2// :       , SQL    DELETE FROM students//           writableDatabase.execSQL(delete);
//writableDatabase.execSQL(delete, new String[]{"s1"});

    ORM 방법:
//         delete()//  1//  2//  3writableDatabase.delete("students","name=?",new String[]{"s1"});

    2.2.4 개
    일반 방법:
//     SQL//update    set   1="  ",  2="  ",... where   
String update = "UPDATE students SET name=?,age=? WHERE id=?";
//         execSQL()writableDatabase.execSQL(update,new String[]{" 1","10","1"});

    ORM 방법:
//ContentValues 대상 가 져 오기 ContentValues values=newContentValues();/ContentValues 대상 에 수정 할 데이터 values.put("name","작은 2")를 삽입 합 니 다.values.put("age","25");//데이터베이스 대상 을 사용 하여 update()방법 을 호출 합 니 다.각 매개 변 수 는//매개 변수 1:표 이름//매개 변수 2:데이터//매개 변수 3:조건 문//매개 변수 4:조건 부 대체 자 는 writableDatabase.update("students",values,"id=?"를 채 웁 니 다.newString[]{"26"});
    후기:이 편 은 안 드 로 이 드 의 SQLite 데이터베이스 사용 방법 을 간단하게 기술 하 였 다.일반적으로 데이터 양 이 많 지 않 으 면 코드 에서 상술 한 방법 을 직접 사용 하 는 데 아무런 문제 가 없 을 것 이다.그러나 데이터 양 이 많 으 면 ANR 이나 프로그램 붕 괴 를 초래 할 수 있다.그래서 SQLite 데이터 베 이 스 를 사용 할 때 신중 해 야 합 니 다.조건 이 있 으 면 데이터베이스 가 실제 개발 에서 의 사용 기술 을 더욱 깊이 있 게 배 울 수 있다.이렇게 하면 자신의 기술 수준 을 향상 시 키 는 데 도 도움 이 된다.

좋은 웹페이지 즐겨찾기