Android SQLite의 UNIQUE 제약 조건이란?
예제를 살펴보기 전에 Android에서 SQLite 데이터베이스가 무엇인지 먼저 알아보겠습니다. SQLite는 오픈소스 SQL 데이터베이스로, 기기 내 텍스트 파일 형태로 데이터를 저장합니다. Android에는 SQLite 데이터베이스 구현이 기본으로 내장되어 있으며, 관계형 데이터베이스의 모든 주요 기능을 지원합니다.
또한 SQLite에 접근할 때 JDBC나 ODBC처럼 별도의 연결 설정이 필요하지 않다는 점이 큰 장점입니다.
이번 예제에서는 Android SQLite에서 UNIQUE 제약 조건을 사용하여 중복 데이터 입력을 방지하는 방법을 알아보겠습니다.
구현 단계
1단계: 새 프로젝트 생성
Android Studio에서 File → New Project를 선택하고, 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다.
2단계: 레이아웃 파일 작성
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
xmlns:tools = "https://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity"
android:orientation = "vertical">
<EditText
android:id = "@+id/name"
android:layout_width = "match_parent"
android:hint = "Enter Name"
android:layout_height = "wrap_content" />
<EditText
android:id = "@+id/salary"
android:layout_width = "match_parent"
android:inputType = "numberDecimal"
android:hint = "Enter Salary"
android:layout_height = "wrap_content" />
<Button
android:id = "@+id/save"
android:text = "Save"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
</LinearLayout>위 코드에서는 이름(name)과 급여(salary)를 입력받는 EditText 두 개와 저장 버튼을 배치했습니다. 사용자가 저장 버튼을 클릭하면 해당 데이터가 SQLite 데이터베이스에 저장됩니다.
3단계: MainActivity 작성
src/MainActivity.java 파일에 아래 코드를 추가합니다.
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button save;
EditText name, salary;
@Override
protected void onCreate(Bundle readdInstanceState) {
super.onCreate(readdInstanceState);
setContentView(R.layout.activity_main);
final DatabaseHelper helper = new DatabaseHelper(this);
name = findViewById(R.id.name);
salary = findViewById(R.id.salary);
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!name.getText().toString().isEmpty() && !salary.getText().toString().isEmpty()) {
if (helper.insert(name.getText().toString(), salary.getText().toString())) {
Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "NOT Inserted", Toast.LENGTH_LONG).show();
}
} else {
name.setError("Enter NAME");
salary.setError("Enter Salary");
}
}
});
}
}위 코드에서는 입력 필드가 비어 있는지 검사한 후, DatabaseHelper의 insert() 메서드를 호출하여 데이터를 저장하고, 그 결과를 Toast 메시지로 표시합니다.
4단계: DatabaseHelper 작성 — UNIQUE 제약 조건 적용
src/DatabaseHelper.java 파일에 아래 코드를 추가합니다. 핵심은 테이블 생성 시 UNIQUE 키워드를 지정하는 부분입니다.
package com.example.andy.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "MyDBName";
public static final String CONTACTS_TABLE_NAME = "SalaryDetails";
public DatabaseHelper(Context context) {
super(context,DATABASE_NAME,null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
"create table "+ CONTACTS_TABLE_NAME +"(id integer primary key NOT NULL UNIQUE , name text NOT NULL UNIQUE,salary text NOT NULL)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+CONTACTS_TABLE_NAME);
onCreate(db);
}
public boolean insert(String s, String s1) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", s);
contentValues.put("salary", s1);
db.insert(CONTACTS_TABLE_NAME, null, contentValues);
return true;
}
}테이블 생성 쿼리를 보면 id 컬럼과 name 컬럼에 각각 NOT NULL UNIQUE 제약 조건이 걸려 있습니다. 이렇게 하면 동일한 id나 동일한 이름을 가진 중복 레코드가 삽입되는 것을 데이터베이스 차원에서 방지할 수 있습니다.
앱 실행 및 결과 확인
애플리케이션을 실행해 보겠습니다. 실제 Android 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 열고 툴바의 실행(Run) 아이콘을 클릭한 후, 목록에서 자신의 모바일 기기를 선택하면 됩니다.
앱이 실행되면 아래와 같은 기본 화면이 표시됩니다.

이제 아래 그림과 같이 값을 입력하고 버튼을 클릭합니다.

결과를 확인하려면 Android Studio에서 아래와 같이 데이터베이스 상태를 점검하면 됩니다.

마무리
이처럼 SQLite 테이블 생성 시 UNIQUE 제약 조건을 활용하면 별도의 중복 검사 로직 없이도 데이터 무결성을 손쉽게 보장할 수 있습니다. 특히 사용자 이름처럼 고유해야 하는 값이 있을 때 매우 유용하며, 앱의 안정성과 데이터 품질을 한층 높여줍니다.