안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
데이터베이스(SQLite)
안드로이드에서 데이터를 저장하는 방법은 예전에 포스팅했던 sharedpreferences를 사용하는 방법이 있습니다. 하지만 많은 데이터를 관리하기 위해서는 데이터베이스를 사용하여야만 합니다.
데이터 베이스를 만드는 구조는 다음과 같습니다.
1. 데이터 베이스 생성
2. 테이블 생성
3. 레코드 추가
안드로이드에서는 데이터 베이스인 sqlite를 사용하기 위해서 SQLiteOpenHelper를 사용합니다. SQliteOpenHelper클래스는 데이터베이스를 만들거나 열기 위해 필요한 일들을 도와주는 역활을 합니다. 예제를 통해서 학생정보를 관리하는 데이터 베이스를 만들어 보도록 하겠습니다.
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 | package com.example.donghyun.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by DongHyun on 2017-05-29. */ public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME="student.db"; private static final int DATABASE_VERSION=2; public DatabaseHelper(Context context) { super(context,DATABASE_NAME,null,DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("create table student(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age TEXT);"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { sqLiteDatabase.execSQL("drop table if exists student"); onCreate(sqLiteDatabase); } } | cs |
먼저 SQLiteOpenHelper 클래스를 상속한 DatabaseHelper 클래스를 생성합니다. 그리고 생성자를 통하여 데이터베이스 이름과 버전을 이용해 상위 클래스의 생성자를 호출 합니다. 그리고 onCreate에서 새로운 테이블을 생성 합니다. onUpgrade 메소드는 데이터베이스의 버전이 바뀌었을 때 호출되는 메소드 입니다.
이런식으로 SQLiteOpenHelper클래스를 상속하여 데이터 베이스를 생성하고 테이블을 쉽게 만들 수 있습니다.
SQLiteOpenHelper를 상속한 DatabaseHelper클래스를 이용하여 테이블에 데이터를 추가하는 MainActivity클래스를 만들어 보겠습니다.
데이터를 추가하기 위한 MainActivity 화면은 다음과 같습니다.
이름과 나이를 입력후 추가를 누르면 student 테이블에 저장이 될 것입니다.
컬럼이 저장되기 위한 MainActivity 클래스는 다음과 같습니다.
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 46 47 48 49 50 51 | package com.example.donghyun.sqlite; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private DatabaseHelper dbhelper; private SQLiteDatabase db; EditText name,age; Button input; String s_name, s_age; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbhelper = new DatabaseHelper(this); try { db = dbhelper.getReadableDatabase(); }catch(SQLiteException e){ db = dbhelper.getWritableDatabase(); } name = (EditText)findViewById(R.id.editText3); age = (EditText)findViewById(R.id.editText4); input = (Button)findViewById(R.id.button); input.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.button: s_name = name.getText().toString(); s_age = age.getText().toString(); db.execSQL("insert into student values(null,'"+s_name+"',"+"'"+s_age+"');"); Toast.makeText(this,"추가되었습니다.",Toast.LENGTH_SHORT).show(); name.setText(""); age.setText(""); break; } } } | cs |
이제 테이블에 저장되어있는 데이터들을 리스트에 보여주는 클래스를 작성해보도록 하겠습니다. 현재 메인화면에는 데이터를 추가하는 것만 구현되어 있습니다.
리스트를 보여주는 화면으로 넘어가는 버튼을 만들어 버튼을 클릭하면 리스트를 보여주도록 하겠습니다.
이럴때 사용할 수 있는 것이 커서어댑터(CursorAdapter)입니다. 커서어댑터는 데이터베이스 또는 컨텐트 프로바이더의 쿼리 문장을 통해 얻은 데이터들의 집합인 커서객체와 연동합니다.
커서어댑터를 상속 받은 CursorAdapter1은 다음과 같습니다.
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 | package com.example.donghyun.sqlite; import android.content.Context; import android.database.Cursor; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.TextView; /** * Created by DongHyun on 2017-05-29. */ public class CursorAdapter1 extends CursorAdapter { public CursorAdapter1(Context context, Cursor c) { super(context, c); } @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.list,viewGroup,false); return v; } @Override public void bindView(View view, Context context, Cursor cursor) { TextView name = (TextView)view.findViewById(R.id.name1); TextView age = (TextView)view.findViewById(R.id.age1); String c_name = cursor.getString(cursor.getColumnIndex("name")); String c_age = cursor.getString(cursor.getColumnIndex("age")); Log.d("name",c_name); Log.d("age",c_age); name.setText(c_name.toString()); age.setText(c_age.toString()); } } | cs |
위에서 보시다 싶이 커서어댑터에서 중요한 메서드는 newView메서드와 bindView메소드 입니다. newView메서드는 뷰를 화면에 출력하는 기능을 제공하고 bindView메서드는 출력할 뷰와 컨텐트 프로바이더의 컬럼을 연결하는 역활을 합니다.
이제 실행결과를 보여드리겠습니다.
전체 소스파일이 필요하신분은 비밀 댓글로 메일적어주시면 보내드리겠습니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드] 핸들러(Handler) (0) | 2017.05.25 |
---|---|
[안드로이드] 스레드(Thread) (0) | 2017.05.19 |
[안드로이드] 프로그래스바(ProgressBar) 사용하기 (2) | 2017.05.18 |
[안드로이드] 리스트 뷰(ListView) 이용하기 (0) | 2017.05.17 |
[안드로이드] 스피너(Spinner) 이용하기 (1) | 2017.05.16 |