안드로이드 sqllite정리

Posted by Albert 3365Day 15Hour 18Min 49Sec ago [2016-02-02]

Android 상에서 SQLite 예제를 제작해봅시다.

첫 번째 예제는 Layout에 결과물을 찍는 형태가 아닌 콘솔(Logcat)에 결과를 출력하는 형태로 진행하겠습니다.

데이터를 어떻게 주고 받는지가 주 포인트라고 할 수 있습니다.  

 

 

Layout xml 파일은 생성 시 상태 그대로 입니다.

 

 

MainActivity.java

 

package com.example.test52sqlite;

 

import android.os.Bundle;

import android.util.Log;

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

 

public class MainActivity extends Activity {

 

    SQLiteDatabase db;

    MySQLiteOpenHelper helper;

    // 전역변수로 사용할 것들을 미리 빼두었다.

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        helper = new MySQLiteOpenHelper(MainActivity.this// 현재 화면의 context

                "person.db"// 파일명

                null// 커서 팩토리

                1); // 버전 번호

 

        // 1. 데이터 저장

        insert("유저1", 18, "경기도");

        insert("유저2", 28, "각기도");

        insert("유저3", 28, "각도기");

 

        // 2. 수정하기

        update("유저1", 58); // 나이만 수정하기

        

        // 3. 삭제하기

        delete("유저2");

        

        // 4. 조회하기

        select();

    }

 

    // insert

    public void insert(String name, int age, String address) {

        db = helper.getWritableDatabase(); // db 객체를 얻어온다. 쓰기 가능

 

        ContentValues values = new ContentValues();

        // db.insert의 매개변수인 values가 ContentValues 변수이므로 그에 맞춤

        // 데이터의 삽입은 put을 이용한다.

        values.put("name", name);

        values.put("age", age);

        values.put("address", address);

        db.insert("student"null, values); // 테이블/널컬럼핵/데이터(널컬럼핵=디폴트)

        // tip : 마우스를 db.insert에 올려보면 매개변수가 어떤 것이 와야 하는지 알 수 있다.

    }

 

    // update

    public void update (String name, int age) {

        db = helper.getWritableDatabase(); //db 객체를 얻어온다. 쓰기가능

        

        ContentValues values = new ContentValues();

        values.put("age", age);    //age 값을 수정

        db.update("student", values, "name=?"new String[]{name});

        /*

         * new String[] {name} 이런 간략화 형태가 자바에서 가능하다

         * 당연하지만, 별도로 String[] asdf = {name} 후 사용하는 것도 동일한 결과가 나온다.

         */

        

        /*

         * public int update (String table,

         * ContentValues values, String whereClause, String[] whereArgs)

         */

    }

    

    // delete

    public void delete (String name) {

        db = helper.getWritableDatabase();

        db.delete("student""name=?"new String[]{name});

        Log.i("db", name + "정상적으로 삭제 되었습니다.");

    }

    

    // select

    public void select() {

 

        // 1) db의 데이터를 읽어와서, 2) 결과 저장, 3)해당 데이터를 꺼내 사용

 

        db = helper.getReadableDatabase(); // db객체를 얻어온다. 읽기 전용

        Cursor c = db.query("student"nullnullnullnullnullnull);

 

        /*

         * 위 결과는 select * from student 가 된다. Cursor는 DB결과를 저장한다. public Cursor

         * query (String table, String[] columns, String selection, String[]

         * selectionArgs, String groupBy, String having, String orderBy)

         */

 

        while (c.moveToNext()) {

            // c의 int가져와라 ( c의 컬럼 중 id) 인 것의 형태이다.

            int _id = c.getInt(c.getColumnIndex("_id"));

            String name = c.getString(c.getColumnIndex("name"));

            int age = c.getInt(c.getColumnIndex("age"));

            String address = c.getString(c.getColumnIndex("address"));

            Log.i("db""id: " + _id + ", name : " + name + ", age : " + age

                    + ", address : " + address);

        }

    }

}

 

 

 

 

MySQLiteOpenHelper.java

 

package com.example.test52sqlite;

 

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

 

/*

* sql을 사용하기 위한 제반 클래스

* SQLiteOpenHelper는 사용에 도움을 주는 클래스이다.

*/

public class MySQLiteOpenHelper extends SQLiteOpenHelper {

 

    public MySQLiteOpenHelper(Context context, String name,

            CursorFactory factory, int version) {

        super(context, name, factory, version);

        // TODO Auto-generated constructor stub

 

    }

 

    @Override

    public void onCreate(SQLiteDatabase db) {

        // TODO Auto-generated method stub

        // SQLiteOpenHelper 가 최초 실행 되었을 때

        String sql = "create table student (" +

                "_id integer primary key autoincrement, " +

                "name text, " +

                "age integer, " +

                "address text);";

        db.execSQL(sql);

    }

 

    @Override

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

        // db = 적용할 db, old/new 구 버전/신버전

        // TODO Auto-generated method stub

        /*

         * db 버전이 업그레이드 되었을 때 실행되는 메소드

         * 이 부분은 사용에 조심해야 하는 일이 많이 있다. 버전이 1인 사용자가 2로 바뀌면

         * 한번의 수정만 하면 되지만 버전이 3으로 되면 1인 사용자가 2, 3을 거쳐야 하고

         * 2인 사용자는 3 까지만 거치면 된다. 이렇게 증가할 수록 수정할 일이 많아지므로

         * 적절히 사용해야 하며 가능하면 최초 설계 시에 완벽을 기하는 것이 가장 좋을 것이다.

         * 테스트에서는 기존의 데이터를 모두 지우고 다시 만드는 형태로 하겠다.

         */

        

        String sql = "drop table if exists student";

        db.execSQL(sql);

        

        onCreate(db); // 테이블을 지웠으므로 다시 테이블을 만들어주는 과정

    }

 

 

 

실행 결과 (여러 번 실행해서 사용자가 여러 개 들어가있는 상태임)

(실행 결과는 Logcat 에서 확인할 수 있는 내용이다.)

 

10-01 00:44:42.801: I/db(585): 유저2정상적으로 삭제 되었습니다.

10-01 00:44:42.801: I/db(585): id: 1, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.810: I/db(585): id: 2, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.810: I/db(585): id: 3, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.810: I/db(585): id: 5, name : 유저3, age : 28, address : 할기디

10-01 00:44:42.810: I/db(585): id: 6, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.810: I/db(585): id: 8, name : 유저3, age : 28, address : 할기디

10-01 00:44:42.810: I/db(585): id: 9, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.810: I/db(585): id: 11, name : 유저3, age : 28, address : 할기디

10-01 00:44:42.820: I/db(585): id: 12, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.820: I/db(585): id: 14, name : 유저3, age : 28, address : 할기디

10-01 00:44:42.820: I/db(585): id: 15, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.831: I/db(585): id: 17, name : 유저3, age : 28, address : 각도기

10-01 00:44:42.831: I/db(585): id: 18, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.841: I/db(585): id: 20, name : 유저3, age : 28, address : 각도기

10-01 00:44:42.841: I/db(585): id: 21, name : 유저1, age : 58, address : 경기도

10-01 00:44:42.841: I/db(585): id: 23, name : 유저3, age : 28, address : 각도기


출처: http://blog.naver.com/tinatan/70176627062





LIST

Copyright © 2014 visionboy.me All Right Reserved.