안녕하세연.
현재 sqlite db를 추후에 활용해야해서 연습 중인데요
db를 확인한 결과
누적된 결과값이 같이 출력되는 오류를 겪고 있습니다.
현재 xml로는 TextView 1개를 쓰고 있으면
추가버튼을 누를때마다 1개의 TextView에 현재 시간과 날짜를 뿌려주어 밑으로 게속 누적되게 구현하고 있습니다.
근데 이걸 db확인 결과
db에도 누적된 값들이 같이 표시되어 나오는게 저의 현재 문제점이랍니다.ㅠ
폰상에는 누적된 수치들이 보여지는 것이 맞지만.
db상에는 각 칸마다 최종값들만 나타나게 하고 싶습니다ㅠㅠ
메인자바소스는 다음과 같습니다.
package com.example.last;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import android.app.Activity;
import android.content.Context;
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.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
EditText nameEdit;
EditText ageEdit;
TextView result;
DBHelper dbHelper;
final static String dbName = "Person.db";
final static int dbVersion = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameEdit = (EditText)findViewById(R.id.nameedit);
ageEdit = (EditText)findViewById(R.id.ageedit);
result = (TextView)findViewById(R.id.result);
dbHelper = new DBHelper(this, dbName, null, dbVersion);
}
public void mOnClick(View v){
SQLiteDatabase db;
String sql;
switch (v.getId()) {
case R.id.insert: //추가 버튼(insert)
//String name = nameEdit.getText().toString();
String age = ageEdit.getText().toString();
String Data = result.getText().toString();
db = dbHelper.getWritableDatabase();
sql = String.format("INSERT INTO person VALUES(NULL, '%s', '%s');", Data, age);
db.execSQL(sql);
//result.append("\nInsert Success");
TimeZone timezone = TimeZone.getTimeZone("Etc/GMT-9");
TimeZone.setDefault(timezone);
SimpleDateFormat formater = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.KOREA);
Date current = new Date();
String mtime = formater.format(current);
System.out.println(mtime);
result.setText(result.getText().toString() + "\n"+ mtime + " dBm");
break;
case R.id.delete: //전체삭제 버튼(delete)
db = dbHelper.getWritableDatabase();
sql = "DELETE FROM person;";
db.execSQL(sql);
result.append("\nDelete Success");
break;
case R.id.update: //전체수정 버튼(update)
db = dbHelper.getWritableDatabase();
sql = "UPDATE person SET age=0;";
db.execSQL(sql);
result.append("\nUpdate Success");
break;
case R.id.select: //조회 버튼(select)
db = dbHelper.getReadableDatabase();
sql = "SELECT * FROM person;";
Cursor cursor = db.rawQuery(sql, null);
if(cursor.getCount() > 0){
while(cursor.moveToNext()){
result.append(String.format("\n이름 = %s, 나이 = %s",
cursor.getString(1), cursor.getString(2)));
}
}else{
result.append("\n조회결과가 없습니다.");
}
cursor.close();
break;
}
dbHelper.close();
}
class DBHelper extends SQLiteOpenHelper{
//생성자 - database 파일을 생성한다.
public DBHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
//DB 처음 만들때 호출. - 테이블 생성 등의 초기 처리.
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT,"+" DATUM TEXT, POWER INTEGER);");
result.append("\nperson 테이블 생성 완료.");
//Log.i("last", "TABLE OPEN SUCESS");
}
//DB 업그레이드 필요 시 호출. (version값에 따라 반응)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS person");
onCreate(db);
}
}
}
