반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.


먼저, 제가 프로젝트를 진행을 하면서 Application에 데이터베이스를 만들어야 하는 업무가 생겼습니다.

그래서, 원래는 APM을 이용하여 웹서버를 구축하고 Mysql DB를 연동하려고 했으나, 일단 ProtoType을 제작해야 하느라 SQLite를 이용한 내부 DB를 만들었습니다. 이에 따라, SQLite를 이용한 DB 생성 방법을 알려드리려고 합니다.


먼저, Activity_main.xml 에 대한 layout Design입니다.

layout Design은 아래와 같이, 배치하였습니다.



layout의 Text는 아래와 같습니다.


<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout 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:layout_height="match_parent"
tools:context=".MainActivity">

<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout4">

<Button
android:id="@+id/insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="mOnClick"
android:text="추가" />

<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="mOnClick"
android:text="삭제" />

<Button
android:id="@+id/select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="mOnClick"
android:text="조회" />
</LinearLayout>

<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="185dp"
android:layout_marginTop="21dp"
android:text="result"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout" />

<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="0dp"
android:layout_height="72dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@+id/linearLayout3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="헐 일" />

<EditText
android:id="@+id/nameedit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="text"
android:text="Name" />

</LinearLayout>

<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@+id/linearLayout4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout2">

<TextView
android:id="@+id/prioritytext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="우선순위" />

<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<RadioButton
android:id="@+id/priority1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />

<RadioButton
android:id="@+id/priority2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2" />

<RadioButton
android:id="@+id/priority3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3" />

<RadioButton
android:id="@+id/priority4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="4" />

<RadioButton
android:id="@+id/priority5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="5" />

<RadioButton
android:id="@+id/priority6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="6" />
</RadioGroup>
</LinearLayout>

<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="0dp"
android:layout_height="84dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout3">

<TextView
android:id="@+id/memo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="메모" />

<EditText
android:id="@+id/memoedit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
android:text="Name" />

</LinearLayout>

<Button
android:id="@+id/savebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="148dp"
android:layout_marginLeft="148dp"
android:layout_marginTop="14dp"
android:layout_marginEnd="148dp"
android:layout_marginRight="148dp"
android:layout_marginBottom="28dp"
android:onClick="mOnClick"
android:text="저장"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/result" />

</android.support.constraint.ConstraintLayout>


Layout 디자인은 여러분들이 하고 싶은대로 하면 됩니다! 중요한건 java니까요!


아래는 이제 SQLite를 이용한 DB 생성 입니다.

MainActivity.java에 작업을 했습니다.

------ 이 표시로 구분을 하겠습니다.

package com.example.myyou.todays;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.example.myyou.todays.R;

import java.sql.Date;
import java.text.SimpleDateFormat;


------------------------------------------------------------------------------------------------------------------------------------



public class MainActivity extends Activity {

EditText nameEdit;
EditText memoEdit;
TextView result;
DBHelper dbHelper;

final static String dbName = "t3.db";
final static int dbVersion = 2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


nameEdit = (EditText) findViewById(R.id.nameedit);
memoEdit = (EditText) findViewById(R.id.memoedit);
result = (TextView) findViewById(R.id.result);
dbHelper = new DBHelper(this, dbName, null, dbVersion);

}
----------------------------------------------------------------------------------------------------------------------------------

public void mOnClick(View v) {
SQLiteDatabase db;
String sql;
long now = System.currentTimeMillis();
Date date = new Date(now);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String getTime = sdf.format(date);


switch (v.getId()) {
case R.id.savebutton:
Intent intent = new Intent(
getApplicationContext(),
taskview.class);
startActivity(intent);
Toast.makeText(getApplicationContext(),"저장되었습니다.",Toast.LENGTH_LONG).show();
break;
case R.id.insert: //추가 버튼(insert)
RadioGroup rg = (RadioGroup) findViewById(R.id.radiogroup);
String name = nameEdit.getText().toString();
String memo = memoEdit.getText().toString();
int check = rg.getCheckedRadioButtonId();

db = dbHelper.getWritableDatabase();
sql = String.format("INSERT INTO t3 VALUES('" + name + "','" + memo + "'," + check + ",'" + getTime + "',0);");

db.execSQL(sql);
result.append("\nInsert Success");
break;

case R.id.delete: //전체삭제 버튼(delete)
db = dbHelper.getWritableDatabase();
sql = "DELETE FROM t3;";
db.execSQL(sql);
result.append("\nDelete Success");
break;


case R.id.select: //조회 버튼(select)
db = dbHelper.getReadableDatabase();
sql = "SELECT * FROM t3;";
Cursor cursor = db.rawQuery(sql, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
result.append(String.format("\n이름 = %s, 메모 = %s, 우선순위 = %s, 날짜 = %s, finish=%s",
cursor.getString(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4)));
}
} else {
result.append("\n조회결과가 없습니다.");
}
cursor.close();
break;
}
dbHelper.close();
}
-----------------------------------------------------------------------------------------------------------------------------------


static class DBHelper extends SQLiteOpenHelper {

//생성자 - database 파일을 생성한다.
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

//DB 처음 만들때 호출. - 테이블 생성 등의 초기 처리.
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE t3 (name TEXT, memo TEXT, priority INTEGER, date TEXT, finish INTEGER);");
//result.append("\nt3 테이블 생성 완료.");
}

//DB 업그레이드 필요 시 호출. (version값에 따라 반응)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS t3");
onCreate(db);
}

}
}

----------------------------------------------------------------------------------------------------------------------------------





1) package와 import 부분입니다.



package com.example.myyou.todays;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.example.myyou.todays.R;

import java.sql.Date;
import java.text.SimpleDateFormat;



2) DB 생성 관련 위주로 주석을 달아놨습니다.

    - 여기서 DB 생성 파일과 버전, DBHelper 정도?

public class MainActivity extends Activity {

EditText nameEdit;
EditText memoEdit;
TextView result;
DBHelper dbHelper;

final static String dbName = "t3.db"; // DB 생성 파일 이름
final static int dbVersion = 2; // DB Version

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


nameEdit = (EditText) findViewById(R.id.nameedit);
memoEdit = (EditText) findViewById(R.id.memoedit);
result = (TextView) findViewById(R.id.result);
dbHelper = new DBHelper(this, dbName, null, dbVersion);

}



3) 이제, mOnclick에 대한 이벤트 정리입니다.

layout에서 각 버튼들에 대한 정리입니다.


public void mOnClick(View v) {
SQLiteDatabase db;
String sql;
long now = System.currentTimeMillis();
Date date = new Date(now);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String getTime = sdf.format(date);


switch (v.getId()) {
case R.id.savebutton:
Intent intent = new Intent(
getApplicationContext(),
taskview.class);
startActivity(intent);
Toast.makeText(getApplicationContext(),"저장되었습니다.",Toast.LENGTH_LONG).show();
break;
case R.id.insert: //추가 버튼(insert)
RadioGroup rg = (RadioGroup) findViewById(R.id.radiogroup);
String name = nameEdit.getText().toString();
String memo = memoEdit.getText().toString();
int check = rg.getCheckedRadioButtonId();

db = dbHelper.getWritableDatabase();
sql = String.format("INSERT INTO t3 VALUES('" + name + "','" + memo + "'," + check + ",'" + getTime + "',0);");

db.execSQL(sql);
result.append("\nInsert Success");
break;

case R.id.delete: //전체삭제 버튼(delete)
db = dbHelper.getWritableDatabase();
sql = "DELETE FROM t3;";
db.execSQL(sql);
result.append("\nDelete Success");
break;


case R.id.select: //조회 버튼(select)
db = dbHelper.getReadableDatabase();
sql = "SELECT * FROM t3;";
Cursor cursor = db.rawQuery(sql, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
result.append(String.format("\n이름 = %s, 메모 = %s, 우선순위 = %s, 날짜 = %s, finish=%s",
cursor.getString(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4)));
}
} else {
result.append("\n조회결과가 없습니다.");
}
cursor.close();
break;
}
dbHelper.close();
}


4) 이 부분은 현재 년, 월, 일을 저장하려고 하는 코드입니다.


long now = System.currentTimeMillis();
Date date = new Date(now);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String getTime = sdf.format(date);


5) 버튼을 눌렀을 때, 버튼의 Id에 따라 switch문이 실행이 되는데요.

   처음 savebutton은 저장 버튼에 대한 것이고,

   그 아래 부터는 DB 추가, 삭제, 조회 버튼에 대한 실행문입니다.


    switch (v.getId()) {
case R.id.savebutton:
Intent intent = new Intent(
getApplicationContext(),
taskview.class);
startActivity(intent);
Toast.makeText(getApplicationContext(),"저장되었습니다.",Toast.LENGTH_LONG).show();
break;
case R.id.insert: //추가 버튼(insert)
RadioGroup rg = (RadioGroup) findViewById(R.id.radiogroup);
String name = nameEdit.getText().toString();
String memo = memoEdit.getText().toString();
int check = rg.getCheckedRadioButtonId();

db = dbHelper.getWritableDatabase();
sql = String.format("INSERT INTO t3 VALUES('" + name + "','" + memo + "'," + check + ",'" + getTime + "',0);");

db.execSQL(sql);
result.append("\nInsert Success");
break;

case R.id.delete: //전체삭제 버튼(delete)
db = dbHelper.getWritableDatabase();
sql = "DELETE FROM t3;";
db.execSQL(sql);
result.append("\nDelete Success");
break;


case R.id.select: //조회 버튼(select)
db = dbHelper.getReadableDatabase();
sql = "SELECT * FROM t3;";
Cursor cursor = db.rawQuery(sql, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
result.append(String.format("\n이름 = %s, 메모 = %s, 우선순위 = %s, 날짜 = %s, finish=%s",
cursor.getString(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4)));
}
} else {
result.append("\n조회결과가 없습니다.");
}
cursor.close();
break;
}
dbHelper.close();
}



6) 추가 버튼에 대한 코드입니다.

여기서, sql문을 사용할 줄 알아야 편리하게 수정하고 이용할 수 있습니다.

case R.id.insert: //추가 버튼(insert)
RadioGroup rg = (RadioGroup) findViewById(R.id.radiogroup);
String name = nameEdit.getText().toString();
String memo = memoEdit.getText().toString();
int check = rg.getCheckedRadioButtonId();

db = dbHelper.getWritableDatabase();
sql = String.format("INSERT INTO t3 VALUES('" + name + "','" + memo + "'," + check + ",'" + getTime + "',0);");

db.execSQL(sql);
result.append("\nInsert Success");
break;



7) 삭제 버튼입니다.


case R.id.delete: //전체삭제 버튼(delete)
db = dbHelper.getWritableDatabase();
sql = "DELETE FROM t3;";
db.execSQL(sql);
result.append("\nDelete Success");
break;


8) 조회 버튼 입니다.

    - cursor 에 대한 설명글은 아래의 URL을 참고해주세요!

    - https://yongku.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4Android-Studio-Cursor%EC%99%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4DB

case R.id.select: //조회 버튼(select)
db = dbHelper.getReadableDatabase();
sql = "SELECT * FROM t3;";
Cursor cursor = db.rawQuery(sql, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
result.append(String.format("\n이름 = %s, 메모 = %s, 우선순위 = %s, 날짜 = %s, finish=%s",
cursor.getString(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4)));
}
} else {
result.append("\n조회결과가 없습니다.");
}
cursor.close();
break;


9) DBHelper에 관한 클래스 코드입니다.


static class DBHelper extends SQLiteOpenHelper {

//database 파일을 생성
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

//실행할 때 DB 최초 생성
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE t3 (name TEXT, memo TEXT, priority INTEGER, date TEXT, finish INTEGER);");
//result.append("\nt3 테이블 생성 완료.");
}

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

}


10) 결과입니다.



위와 같이 하면 DB를 생성할 수 있습니다. 참고해서 여러분들의 학습에 도움이 됐으면 좋겠습니다.


이상으로 츄르 사려고 코딩하는 집사 코집사였습니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기