【问题标题】:SQLite database with device带设备的 SQLite 数据库
【发布时间】:2013-02-01 05:26:03
【问题描述】:

在我的 android 应用程序中,我使用 SQLite 数据库。它仅适用于模拟器。当我将我的 apk 文件安装到设备中时,它不会显示任何数据。但在我的模拟器中效果很好。我无法理解这个问题。

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

    }

 }

}

【问题讨论】:

  • 发布一些代码,或者更多的描述,而不是“它不会显示任何数据”。
  • 我使用了很多活动,并且我用数据库做了很多事情。我应该发哪一个?我的问题是它在模拟器上运行良好。为什么不在设备上?
  • 另外,我检查了设备 sdcard。它不会在 \data 下显示包名

标签: android android-sqlite sqlite


【解决方案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);
}

现在您可以在 /sdcard 的 DataBase 文件夹中看到创建的数据库 如果您将您的数据库存储在内存中,那么您也可以将您的数据库从内存复制到 SD 卡:)

【讨论】:

  • 不不不。在你的情况下,这个类是 ...我创建了这个不同的类来处理我的所有数据库..等待我正在编辑我的 ans ..现在看
  • 我认为 SQLiteHelper 是保留关键字
  • 是的,将它单独创建以处理和创建数据库是一个很好的做法......但是它是一个保留关键字,所以你可以命名其他东西,但我认为这样做很好
  • 如果我创建了一个类并编写了上面的代码,它会自动存储数据库而没有任何东西吗?我的意思是没有任何呼叫这个类
  • 通过这个链接你会得到一个想法developer.android.com/guide/topics/data/data-storage.html#db如果你的主类如果不同的话只是从那里调用它的构造函数.. SQLiteHelper s= new SQLiteHelper(this);
【解决方案2】:

是的,您需要将该数据库复制到 android 设备。请参阅此 tutorial 解决方案。

【讨论】:

  • 参考完整教程,我在我的安卓应用中成功使用了它
  • 为什么要复制到asset文件夹?
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 2011-10-19
  • 2012-04-17
  • 2015-04-21
  • 1970-01-01
  • 2011-08-26
  • 2012-03-26
  • 2016-05-23
相关资源
最近更新 更多