0

我正在开发APP1和APP2两个Android应用程序。并且我在APP1的“UserLogin”表中输入值,并且想要在APP2中获取“UserLogin”表的数据。但是当我提取值时它给我错误UserLogin表不存在。我如何能在APP 2如何从Android数据库的现有表中获取数据

获取数据,这里是我的数据库辅助类

public class DatabaseHelper extends SQLiteOpenHelper { 
    private static final String LOG = "DatabaseHelper"; 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "MessengerDb"; 

    // Table Names 
    private static final String TABLE_USER_LOGIN= "UserLogin"; 
    private static final String TABLE_CHAT_MESSAGE_THREAD = "ChatMessageThread"; 
    private static final String TABLE_CHAT_MESSAGE = "ChatMessage"; 

    //Login table column name 
    private static final String KEY_ID = "id"; 
    private static final String KEY_LoginUserInfoId = "LoginUSerInfoId"; 
    private static final String KEY_LoginUserFullName = "LoginUserFullName"; 
    private static final String KEY_LoginUserAvatarURL = "LoginUserAvatarURL"; 
    private static final String KEY_LoginStatus = "LoginStatus"; 


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


    @Override 
    public void onCreate(SQLiteDatabase db) { 
     //db.execSQL(CREATE_TABLE_USER_LOGIN); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.d("Database updated", "Database Updated"); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER_LOGIN); 

     // create new tables 
     // onCreate(db); 
    } 


    //-----------------Get login user--------------// 
    public List<UserLogin> getLoginUser() { 

     List<UserLogin> loginUser = new ArrayList<UserLogin>(); 

     SQLiteDatabase db = this.getReadableDatabase(); 

     Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_USER_LOGIN, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       UserLogin uL = new UserLogin(); 
       uL.setId(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_ID)))); 
       uL.setLoginUserInfoId(cursor.getString(cursor.getColumnIndex(KEY_LoginUserInfoId))); 
       uL.setLoginUserFullName(cursor.getString(cursor.getColumnIndex(KEY_LoginUserFullName))); 
       uL.setLoginUserAvatarURL(cursor.getString(cursor.getColumnIndex(KEY_LoginUserAvatarURL))); 
       uL.setLoginStatus(cursor.getString(cursor.getColumnIndex(KEY_LoginStatus))); 

       // Adding contact to list 
       loginUser.add(uL); 
      } while (cursor.moveToNext()); 
     } 
     cursor.close(); 
     db.close(); 
     return loginUser; 
    } 
} 
+1

你为什么评论这个? //db.execSQL(CREATE_TABLE_USER_LOGIN); – Amsheer

+2

在哪里创建'TABLE_USER_LOGIN'表? –

+0

APP1和APP2是两个独立的应用程序吗?也就是说,每个都有自己的软件包名称并单独安装?如果是这样,你不能只从另一个应用程序的数据库访问(想象安全问题!)。您必须通过['ContentProvider'](http://developer.android.com/guide/topics/providers/content-providers.html)向APP1公开APP2中的数据。 –

回答

0

首先sqllite数据库是私人的特定应用程序。 所以你不能共享一个应用程序的sqlitedatabase与另一个。 所以对于那个android提供的ContentProvider。它适用于sqllite数据库。

并且在内容提供者中,每个表都由URI组成,这样URI就可以与另一个应用程序共享。并可以访问数据库。

因此请尝试ContentProvider。

0

只有在自定义内容提供程序中创建运行中的应用程序数据库时,才能使用相同的数据库。

您不能直接从正在运行的应用程序访问数据库。

但是,如果您在自定义内容提供程序中创建正在运行的应用程序数据库,则可以在权限的帮助下直接访问数据库。

在这种情况下,您甚至不需要复制该数据库。

请将此link指定为自定义内容提供者。

相关问题