안녕하세요. 아침의 맑은 공기를 마시며... 어려운 과제를 ㅜ...


어플 배포시에 db가 초기화되기 때문에 asset폴더에서 db를 포함시키는 방법이 있다고 해서 구현해 보고 있습니다.


복사 부분은 빨간색으로 표시해놓았습니다. 소스상에 에러는 발견되지 않았구요.. 에뮬에서 잘돌아갑니다..


하지만 단말기에서 실행시켰을 경우 db가 업데이트 되지 않네요.. ㅠㅠ


처음 db를 생성시에 asset폴더에 생성을 시킨후에복사를 시켜야 하는건가요?..


많은 도움 부탁드립니다.


package material.data.db;


import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import android.app.Activity;

import android.content.Context;

import android.content.res.AssetManager;

import android.database.Cursor;

import android.database.SQLException;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnTouchListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;


public class ASMSActivity extends Activity implements OnTouchListener {

    /** Called when the activity is first created. */

  private Button createB, dropB, insertB, updateB, deleteB, selectB;

  private EditText et1, et2, et3;

  private SQLiteDatabase db;

  private static String DB_NAME="Material.db";                        //DB name setting

  private final static int DB_MODE=Context.MODE_PRIVATE;

  private final static String T_NAME="material";

  

  public void copydb(Activity act) {

   

AssetManager am = act.getAssets();

File f = new File("/data/data/material.data.db/databases/Material.db");


FileOutputStream fos = null;

BufferedOutputStream bos = null;


try {


InputStream is = am.open("Material.db");

BufferedInputStream bis = new BufferedInputStream(is);


// 만약에 파일이 있다면 지우고 다시 생성

if (f.exists()) {

f.delete();

f.createNewFile();

}

fos = new FileOutputStream(f);

bos = new BufferedOutputStream(fos);


int read = -1;

byte[] buffer = new byte[1024];

while ((read = bis.read(buffer, 0, 1024)) != -1) {

bos.write(buffer, 0, read);

}

bos.flush();


fos.close();

bos.close();

is.close();

bis.close();


} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

  

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        createB = (Button)findViewById(R.id.b01);

        dropB = (Button)findViewById(R.id.b02);

        insertB = (Button)findViewById(R.id.b03);

        updateB = (Button)findViewById(R.id.b04);

        deleteB = (Button)findViewById(R.id.b05);

        selectB = (Button)findViewById(R.id.bselect);

        

        createB.setOnTouchListener((OnTouchListener) this);

        dropB.setOnTouchListener((OnTouchListener) this);

        insertB.setOnTouchListener((OnTouchListener) this);

        updateB.setOnTouchListener((OnTouchListener) this);

        deleteB.setOnTouchListener((OnTouchListener) this);

        selectB.setOnTouchListener((OnTouchListener) this);

        

        et1 = (EditText)findViewById(R.id.et01);

        et2 = (EditText)findViewById(R.id.et02);

        et3 = (EditText)findViewById(R.id.et03);

        


        openDB();

    }

 

    

    //DB open

    private void openDB(){

     db = openOrCreateDatabase(DB_NAME, DB_MODE, null);

     showToast("DB("+DB_NAME+")생성 or 열림");

    }

    //Message

    private void showToast(String msg) {

  // TODO Auto-generated method stub

  Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();

 }

 

 public boolean onTouch(View v, MotionEvent event) {

   // TODO Auto-generated method stub

     if(v == createB){

      createTable();

     }else if(v == dropB){

      dropTable();

     }else if(v == insertB){

      insertData();

     }else if(v == updateB){

      updateData();

     }else if(v == deleteB){ 

      deleteData();

     }else{ //v == selectB

      selectData();

     }

  return false;

 }

 

 //SQL Process

 private boolean execSQL(String sql){

  try{

   db.execSQL(sql);

   return true;

  }catch (SQLException se) {

   // TODO: handle exception

   return false;

  }  

 }

 

 //Data Select

 private void selectData() {

  // TODO Auto-generated method stub

  String sql = "SELECT name, location, number FROM ";

   sql += T_NAME;

   sql += " WHERE name = \"";

   sql += et1.getText().toString();

   sql += "\"";

  Log.e("selectData(): ",sql);

  try{

   Cursor cur = db.rawQuery(sql, null);

   

   cur.moveToFirst();

   if(cur.getCount() > 0){

    et2.setText(cur.getString(1));

    et3.setText(cur.getString(cur.getColumnIndex("number"))); 

   }else{

    showToast("조회 데이타가 없습니다.");

   }

   

  }catch (SQLException se) {

   // TODO: handle exception

   Log.e("selectData()Error! : ",se.toString());

  }   

 }

 

 //Data Delete

 private void deleteData() {

  // TODO Auto-generated method stub

  String sql = "DELETE FROM ";

  sql += T_NAME;

  sql += " WHERE name = \"";

  sql += et1.getText().toString();

  sql += "\"";

  

  if(!this.execSQL(sql)){

   showToast("Data("+T_NAME+")delete Error!");

  }else{

   showToast("Data("+T_NAME+")delete OK!");

  }

 }

 

 //Data Update

 private void updateData() {

  // TODO Auto-generated method stub

  String sql = "UPDATE ";

  sql += T_NAME;

  sql += " SET ";

  sql += " location = '";

  sql += et2.getText().toString();

  sql += "', number = '";

  sql += et3.getText().toString();

  sql += "' WHERE name = \"";

  sql += et1.getText().toString();

  sql += "\"";


  if(!this.execSQL(sql)){

   showToast("Data("+T_NAME+")update Error!");

  }else{

   showToast("Data("+T_NAME+")update OK!");

  }

 }

 

 //Data Insert

 private void insertData() {

  // TODO Auto-generated method stub

  String sql = "INSERT INTO ";

  sql += T_NAME;

  sql += "(name,location,number,ddate) VALUES ( '";

  sql += et1.getText().toString();

  sql += "', '";

  sql += et2.getText().toString();

  sql += "', '";

  sql += et3.getText().toString();

  sql += "', ";  

  sql += "date('now') )";

  

  if(!this.execSQL(sql)){

   showToast("Data("+T_NAME+")insert Error!");

  }else{

   showToast("Data("+T_NAME+")insert OK!");

  }

 }

 

 //Table Drop

 private void dropTable() {

  // TODO Auto-generated method stub

  String sql = "drop table ";

  sql += T_NAME;

  

  try{

   db.execSQL(sql);

   showToast("Table("+T_NAME+")삭제 완료!");

  }catch (SQLException se) {

   // TODO: handle exception

   Log.e("dropTable()Error! : ",se.toString());

  }

 }

 

 //Table Create

 private void createTable() {

  // TODO Auto-generated method stub

  String sql = "create table ";

  sql += T_NAME;

  sql += "(_id integer primary key autoincrement, name text not null, location text not null,  ";

  sql += "number text default 'one', ddate date)";

  

  try{

   db.execSQL(sql);

   showToast("Table("+T_NAME+")생성 완료!");

  }catch (SQLException se) {

   // TODO: handle exception

   //Log.e("createTable()시오류 : ",se.toString());

  }

 }

}