마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SQLite 데이터 누적된 수치들

0 추천

안녕하세연.

현재 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);
  }
    }
}

앤드류이드 (6,190 포인트) 님이 2013년 4월 24일 질문

1개의 답변

0 추천
 
채택된 답변

 String age = ageEdit.getText().toString();
 String Data = result.getText().toString();

저게 문제가 아닐까요? 저 부분 보면 edittext에 있는 모든 text를 가져와서 스트링을 만든건데

edittext등에서 텍스트가 변경된 부분만 TextWatcher 등을 사용해서 저장을 하셔야 하지 않을 까요?

아니면 기존에 값을 임의의 변수에 저장하고 새로운 값을 받아서 다른 부분만 저장을 하시던지 해야할 듯 합니다.

wind (2,240 포인트) 님이 2013년 4월 24일 답변
앤드류이드님이 2013년 4월 24일 채택됨
...