2017-04-21 50 views
0

我需要从手机内存(/ storage/emulated/0)打开一个数据库,并且打开的数据库(由Linux的DB浏览器创建)的“SQLiteCantOpenDatabaseException”有表“android_metadata”和他们各自的字段(locale ... es_US)。打开数据库Android

我需要开放,从外部数据库中读取数据(应用程序需要从网站上下载的数据库和读取数据,并把中的TextView到应用程序的活动)

该应用程序有权读取和写入外部存储器下面

代码(仅按钮的代码来获取数据库的引用)

case R.id.button4: 
      { 
       int ID,IDn,IDa; 
       String cabeceras[] ={"nombre","apellido",_ID},lectura=new String(),err=""; 
       ArrayList<String> arregloDatos = new ArrayList<>(); 

       try { 
        SQLiteDatabase db = SQLiteDatabase.openDatabase(Environment.getExternalStorageDirectory().getPath() +"/"+"pruebaDB.db", null, SQLiteDatabase.OPEN_READWRITE); 

        Cursor cursor = db.query("persona", cabeceras, null, null, null, null, null); 


        ID = cursor.getColumnIndex(_ID); 
        IDn = cursor.getColumnIndex("nombre"); 
        IDa = cursor.getColumnIndex("apellido"); 

        while (cursor.moveToNext()) { 
         lectura = cursor.getString(ID) + " " + cursor.getString(IDn) + " " + cursor.getString(IDa); 
         arregloDatos.add(lectura); 

        } 

        Intent i = new Intent(this, Main2Activity.class); 
        i.putStringArrayListExtra("cadena", arregloDatos); 
        startActivity(i); 
       }catch (Exception g) 
        { 
         Toast msg =Toast.makeText(this,g.getClass().toString(),Toast.LENGTH_SHORT); 
         msg.show(); 
        } 

       break; 
      } 

编辑:我发现这个问题,这个问题是光标,becose我评论它,应用程序没有显示出任何异常。 现在...我的问题是“如何从SQliteDatabase对象读取数据”

+0

确定您的数据库路径正确吗? – gdaras

+0

是的,y从Toast中读取并获得“/ storage/emulated/0”并检查文件是否存在我的文件资源管理器 –

回答

0

我不认为你能够将SQLDatabases编写到外部。如果它是全部字符串或整型数据,则可以将数据库写入内部,然后编写一个函数,该函数将遍历表并连接数据并将其作为.txt写入外部。

是的,只要阅读.openDatabase方法的文档。我认为第一个参数是查找内容URI的路径部分,而不是ext内存文件路径。

https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#openDatabase(java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory,%20int,%20android.database.DatabaseErrorHandler)

+0

你说我无法从我的手机内存和我的SD卡打开数据库? –

+0

我不确定,但我不认为你可以在那里写一个。我认为Android框架设置为将sql数据库放入应用程序分配的内部存储中。但是您可以获取游标并使用while循环(cursor.movetonext())并将数据库信息拼接起来,然后将其写入外部存储中的.Txt文件。 – rznazn