안드로이드 스튜디오 예제 SQLite 활용하기 (SQLiteDatabase)

 계발에서 개발까지 

https://developer.android.com/training/data-storage/sqlite?hl=ko

 

SQLite를 사용하여 데이터 저장  |  Android 개발자  |  Android Developers

데이터베이스에 데이터를 저장하는 작업은 연락처 정보와 같이 반복적이거나 구조적인 데이터에 이상적입니다. 이 페이지는 일반적으로 개발자가 SQL 데이터베이스를 잘 알고 있다고 가정하며

developer.android.com

 

SQLite 활용하기

 

안드로이드 프로그래밍에 SQLite를 활용하는 방법을 알아보겠습니다. 안드로이드에서 SQLite를 사용할 때는 일반적으로 SQLiteOpenHelper 클래스, SQLiteDatabase클래스, Cursor 인터페이스를 사용합니다.

 

일단 새 프로젝트를 만들고 예제를 따라해보겠습니다.

 

activity_main.xml

 

자 이런식으로 레이아웃을 구성합니다 목록과 수량을 입력하고 조회하는 프로그램입니다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:orientation="horizontal"
        android:layout_weight="1">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="목록"/>
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/edtName"/>


    </LinearLayout>




    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:orientation="horizontal"
        android:layout_weight="1">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="수량"/>
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/edtNumber"/>
    </LinearLayout>



    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:orientation="horizontal"
        android:layout_weight="1">


        <Button
            android:id="@+id/btnInit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="초기화"/>

        <Button
            android:id="@+id/btnInsert"
            android:text="입력"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <Button
            android:id="@+id/btnSelect"
            android:text="조회"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </LinearLayout>


    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:orientation="horizontal"
        android:layout_weight="8">

        <EditText
            android:id="@+id/edtNameResult"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

        <EditText
            android:id="@+id/edtNumberResult"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

    </LinearLayout>

</LinearLayout>

 

MainActivity.java

 

우선 onCreate() 메소드 밖에 SQLiteOpenHelper클래스르에서 상속받은 클래스를 정의합니다 onCreate() 메소드에는 테이블 생성하는 기능을 코딩하고 onUpgrade() 메소드에서는 테이블을 삭제한 후 다시 생성합니다.

  public class myDBHelper extends SQLiteOpenHelper {
        public myDBHelper(Context context) {
            super(context, "groupDB", null, 1);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE groupTBL ( gName CHAR(20) PRIMARY KEY,gNumber INTEGER);");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS groupTBL");
            onCreate(db);

        }
    }

테이블을 생성하는 SQL문은 SQLiteDatabase 클래스의 execSQL()메소드로 실행합니다. 바로 아래의 onUpgrade()에서 호출되거나 데이터를 입력할 때 혹은 테이블이 없을 때 처음 1회 호출됩니다. 

 

이제 메인 액티비티 클래스를 코딩하겠습니다 사용할 다음 변수를 선언하고 메인 액티비티 클래스의 onCreate()에서는 위젯 변수를 대입해줍니다.

public class MainActivity extends AppCompatActivity {
    myDBHelper myDBHelper;
    EditText edtName, edtNumber, edtNameResultm, edtNumberResult;
    Button btnInit, btnInsert, btnSelect;
    SQLiteDatabase sqlDB;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("구매 리스트 관리");


        edtName = (EditText) findViewById(R.id.edtName);
        edtNumber = (EditText) findViewById(R.id.edtNumber);
        edtNameResultm = (EditText) findViewById(R.id.edtNameResult);
        edtNumberResult = (EditText) findViewById(R.id.edtNumberResult);
        btnInit = (Button) findViewById(R.id.btnInit);
        btnInsert = (Button) findViewById(R.id.btnInsert);
        btnSelect = (Button) findViewById(R.id.btnSelect);

<초기화>를 클릭했을 때 동작하는 리스너 , <입력>을 클릭하면 에디트텍스트이 값이 입력괴는 리스너, 마지막으로 <조회>를 클릭할 때, 테이블에 입력된 내용이 모두 아래쪽 에디트텍스트에 출력되는 리스너를 코딩합니다.

myDBHelper = new myDBHelper(this);
        btnInit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sqlDB = myDBHelper.getWritableDatabase();
                myDBHelper.onUpgrade(sqlDB,1,2);
                sqlDB.close();
            }
        });
        btnInsert.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("WrongConstant")
            @Override
            public void onClick(View v) {
                sqlDB = myDBHelper.getWritableDatabase();
                sqlDB.execSQL("INSERT INTO groupTBL VALUES ( '" + edtName.getText().toString() + "' , "+edtNumber.getText().toString() +");");
                sqlDB.close();
                Toast.makeText(getApplicationContext(),"입력됨",0).show();
            }
        });

        btnSelect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sqlDB = myDBHelper.getReadableDatabase();
                Cursor cursor;
                cursor = sqlDB.rawQuery("SELECT * FROM groupTBL;",null);

                String strNames = "목록 리스트"+"\r\n"+"\r\n";
                String strNumbers = "수량"+"\r\n"+"\r\n";

                while (cursor.moveToNext()){
                    strNames += cursor.getString(0) + "\r\n";
                    strNumbers += cursor.getString(1) + "\r\n";
                }
                edtNameResultm.setText(strNames);
                edtNumberResult.setText(strNumbers);
                cursor.close();
                sqlDB.close();
            }
        });

 이때myDBHelper 인스턴트를 생성합니다  myDBHelper()생성자가 실행 되어 groupDB 파일이 생성됩니다.

 

 

MainActivity.java 

메인 액티비티의 총 소스코드입니다.

public class MainActivity extends AppCompatActivity {
    myDBHelper myDBHelper;
    EditText edtName, edtNumber, edtNameResultm, edtNumberResult;
    Button btnInit, btnInsert, btnSelect;
    SQLiteDatabase sqlDB;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("구매 리스트 관리");


        edtName = (EditText) findViewById(R.id.edtName);
        edtNumber = (EditText) findViewById(R.id.edtNumber);
        edtNameResultm = (EditText) findViewById(R.id.edtNameResult);
        edtNumberResult = (EditText) findViewById(R.id.edtNumberResult);
        btnInit = (Button) findViewById(R.id.btnInit);
        btnInsert = (Button) findViewById(R.id.btnInsert);
        btnSelect = (Button) findViewById(R.id.btnSelect);


        myDBHelper = new myDBHelper(this);
        btnInit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sqlDB = myDBHelper.getWritableDatabase();
                myDBHelper.onUpgrade(sqlDB,1,2);
                sqlDB.close();
            }
        });
        btnInsert.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("WrongConstant")
            @Override
            public void onClick(View v) {
                sqlDB = myDBHelper.getWritableDatabase();
                sqlDB.execSQL("INSERT INTO groupTBL VALUES ( '" + edtName.getText().toString() + "' , "+edtNumber.getText().toString() +");");
                sqlDB.close();
                Toast.makeText(getApplicationContext(),"입력됨",0).show();
            }
        });

        btnSelect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sqlDB = myDBHelper.getReadableDatabase();
                Cursor cursor;
                cursor = sqlDB.rawQuery("SELECT * FROM groupTBL;",null);

                String strNames = "목록 리스트"+"\r\n"+"\r\n";
                String strNumbers = "수량"+"\r\n"+"\r\n";

                while (cursor.moveToNext()){
                    strNames += cursor.getString(0) + "\r\n";
                    strNumbers += cursor.getString(1) + "\r\n";
                }
                edtNameResultm.setText(strNames);
                edtNumberResult.setText(strNumbers);
                cursor.close();
                sqlDB.close();
            }
        });


    }

    public class myDBHelper extends SQLiteOpenHelper {
        public myDBHelper(Context context) {
            super(context, "groupDB", null, 1);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE groupTBL ( gName CHAR(20) PRIMARY KEY,gNumber INTEGER);");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS groupTBL");
            onCreate(db);

        }
    }
}

 

 

수고하셨습니다 ★

더 많은 정보

 https://deumdroid.tistory.com/ 

 

댓글

Designed by JB FACTORY