본문 바로가기
[ Developer ]/Android

[Android] 안드로이드 DB SQLite 생성

by 김현섭. 2016. 7. 25.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Android Database

@ SQLite
  • My SQL이나 PstgreSQL와 같은 데이터베이스 관리 시스템이지만 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스
  • 에스큐얼라이트라고 읽는다
  • 일반적인 RDBMS에 비해 대규모 작업에 적합하지 않지만 중소 규모라면 중소 규모라면 속도에 손색이 없다
  • 시퀀스가 존재하지 않으므로 AUTOINCREMENT로 자동 증가 시킬 수 있다

Android Database 생성

우선 안드로이드의 새로운 프로젝트를 생성한다 그리고 나서 레이아웃에서 버튼을 하나 생성한다


그리고 나서 main 패키지에서 db라는 패키지를 생성을 해준다


그런 후 클래스에서 SQLiteOpenHelper를 상속해준다


그런 후 생성자와 구현할 메소드를 추가해준다
onCreate와 onUpgrade가 있다



두 가지 메소드의 역할은 위의 주석문의 내용이다
우선 onCreate를 이용해서 테이블이 없을 경우 테이블을 생성하는 구문을 작성한다


위와 같이 스트링 버퍼에 적어 테이블을 생성해줄 수 있다
이제 onupgrade에 Toast를 이용해서 테스트를 해본다


이제 메인에 가서 Dialog로 database의 이름을 입력 받아보자


AlertDialog를 선언하고 생성과 취소 버튼을 만들어준다


이제 DB 이름을 입력받기 위해 TextView를 하나 생성한다
그런 후 dialog에 view로써 추가를 해주면 된다


이제 생성 버튼을 누르면 확인해보기 위해서 Toast로 띄어본다
실행을 해본다




위와 같이 문제없이 실행되는 것을 볼 수 있다 
이제 DBHelper에서 테이블이 생성이 잘 되었는지를 확인하기 위해서 Toast를 추가해준다


이제 생성 버튼을 눌렀을 때 생성하는 로직을 작성한다


DBHelper의 생성자를 이용해서 생성을 해준다 그런 후 DBHelper에 하나를 추가해준다


그런 후 다시 위의 생성 버튼으로 가서 testDB를 추가해준다


그런 후 실행을 해본다


Test라는 DB를 생성하기 위해서 이름을 입력하고 생성 버튼을 눌러본다


그럼 위와 같이 DB 생성 완료라는 Toast가 뜬 것을 통해서 DB가 문제없이 생성된 것을 볼 수 있다
Test라는 DB는 한번만 생성이 되므로 생성을 다시 해서 Test로 한다면 Toast가 뜨지 않을 것이다

* MainActivity - DB 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class MainActivity extends AppCompatActivity {
 
    private Button btnCreateDatabase;
    private DBHelper dbHelper;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btnCreateDatabase = (Button) findViewById(R.id.btnCreateDatabase);
        btnCreateDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                final EditText etDBName = new EditText(MainActivity.this);
                etDBName.setHint("DB명을 입력하세요");
 
                // Dialog로 database의 이름을 입력 받음
                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                dialog  .setTitle("Database 이름 입력")
                        .setMessage("Database 이름 입력")
                        .setView(etDBName)
                        .setPositiveButton("생성"new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                if ( etDBName.getText().toString().length() > 0 ) {
                                    dbHelper = new DBHelper(MainActivity.this ,
                                                etDBName.getText().toString(),
                                                null,
                                                1);
                                    dbHelper.testDB();
                                }
                            }
                        })
                        .setNeutralButton("취소"new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
 
                            }
                        }).create().show();
            }
        });
    }
}
cs

* DBHelper - DB 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class DBHelper extends SQLiteOpenHelper {
 
    private Context context;
 
 
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        this.context = context;
    }
 
    /**
     * DB가 존재하지 않을 때, 딱 한번 실행된다
     * DB를 생성하는 역할
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
 
        StringBuffer sb = new StringBuffer();
        sb.append( " CREATE TABLE TEST_TABLE ( ");
        sb.append( " _ID INTEGER PRIMARY KEY AUTOINCREMENT, ");
        sb.append( " NAME TEXT, " );
        sb.append( " AGE INTEGER, ");
        sb.append( " PHONE TEXT); ");
        // SQL 실행
        db.execSQL(sb.toString());
 
        Toast.makeText(context, "DB 생성 완료", Toast.LENGTH_SHORT).show();
    }
 
    /**
     * Application의 버전이 올라가 Table 구조가 변경되었을 때 실행
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Toast.makeText(context, "Version 올라감", Toast.LENGTH_SHORT).show();
    }
 
    public void testDB() {
        SQLiteDatabase db = getReadableDatabase();
    }
}
cs