2013-02-01 64 views
0

在我的android應用程序中,我使用SQLite數據庫。它僅適用於模擬器。當我將apk文件安裝到設備中時,它不會顯示任何數據。但在我的模擬器中,它工作得很好。我無法理解這個問題。帶設備的SQLite數據庫

1)我是否將任何設備複製到設備上以使其正常工作?

2)我創建的數據庫是否適用於所有人?

3)我是否爲每個新用戶備份數據庫?

有人解釋請

public class SQLiteAdapterv { 

public static final String MYDATABASE_NAME2 = "MY_DATABASE2"; 
public static final String MYDATABASE_TABLE2 = "MY_VLGMAS"; 
public static final int MYDATABASE_VERSION = 1; 
public static final String KEY_ID = "_id"; 
public static final String KEY_CONTENT1 = "Content1"; 
public static final String KEY_CONTENT2 = "Content2"; 

public static final String KEY_CONTENT3 = "Content3"; 
public static final String KEY_CONTENT4 = "Content4"; 
public static final String KEY_VCODE = "vcode"; 
public static final String KEY_VNAME = "vname"; 
public static final String KEY_DIVSEC= "divsec"; 

private static final String SCRIPT_CREATE_DATABASE1 = 
      "create table " + MYDATABASE_TABLE2 + " (" 
      + KEY_ID + " integer primary key autoincrement, " 
      + KEY_VCODE + " text not null, " 
      + KEY_VNAME + " text not null," 
      + KEY_DIVSEC + " text not null);"; 

private SQLiteHelper sqLiteHelper; 
private SQLiteDatabase sqLiteDatabase; 
private Context context; 

public SQLiteAdapterv(Context c) 
{ 
    context=c; 
} 
public SQLiteAdapterv openToRead() throws android.database.SQLException { 
     sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME2, null, MYDATABASE_VERSION); 
     sqLiteDatabase = sqLiteHelper.getReadableDatabase(); 
     return this; 
    } 
public SQLiteAdapterv openToWrite() throws android.database.SQLException { 
     sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME2, null, MYDATABASE_VERSION); 
     sqLiteDatabase = sqLiteHelper.getWritableDatabase(); 
     return this; 
    } 
public void close(){ 
     sqLiteHelper.close(); 
    } 
public long insert(String vcode, String vname,String divsec){ 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(KEY_VCODE, vcode); 
     contentValues.put(KEY_VNAME, vname); 
     contentValues.put(KEY_DIVSEC, divsec); 
     return sqLiteDatabase.insert(MYDATABASE_TABLE2, null, contentValues); 
    } 
public int deleteAll(){ 
     return sqLiteDatabase.delete(MYDATABASE_TABLE2, null, null); 
    } 
public Cursor queueAll(){ 
     String[] columns = new String[]{KEY_ID, KEY_VCODE, KEY_VNAME,KEY_DIVSEC}; 
     Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE2, columns, 
     null, null, null, null, null); 
     return cursor; 
    } 
public String getDivSec(String vname) 
{ 
    Cursor c=sqLiteDatabase.rawQuery("SELECT * FROM " + MYDATABASE_TABLE2 + " WHERE "+KEY_VNAME +"='"+ vname+"'",null); 
    c.moveToFirst(); 
    String divsec=""; 
    if (c!=null) 
    { 
     divsec=c.getString(3); 
    } 
    c.close(); 
    return divsec; 
} 

public String[] getAllVillage() 
{ 
    int i=0; 
    Cursor c=sqLiteDatabase.rawQuery("SELECT * FROM " + MYDATABASE_TABLE2 ,null); 
    String[] villagelist=new String[c.getCount()]; 
    if (c.moveToFirst()) 
    { 
     do 
     { 
      villagelist[i]=c.getString(2); 
      i++; 
     }while(c.moveToNext()); 
    } 
    c.close(); 
    return villagelist; 
} 
public String getVcode(String vname) 
{ 
    Cursor c=sqLiteDatabase.rawQuery("SELECT * FROM " + MYDATABASE_TABLE2 + " WHERE "+KEY_VNAME +"='"+ vname+"'",null); 
    c.moveToFirst(); 
    String vcode=""; 
    if (c!=null) 
    { 
     vcode=c.getString(1); 
    } 
    c.close(); 
    return vcode; 
} 

public class SQLiteHelper extends SQLiteOpenHelper 
{ 

    public SQLiteHelper(Context context, String name, 
      CursorFactory factory, int version) { 
     super(context, name, factory, version); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(SCRIPT_CREATE_DATABASE1); 
    } 

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

    } 

} 

} 
+1

發佈一些代碼。 – Anukool

+1

發佈一些代碼,或更多的說明,而不是「它不會顯示任何數據」。 – Jack

+0

我使用這麼多活動,並且我用數據庫做了很多事情。我應該發佈哪一個?我的問題是它在仿真器上運行良好。爲什麼不在設備上? –

回答

0

是的,你需要將該數據庫複製到Android device.Refer這 tutorial的解決方案。

+0

包名稱它只顯示如何準備SQlite數據庫 –

+0

請參閱完整的教程,我成功地使用它爲我的Android應用程序 – Cris

+0

爲什麼我複製到資產文件夾? –

1

通常SQLite的數據存儲在

//data/data/<Your-Application-Package-Name>/databases/<your-database-name> 

但你不能看到他們,除非你有root權限。 所以你可以在SD卡直接存儲你的數據庫是這樣的:

static class SQLiteHelper extends SQLiteOpenHelper { 

SQLiteHelper(final Context context) { 
    super(context, Environment.getExternalStorageDirectory() 
      + File.separator + "/DataBase/" + File.separator 
      + DATABASE_NAME, null, DATABASE_VERSION); 
} 

,現在你可以看到在數據庫文件夾中創建數據庫/ SD卡 如果您存儲烏爾內部存儲器DATABSE那麼你也可以複製烏爾數據庫從內部存儲器到SD卡:)

+0

如果它可以幫助你可以標記我的答案是正確的:) – Shiv

+0

不,不,你的情況下這個類是 ...我創建了這個類不同,以處理我所有的數據庫..等待我編輯我的答案..現在看到 – Shiv

+0

我認爲SQLiteHelper是保留關鍵字 –