이런저런 예제들을 섞어서 아래와 같은 액티비티를 만들었는데요.
데이터베이스커서라는게 데이터베이스에 대한 에디트를 하는 걸로 아는데...
이 코드에서는 한 소스파일에 데이터베이스도 열고 리스트뷰 뿌려주고 이런게 다 들어잇어요ㅠㅠ
데이터베이스에 대한거 따로, 리스트뷰로 뿌려주는 화면 따로 만들고 싶은데...
그걸 어떻게 해야할 지 모르겠네요ㅠㅠ
package com.example.callmeEx1;
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.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class ComplainMainEx1 extends ActionBarActivity {
TextView text01;
SQLiteDatabase database;
String tableName = "CUSTOMER";
DatabaseHelper helper;
ListView list01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_complain);
text01 = (TextView) findViewById(R.id.text01);
list01 = (ListView) findViewById(R.id.list01);
Button button01 = (Button) findViewById(R.id.button01);
button01.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
createDatabase();
}
});
Button button02 = (Button) findViewById(R.id.button02);
button02.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Cursor cursor = queryData();
if(cursor != null){
startManagingCursor(cursor);
String[] columns = {"name"};
int[] resIds = {R.id.text01};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.listitem, cursor, columns, resIds);
list01.setAdapter(adapter);
}
}
});
list01.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
Intent intent = new Intent(getApplicationContext(),
ComplainSecondEx1.class);
startActivity(intent);
}
});
}
private void createDatabase() {
String name = "customer.db";
int version = 2;
helper = new DatabaseHelper(this, name, null, version);
database = helper.getWritableDatabase();
//database = openOrCreateDatabase(name, MODE_WORLD_WRITEABLE, null);
}
private Cursor queryData(){
String sql = "select _id, name, age from " + tableName + " where age > 18";
Cursor cursor = database.rawQuery(sql, null);
if(cursor != null){
int count = cursor.getCount();
text01.append("데이터를 조회했어요. 레코드 갯수 : " + count + "\n");
}
return cursor;
}
class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
createTable(db);
insertData(db);
text01.append("헬퍼를 이용해서 데이터베이스가 만들어졌어요.\n");
}
@Override
public void onOpen(SQLiteDatabase db) {
text01.append("헬퍼를 이용해서 데이터베이스를 오픈했어요.\n");
super.onOpen(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
text01.append("헬퍼를 이용해서 데이터베이스를 업그레이드했어요. 이전버전 : " + oldVersion + ",현재버전 : " + newVersion + "\n");
}
private void createTable(SQLiteDatabase db){
String sql = "create table " + tableName + "(_id integer, name text, age integer)";
try{
db.execSQL(sql);
text01.append("헬퍼 안에서 테이블이 만들어졌어요." + tableName + "\n");
} catch(Exception ex){
text01.append("테이블 만들 때 예외." + ex.getMessage() + "\n");
ex.printStackTrace();
}
}
private void insertData(SQLiteDatabase db){
db.beginTransaction();
try{
String sql = "insert into " + tableName + "(_id, name, age) values(100, '홍길동', 21)";
db.execSQL(sql);
sql = "insert into " + tableName + "(_id, name, age) values(200, '소녀시대', 19)";
db.execSQL(sql);
db.setTransactionSuccessful();
text01.append("헬퍼 안에서 데이터를 넣었어요." + "\n");
} catch(Exception ex){
text01.append("데이터 추가할 때 예외." + ex.getMessage() + "\n");
ex.printStackTrace();
}finally{
db.endTransaction();
}
}
}
}