package greendrm.sqlite;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemLongClickListener;
public class SQLiteActivity extends ListActivity {
private static final boolean DEBUG = true;
private static final String TAG = "SQLite";
private DatabaseHelper mOpenHelper;
private ArrayList<Person> item = null;
PersonAdapter mAdapter;
private Person mPerson = null;
private static String DATABASE_NAME = "testdb.db";
private static String DATABASE_TABLE = "test_table";
private static int DATABASE_VERSION = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
item = new ArrayList<Person>();
mOpenHelper = new DatabaseHelper(this);
mOpenHelper.retriveData();
mAdapter = new PersonAdapter(item);
setListAdapter(mAdapter);
getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
mPerson = item.get(position);
DialogInterface.OnClickListener deleteListener =
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mOpenHelper.deleteData(mPerson);
item = mOpenHelper.retriveData();
mAdapter.notifyDataSetChanged();
}
};
DialogInterface.OnClickListener cancelListener =
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
};
new AlertDialog.Builder(SQLiteActivity.this)
.setTitle("Delete?")
.setNeutralButton("Delete", deleteListener)
.setNegativeButton("Cancle", cancelListener)
.show();
return false;
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//SQLiteDatabase db = mOpenHelper.getReadableDatabase();
if (Activity.RESULT_OK == resultCode) {
Bundle extra = data.getExtras();
Person person = new Person(extra.getString("firstname"),
extra.getString("lastname"),
extra.getString("country"),
Integer.parseInt(extra.getString("age")));
mOpenHelper.insertData(person);
item = mOpenHelper.retriveData();
mAdapter.notifyDataSetChanged();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem itemAdd = menu.add(0, 0, Menu.NONE, "새로만들기");
MenuItem itemRem = menu.add(0, 1, Menu.NONE, "종료");
itemAdd.setIcon(android.R.drawable.ic_menu_add);
itemRem.setIcon(android.R.drawable.ic_menu_close_clear_cancel);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
startActivityForResult(new Intent(this, AddActivity.class), 0);
return true;
case 1:
finish();
return true;
}
return (super.onOptionsItemSelected(item));
}
private class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + DATABASE_TABLE + "(" + "_id INTEGER PRIMARY KEY,"
+ "lastname VARCHAR, " + "firstname VARCHAR, " + "country VARCHAR, "
+ "age INT(3));");
String insertMe = "INSERT INTO " + DATABASE_TABLE
+ "(lastname, firstname, country, age) " + "VALUES ";
db.execSQL(insertMe + "('홍','길동','대한민국', 20);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
public void insertData(Person person) {
SQLiteDatabase db = getWritableDatabase();
String insertMe = "INSERT INTO " + DATABASE_TABLE
+ "(lastname, firstname, country, age) " + "VALUES ";
db.execSQL(insertMe + "('" + person.lastname + "'," + "'"
+ person.firstname + "'," + "'" + person.country
+ "', " + person.age + ");");
}
public void deleteData(Person person) {
SQLiteDatabase db = getReadableDatabase();
String deleteMe = "DELETE FROM " + DATABASE_TABLE;
db.execSQL(deleteMe + " WHERE " +
"lastname=" + "'" + person.lastname + "'" + " AND " +
"firstname="+ "'" + person.firstname + "'" + " AND " +
"country="+ "'" + person.country + "'" + " AND " +
"age="+ "'" + person.age + "'");
}
public ArrayList<Person> retriveData() {
//List<String> item = null;
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.query(DATABASE_TABLE, new String[] {"_id", "lastname", "firstname", "country", "age"}, null, null, null, null, null);
try {
item.clear();
int idColumn = c.getColumnIndex("_id");
int lastNameColumn = c.getColumnIndex("lastname");
int firstNameColumn = c.getColumnIndex("firstname");
int countryColumn = c.getColumnIndex("country");
int ageColumn = c.getColumnIndex("age");
int i = 0;
if (c.moveToFirst()) {
do {
i++;
int id = c.getInt(idColumn);
String firstName = c.getString(firstNameColumn);
String lastName = c.getString(lastNameColumn);
String country = c.getString(countryColumn);
int age = c.getInt(ageColumn);
//item.add("" + i + ":" + lastName + " " + firstName + "(" + country + ":"
// + age + ")");
item.add(new Person(firstName, lastName, country, age));
if (DEBUG) Log.d(TAG, id + ":" + lastName + " " + firstName + "(" + country + ":"
+ age + ")");
} while (c.moveToNext());
}
} finally {
if (c != null) c.close();
}
return item;
}
}
private class Person {
public String firstname;
public String lastname;
public String country;
int age;
public Person(String firstname, String lastname, String country, int age) {
this.firstname = firstname;
this.lastname = lastname;
this.country = country;
this.age = age;
}
}
private class PersonAdapter extends BaseAdapter {
private ArrayList<Person> obj;
public PersonAdapter(ArrayList<Person> obj) {
super();
this.obj = obj;
}
@Override
public int getCount() {
return obj.size();
}
@Override
public Object getItem(int position) {
return obj;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(SQLiteActivity.this);
convertView = inflater.inflate(R.layout.basic_list, parent, false);
holder = new ViewHolder();
holder.txt = (TextView)convertView.findViewById(R.id.textViewPerson);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
String firstname = obj.get(position).firstname;
String lastname = obj.get(position).lastname;
String country = obj.get(position).country;
int age = obj.get(position).age;
String tmp = "" + lastname + " " + firstname + "(" + country + ":"
+ age + ")";
holder.txt.setText(tmp);
return convertView;
}
class ViewHolder {
TextView txt;
}
}
}