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

안드로이드 db 연동에 문제가 있어요ㅠㅠ

0 추천
package com.example.transportphone;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBase {
 public static final String TAG = "Database";

 //DB이름
 
 public static final String DB_name = "INFO";
 /**
  * 싱글톤 인스턴스
  */
 private static DataBase database;

 /**
  * table name for information of registers
  */
 public static String TABLE_INFO = "INFO";

    /**
     * version
     */
 public static int DATABASE_VERSION = 1;


    /**
     * Helper class defined
     */
    private DatabaseHelper dbHelper;

    /**
     * SQLiteDatabase 인스턴스
     */
    protected SQLiteDatabase db;

    /**
     * 컨텍스트 객체
     */
    private Context context;

    /**
     * 생성자
     */
 private DataBase(Context context) {
  this.context = context;
 }
 /**
  * 인스턴스 가져오기
  */
 public static DataBase getInstance(Context context) {
  if (database == null) {
   database = new DataBase(context);
  }

  return database;
 }

 /**
  * 데이터베이스 열기
  */
    public boolean open() {
     println("opening database [" + DB_name +"].");

     dbHelper = new DatabaseHelper(context);
     db = dbHelper.getWritableDatabase();

     return true;
    }

    /**
     * 데이터베이스 닫기
     */
    public void close() {
     println("closing database [" + DB_name + "].");
     db.close();

     database = null;
    }

    /**
     * execute raw query using the input SQL
     * close the cursor after fetching any result
     *
     * @param SQL
     * @return
     */
    public Cursor rawQuery(String SQL) {
  println("\nexecuteQuery called.\n");

  Cursor c1 = null;
  try {
   c1 = db.rawQuery(SQL, null);
   println("cursor count : " + c1.getCount());
  } catch(Exception ex) {
      Log.e(TAG, "Exception in executeQuery", ex);
     }

  return c1;
 }

    public boolean execSQL(String SQL) {
  println("\nexecute called.\n");

  try {
   Log.d(TAG, "SQL : " + SQL);
   db.execSQL(SQL);
     } catch(Exception ex) {
   Log.e(TAG, "Exception in executeQuery", ex);
   return false;
  }

  return true;
 }



 /**
  * Database Helper inner class
  */
    private class DatabaseHelper extends SQLiteOpenHelper {

        public DatabaseHelper(Context context) {
            super(context, DB_name, null, DATABASE_VERSION);
        }

        public void onCreate(SQLiteDatabase db) {
         
         db = db.openOrCreateDatabase("info.s3db", null);//데이터베이스 불러오기 
         
         println("creating database [" + DB_name + "].");
         
         println("creating table [" + TABLE_INFO + "].");

         // drop existing table
         String DROP_SQL = "drop table if exists " + TABLE_INFO;
         try {
          db.execSQL(DROP_SQL);
         } catch(Exception ex) {
          Log.e(TAG, "Exception in DROP_SQL", ex);
         }

         // create table
         String CREATE_SQL = "create table " + TABLE_INFO + "("
             + "  _id INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT, "
             + "  name TEXT  NOT NULL, "
             + "  phonenumber TEXT NOT NULL, "
             + ");";
            try {
             db.execSQL(CREATE_SQL);
            } catch(Exception ex) {
          Log.e(TAG, "Exception in CREATE_SQL", ex);
         }

         try {
          db.execSQL(DROP_SQL);
         } catch(Exception ex) {
          Log.e(TAG, "Exception in DROP_SQL", ex);
         }

        }

        public void onOpen(SQLiteDatabase db)//데이터베이스 열기
        {
         println("opened database [" + DB_name + "].");

        }

        public void onUpgrade(SQLiteDatabase db, int oldVersion,
                              int newVersion)//업그레이드
        {
         println("Upgrading database from version " + oldVersion + " to " + newVersion + ".");



        }
    }

    private void println(String msg) {
     Log.d(TAG, msg);
    }

}

이 부분에서 no such table이라고 오류가 계속 나고 구문 오류는 없는데 실행했을 때 중단이 됩니다.

어떻게 해야 할까요?ㅜㅜ 도와주세요 제발 ㅜㅜ

 

익명사용자 님이 2014년 7월 10일 질문

1개의 답변

0 추천
어떤 함수에서 에러가 난건지....no such table 라고 한것으로 봐서는 없는 테이블명으로 쿼리를 날린것 처럼 보입니다.

그리고 위의 코드에서 onCreate() 안에서 다시 db를 여실 필요는 없습니다. 이미 인자로 넘어온 DB가 열려있으니까요...

해당 DB는 생성자에 넣으신 DB_name 으로 생성됩니다.
바램 (19,650 포인트) 님이 2014년 7월 10일 답변
...