안드로이드 sqllite정리
Posted by Albert 3364Day 19Hour 5Min 24Sec ago [2016-02-02]
Android 상에서 SQLite 예제를 제작해봅시다.
첫 번째 예제는 Layout에 결과물을 찍는 형태가 아닌 콘솔(Logcat)에 결과를 출력하는 형태로 진행하겠습니다.
데이터를 어떻게 주고 받는지가 주 포인트라고 할 수 있습니다.
Layout xml 파일은 생성 시 상태 그대로 입니다.
|
MainActivity.java
package com.example.test52sqlite;
import android.os.Bundle; import android.util.Log; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase;
public class MainActivity extends Activity {
SQLiteDatabase db; MySQLiteOpenHelper helper; // 전역변수로 사용할 것들을 미리 빼두었다.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
helper = new MySQLiteOpenHelper(MainActivity.this, // 현재 화면의 context "person.db", // 파일명 null, // 커서 팩토리 1); // 버전 번호
// 1. 데이터 저장 insert("유저1", 18, "경기도"); insert("유저2", 28, "각기도"); insert("유저3", 28, "각도기");
// 2. 수정하기 update("유저1", 58); // 나이만 수정하기
// 3. 삭제하기 delete("유저2");
// 4. 조회하기 select(); }
// insert public void insert(String name, int age, String address) { db = helper.getWritableDatabase(); // db 객체를 얻어온다. 쓰기 가능
ContentValues values = new ContentValues(); // db.insert의 매개변수인 values가 ContentValues 변수이므로 그에 맞춤 // 데이터의 삽입은 put을 이용한다. values.put("name", name); values.put("age", age); values.put("address", address); db.insert("student", null, values); // 테이블/널컬럼핵/데이터(널컬럼핵=디폴트) // tip : 마우스를 db.insert에 올려보면 매개변수가 어떤 것이 와야 하는지 알 수 있다. }
// update public void update (String name, int age) { db = helper.getWritableDatabase(); //db 객체를 얻어온다. 쓰기가능
ContentValues values = new ContentValues(); values.put("age", age); //age 값을 수정 db.update("student", values, "name=?", new String[]{name}); /* * new String[] {name} 이런 간략화 형태가 자바에서 가능하다 * 당연하지만, 별도로 String[] asdf = {name} 후 사용하는 것도 동일한 결과가 나온다. */
/* * public int update (String table, * ContentValues values, String whereClause, String[] whereArgs) */ }
// delete public void delete (String name) { db = helper.getWritableDatabase(); db.delete("student", "name=?", new String[]{name}); Log.i("db", name + "정상적으로 삭제 되었습니다."); }
// select public void select() {
// 1) db의 데이터를 읽어와서, 2) 결과 저장, 3)해당 데이터를 꺼내 사용
db = helper.getReadableDatabase(); // db객체를 얻어온다. 읽기 전용 Cursor c = db.query("student", null, null, null, null, null, null);
/* * 위 결과는 select * from student 가 된다. Cursor는 DB결과를 저장한다. public Cursor * query (String table, String[] columns, String selection, String[] * selectionArgs, String groupBy, String having, String orderBy) */
while (c.moveToNext()) { // c의 int가져와라 ( c의 컬럼 중 id) 인 것의 형태이다. int _id = c.getInt(c.getColumnIndex("_id")); String name = c.getString(c.getColumnIndex("name")); int age = c.getInt(c.getColumnIndex("age")); String address = c.getString(c.getColumnIndex("address")); Log.i("db", "id: " + _id + ", name : " + name + ", age : " + age + ", address : " + address); } } }
|
MySQLiteOpenHelper.java
package com.example.test52sqlite;
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper;
/* * sql을 사용하기 위한 제반 클래스 * SQLiteOpenHelper는 사용에 도움을 주는 클래스이다. */ public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public MySQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub
}
@Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub // SQLiteOpenHelper 가 최초 실행 되었을 때 String sql = "create table student (" + "_id integer primary key autoincrement, " + "name text, " + "age integer, " + "address text);"; db.execSQL(sql); }
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // db = 적용할 db, old/new 구 버전/신버전 // TODO Auto-generated method stub /* * db 버전이 업그레이드 되었을 때 실행되는 메소드 * 이 부분은 사용에 조심해야 하는 일이 많이 있다. 버전이 1인 사용자가 2로 바뀌면 * 한번의 수정만 하면 되지만 버전이 3으로 되면 1인 사용자가 2, 3을 거쳐야 하고 * 2인 사용자는 3 까지만 거치면 된다. 이렇게 증가할 수록 수정할 일이 많아지므로 * 적절히 사용해야 하며 가능하면 최초 설계 시에 완벽을 기하는 것이 가장 좋을 것이다. * 테스트에서는 기존의 데이터를 모두 지우고 다시 만드는 형태로 하겠다. */
String sql = "drop table if exists student"; db.execSQL(sql);
onCreate(db); // 테이블을 지웠으므로 다시 테이블을 만들어주는 과정 } } |
실행 결과 (여러 번 실행해서 사용자가 여러 개 들어가있는 상태임) (실행 결과는 Logcat 에서 확인할 수 있는 내용이다.)
10-01 00:44:42.801: I/db(585): 유저2정상적으로 삭제 되었습니다. 10-01 00:44:42.801: I/db(585): id: 1, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.810: I/db(585): id: 2, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.810: I/db(585): id: 3, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.810: I/db(585): id: 5, name : 유저3, age : 28, address : 할기디 10-01 00:44:42.810: I/db(585): id: 6, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.810: I/db(585): id: 8, name : 유저3, age : 28, address : 할기디 10-01 00:44:42.810: I/db(585): id: 9, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.810: I/db(585): id: 11, name : 유저3, age : 28, address : 할기디 10-01 00:44:42.820: I/db(585): id: 12, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.820: I/db(585): id: 14, name : 유저3, age : 28, address : 할기디 10-01 00:44:42.820: I/db(585): id: 15, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.831: I/db(585): id: 17, name : 유저3, age : 28, address : 각도기 10-01 00:44:42.831: I/db(585): id: 18, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.841: I/db(585): id: 20, name : 유저3, age : 28, address : 각도기 10-01 00:44:42.841: I/db(585): id: 21, name : 유저1, age : 58, address : 경기도 10-01 00:44:42.841: I/db(585): id: 23, name : 유저3, age : 28, address : 각도기 [출처] Android - SQLite 활용 예제1|작성자 장스 |
출처: http://blog.naver.com/tinatan/70176627062