취소

커뮤니티

가이드

서포트

전체

<p><p><p>퍼갈 때에는 반드시 저작자의 허락과 저작자의 이름(아이디)를 기록하어야 합니다.</p>

저작자는 Snails(tjdtnsu)입니다.

제발 덧글 좀 적어주세요. 강의 적는 시간은 1시간이지만 덧글은 1분도 걸리지 않습니다.

참고 : 이 강좌는 초보자를 위한 Eclipse를 사용하였습니다.

올리는 곳 : 제 네이버 블로그, 디벨로이드 카페

업로드 시간 : 매주 일요일 오후 11시

 난이도 : ★★★★★★★★





















 

오늘은 본격적으로 데이터베이스 생성, 표 생성, 레코드 입력 뒤

헬퍼 클래스를 사용 후 데이터를 조회해 보겠습니다.

 

일단 코드를 쭉 나열하고 풀이는 몇 시간에 나누어서 하겠습니다.

 XML

 

 <LinearLayout xmlns:androhttp://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"    xmlns:tools="http://schemas.android.com/tools"    android:layout_    android:layout_height="match_parent"    android:orientation="vertical"    android:paddingTop="10dp" >

    <LinearLayout      android:orientation="horizontal"     android:layout_     android:layout_height="wrap_content"     android:paddingLeft="10dp"     >     <Button    android:   android:layout_   android:layout_height="wrap_content"   android:   android:text="조회"   android:textSize="14dp"   />  <EditText     android:      android:layout_       android:layout_height="wrap_content"       android:hint="조회할 텍스트 입력"      android:textSize="18dp"      /> </LinearLayout> <LinearLayout      android:orientation="horizontal"     android:layout_     android:layout_height="wrap_content"     android:paddingLeft="10dp"     >

 </LinearLayout> <TextView    android:     android:layout_      android:layout_height="wrap_content"      android:text="상태 : "     android:textSize="14dp"     android:paddingLeft="10dp"     android:layout_marginTop="10dp"     />

</LinearLayout>  

 JAVA

 

package naver.maybeeasyandroidprogramming; import android.app.Activity;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView; public class MainActivity extends Activity {      private TextView status;     public static final String TAG = "MainActivity";     private static String DATABASE_NAME = null;    private static String TABLE_NAME = "employee";    private static int DATABASE_VERSION = 1;    private DatabaseHelper dbHelper;    private SQLiteDatabase db;     @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         status = (TextView) findViewById(R.id.status);        final EditText input01 = (EditText) findViewById(R.id.input);         Button queryBtn = (Button) findViewById(R.id.Button);        queryBtn.setOnClickListener(new OnClickListener() {            public void onClick(View v) {                                 DATABASE_NAME = input01.getText().toString();                boolean isOpen = openDatabase();                if (isOpen) {                    executeRawQuery();                    executeRawQueryParam();                }                             }        });     }     private boolean openDatabase() {        println("opening database [" + DATABASE_NAME + "].");         dbHelper = new DatabaseHelper(this);        db = dbHelper.getWritableDatabase();         return true;    }     private void executeRawQuery() {        println("\nexecuteRawQuery called.\n");         Cursor c1 = db.rawQuery("select count(*) as Total from " + TABLE_NAME, null);        println("cursor count : " + c1.getCount());         c1.moveToNext();        println("record count : " + c1.getInt(0));         c1.close();     }     private void executeRawQueryParam() {        println("\nexecuteRawQueryParam called.\n");         String SQL = "select name, age, phone "            + " from " + TABLE_NAME            + " where age > ?";        String[] args= {"30"};         Cursor c1 = db.rawQuery(SQL, args);        int recordCount = c1.getCount();        println("cursor count : " + recordCount + "\n");         for (int i = 0; i < recordCount; i++) {            c1.moveToNext();            String name = c1.getString(0);            int age = c1.getInt(1);            String phone = c1.getString(2);             println("Record #" + i + " : " + name + ", " + age + ", " + phone);        }         c1.close();    }     private void executeRawQueryParam2() {        println("\nexecuteRawQueryParam2 called.\n");         String[] columns = {"name", "age", "phone"};        String whereStr = "where age > ?";        String[] whereParams = {"30"};        Cursor c1 = db.query(TABLE_NAME, columns,                whereStr, whereParams,                null, null, null);         int recordCount = c1.getCount();        println("cursor count : " + recordCount + "\n");         for (int i = 0; i < recordCount; i++) {            c1.moveToNext();            String name = c1.getString(0);            int age = c1.getInt(1);            String phone = c1.getString(2);             println("Record #" + i + " : " + name + ", " + age + ", " + phone);        }         c1.close();     }     private void println(String msg) {        Log.d(TAG, msg);        status.append("\n" + msg);     }      private class DatabaseHelper extends SQLiteOpenHelper {        public DatabaseHelper(Context context) {            super(context, DATABASE_NAME, null, DATABASE_VERSION);        }         public void onCreate(SQLiteDatabase db) {            println("creating table [" + TABLE_NAME + "].");             try {                String DROP_SQL = "drop table if exists " + TABLE_NAME;                db.execSQL(DROP_SQL);            } catch(Exception ex) {                Log.e(TAG, "Exception in DROP_SQL", ex);            }             String CREATE_SQL = "create table " + TABLE_NAME + "("                            + " _id integer PRIMARY KEY autoincrement, "                            + " name text, "                            + " age integer, "                            + " phone text)";             try {                db.execSQL(CREATE_SQL);            } catch(Exception ex) {                Log.e(TAG, "Exception in CREATE_SQL", ex);            }             println("inserting records.");             try {                db.execSQL( "insert into " + TABLE_NAME + "(name, age, phone) values ('John', 20, '010-7788-1234');" );                db.execSQL( "insert into " + TABLE_NAME + "(name, age, phone) values ('Mike', 35, '010-8888-1111');" );                db.execSQL( "insert into " + TABLE_NAME + "(name, age, phone) values ('Sean', 26, '010-6677-4321');" );            } catch(Exception ex) {                Log.e(TAG, "Exception in insert SQL", ex);            }         }         public void onOpen(SQLiteDatabase db) {            println("opened database [" + DATABASE_NAME + "].");         }         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {            Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ".");         }    }

      @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }     }  /이 코드는 어딘가의 예제에 있는 것을 사용했음을 밝힙니다.

 

 JAVA 코드를 유심히 살펴 보아야 하는데

200줄이나 됩니다. 

하나씩 살펴보아야 하는데

이해가 안될겁니다(아마)

 

 

-1-

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        status = (TextView) findViewById(R.id.status);

        final EditText input01 = (EditText) findViewById(R.id.input01);

 

        Button queryBtn = (Button) findViewById(R.id.queryBtn);

        queryBtn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                 

                DATABASE_NAME = input01.getText().toString();

                boolean isOpen = openDatabase();

                if (isOpen) {

                    executeRawQuery();

                    executeRawQueryParam();

                }

                 

            }

        });

 

    }

 

제일 앞쪽에 있는 부분입니다.

지금 빨간색으로 칠해놓은 부분은

새로운 헬퍼 클래스를 정의해놓은 부분입니다.

메인 액티비에에서 선언된 변수들 중 dbHelper는 DatabaseHelper 객체를 위한 것입니다.

 

헬퍼 클래스 : 데이터베이스를 만들거나 열기 위해 필요한 일들을 도와주는 역할을 함

 

 

-2-

   private boolean openDatabase() {

        println("opening database [" + DATABASE_NAME + "].");

 

        dbHelper = new DatabaseHelper(this);

        db = dbHelper.getWritableDatabase();

 

        return true;

    }

 

    private void executeRawQuery() {

        println("\nexecuteRawQuery called.\n");

 

        Cursor c1 = db.rawQuery("select count(*) as Total from " + TABLE_NAME, null);

        println("cursor count : " + c1.getCount());

 

        c1.moveToNext();

        println("record count : " + c1.getInt(0));

 

        c1.close();

 

    }

 

    private void executeRawQueryParam() {

        println("\nexecuteRawQueryParam called.\n");

 

        String SQL = "select name, age, phone "

            + " from " + TABLE_NAME

            + " where age > ?";

        String[] args= {"30"};

 

        Cursor c1 = db.rawQuery(SQL, args);

        int recordCount = c1.getCount();

        println("cursor count : " + recordCount + "\n");

 

        for (int i = 0; i < recordCount; i++) {

            c1.moveToNext();

            String name = c1.getString(0);

            int age = c1.getInt(1);

            String phone = c1.getString(2);

 

            println("Record #" + i + " : " + name + ", " + age + ", " + phone);

        }

 

        c1.close();

    }

 

    private void executeRawQueryParam2() {

        println("\nexecuteRawQueryParam2 called.\n");

 

        String[] columns = {"name", "age", "phone"};

        String whereStr = "where age > ?";

        String[] whereParams = {"30"};

        Cursor c1 = db.query(TABLE_NAME, columns,

                whereStr, whereParams,

                null, null, null);

 

        int recordCount = c1.getCount();

        println("cursor count : " + recordCount + "\n");

 

        for (int i = 0; i < recordCount; i++) {

            c1.moveToNext();

            String name = c1.getString(0);

            int age = c1.getInt(1);

            String phone = c1.getString(2);

 

            println("Record #" + i + " : " + name + ", " + age + ", " + phone);

        }

 

        c1.close();

 

    }



 

다음 부분입니다.

빨간 색으로 칠해놓은 부분은 상위 클래스의 생성자를 호출하는 부분입니다.

상세하게 설명하면 생성자에서 데이터베이스 이름과 버젼을 이용하는 겁니다.

 

그 다음 주황색 부분입니다.

rawQuery() 메소드를 이용해 SELECT SQL문을 실행합니다.

여기서 rewQuery는 결과값을 Cursor 객체를 받을 수 있는 SQL 실행 방법입니다.

 

SELECT SQL : SELECT 문에서 필수 구성 절. 지정 열을 설명하는 것

 

 

노랑색 부분에는 커서 객체를 이용해 레코드를 하나씩 처리하는 구문입니다.

moveToNext 메소드를 이용해 레코드를 가리키도록 해 false 값을 리턴할 때 까지 레코드 값을 가져오는 방법을 일반적으로 사용합니다.

for문을 사용할 때에는 getCount를 이용하면 됩니다.

 

 

갈색 부분에는 커서를 닫는 부분입니다.

 

초록색 부분에는 파라미터를 전달하면서 rawQuery() 메소드를 이용합니다.

 

 

 

어쨌든 이렇게 되면 테이블이 없으면 새로 만들고, 레코드를 추가 한 후 쿼리를 실행하고

있으면 열기만 하고 기존에 만들어진 테이블의 내용을 조회하면 됩니다.

 

 

 

다음 시간에 계속 하겠습니다.