2013-04-07 15 views
1

SQL에 익숙하지 않습니다. Sqlite 관리자를 사용하여 만든 emergency_no라는 데이터베이스가 있습니다. "emergency_no"라는 테이블 하나만있는 간단한 데이터베이스입니다. 데이터베이스 이름 emergency_no.sqlite 내 자산 폴더에 있지만 내가 에뮬레이터에서 실행 때 보여줍니다 :.sqlite 파일이 장치에 생성되었지만 sqlite 테이블을 찾을 수 없습니다.

android.sqlite.SQLiteException:no such table :emergency_no: 

나는 /data/data/com.citymasetro/database/에 emergency_no.sqlite 및 emergency_no.journel을 가지고 있지만 내 searchscreen.java에서이 호출하고

package com.citymaestro; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

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


public class Dbmanager1 { 

public static final String KEY_ROWID="_id"; 
public static final String policeno="police_no"; 
public static final String fireno="fire_no"; 
public static final String ambulanceno="ambulance_no"; 
public static final String womenno="women_cell"; 

public static final String DATABASE_NAME="emergency_no"; 
public static final String DATABASE_TABLE="emergency_no"; 
public static final int DATABASE_VERSION=1; 
private static String DB_PATH = "/data/data/com.citymaestro/databases/"; 


public Dbhelper ourhelper; 
public static Context ourcontext; 
public SQLiteDatabase ourdatabase; 


private static class Dbhelper extends SQLiteOpenHelper{ 
    private boolean mCreateDatabase = false; 
    private boolean mUpgradeDatabase = false; 

    public Dbhelper(Context context) { 
     super(context, DATABASE_NAME, null, 1); 
     // TODO Auto-generated constructor stub 
    } 






    public void initializeDatabase(String path) { 
      // DATABASE_PATH = path; 
      getWritableDatabase(); 

      if(mUpgradeDatabase) { 
       ourcontext.deleteDatabase(DATABASE_NAME); 
      } 

      if(mCreateDatabase || mUpgradeDatabase) { 
       try { 
        createDataBase(); 
       } catch (IOException e) { 
        throw new Error("Error copying database"); 
       } 
      } 
     } 


     public void createDataBase() throws IOException 
     { 
      boolean dbExist = checkDataBase(); 


      if(dbExist) 
      { 
       //do nothing - database already exist 
      }else{ 

       this.getReadableDatabase(); 

       try { 

        copyDataBase(); 

       } catch (IOException e) { 

        throw new Error("Error copying database"); 

       } 
      } 

     } 

     private boolean checkDataBase() 
     { 
      SQLiteDatabase checkDB = null; 

      try 
      { 
       String myPath = DB_PATH + DATABASE_NAME; 
       checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY); 


      }catch(SQLiteException e) 
      { 
       //database does't exist yet. 
      } 
      if(checkDB != null) 
      { 
       checkDB.close(); 
      } 

      return checkDB != null ? true : false; 
     } 
     private void copyDataBase() throws IOException 
     { 
      //Open your local db as the input stream 
      InputStream myInput = ourcontext.getAssets().open(DATABASE_NAME); 

      // Path to the just created empty db 
      String outFileName = DB_PATH + DATABASE_NAME; 

      //Open the empty db as the output stream 
      OutputStream myOutput = new FileOutputStream(outFileName); 

      //transfer bytes from the inputfile to the outputfile 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = myInput.read(buffer))>0) 
      { 
       myOutput.write(buffer, 0, length); 
      } 
      //Close the streams 
      myOutput.flush(); 
      myOutput.close(); 
      myInput.close(); 
     } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
    /* try { 
      createDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.d("GAG","oncreatem"); 
     } 
     */ 
     mCreateDatabase = true; 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     mUpgradeDatabase = true; 
    } 

} 
public Dbmanager1(Context c) 
{ 
    ourcontext=c; 
    //Dbhelper dbh=new Dbhelper(ourcontext); 

    //Log.d("gag","constru"); 
} 
public Dbmanager1 open(){ 
    ourhelper=new Dbhelper(ourcontext); 
    ourdatabase=ourhelper.getWritableDatabase(); 
    return this; 
} 

public void close(){ 
    ourhelper.close(); 

} 
public String getdata() { 
     // TODO Auto-generated method stub 
     String[] columns= new String[]{ KEY_ROWID,policeno}; 
     Cursor c =ourdatabase.query(DATABASE_TABLE, columns, null, null,null, null, null); 
     String result=""; 
     int irow=c.getColumnIndex(KEY_ROWID); 
     int irow2=c.getColumnIndex(policeno); 
     for(c.moveToFirst(); !c.moveToLast();c.moveToNext()){ 
      result=result + c.getString(irow) + "" +c.getString(irow2) + "\n"; 
     } 

     return result; 
    } 


} 

아래

내 dbhelper 코드는

 String str; 
    db.open(); 
    // Log.d("TAG","before str"); 
    try { 
     str=db.getdata(); 
     // Log.d("TAG",str); 
     db.open(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.d("TAG",e.toString()); 
    } 
    searchscreen sc; 
    //sc= db.getdata(i, k); 
    db.close(); 

실수를 찾을 수 없습니다. 미리 감사드립니다

+0

당신은 확인 했나요을. – Daniel

+0

도움이 되었으면 답을 올바르게 확인하십시오 :) – Daniel

+0

'./databases' 폴더를 확인 했습니까? 'emergency_no'와'emergency_no.sqlite' 파일이 있습니까? 또한 android_metadata' 테이블도 android_metadata' 테이블에 포함시켜야합니다. –

답변

0

문제는 기존의 테이블을 쿼리하지 않기 때문에 테이블을 먼저 만들어야한다는 것입니다. 예를 들어 두 개의 필드 (GUIDE_ID 및 PRIMARY_KEY)가있는 테이블을 가질 수 있으므로 다음과 같이 처리해야합니다.

public static final String create_emerg_table = "create table "+ 
      Constants.EMERG_TABLE + " ("+ 
      Constants.EMERG_GUIDE_ID + " integer, "+ 
      Constants.EMERG_PRIMARY_KEY + " integer primary key autoincrement);"; 

그리고 다음에서 onCreate에서 테이블 생성 : 테이블도 ????있는 경우 당신은 코드에서 생성되지 않기 때문에

@Override 
public void onCreate(SQLiteDatabase db) { 
    Log.v(TAG, "Creating all the tables"); 
     try 
     { 
      db.execSQL(create_emerg_table); 
     }catch(SQLException ex) 
     { 
      Log.e(TAG, ex.getMessage()); 
     } 
} 
+0

./database 폴더에 emergency_no 및 emergency_no가 있는지 확인했습니다. sqlite 거기에 .. 그리고 난 또한 android_metadata 테이블을 만들었습니다 .. 그리고 코드를 넣어지만 여전히 작동하지 않습니다 –

관련 문제