Android 从新应用程序访问现有数据库

Android 从新应用程序访问现有数据库,android,android-sqlite,android-contentprovider,Android,Android Sqlite,Android Contentprovider,我已经使用特定的应用程序在外部存储中创建了数据库,并使用相同的应用程序创建了表。现在我想从新的android应用程序访问该数据库中的数据,那么我必须使用内容提供商还是可以直接访问数据库而不使用内容提供商?请帮忙 listView.setOnItemClickListener(new OnItemClickListener() { private static final int DATABASE_VERSION = 5; private static final

我已经使用特定的应用程序在外部存储中创建了数据库,并使用相同的应用程序创建了表。现在我想从新的android应用程序访问该数据库中的数据,那么我必须使用内容提供商还是可以直接访问数据库而不使用内容提供商?请帮忙

listView.setOnItemClickListener(new OnItemClickListener() {

        private static final int DATABASE_VERSION = 5;
        private static final String UID = "_id";
        private static final String STEP = "Steps";
        private static final String ImagePath = "Image_Path";
        private static final String AudioPath = "Audio_Path";


        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
            Message.message(KitchenData.this, "Click List Item Number");
            SQLiteDatabase db = openOrCreateDatabase("/mnt/sdcard/Kitchen_Data.db",
                    MODE_MULTI_PROCESS, null);


            try
            {
String CREATE_TABLE = "CREATE Table " + li.get(position) + "("+ UID + " INTEGER PRIMARY KEY AUTOINCREMENT ," + STEP+ " VARCHAR(255) NOT NULL ,"+ImagePath+" VARCHAR(255) NOT NULL,"+AudioPath+" VARCHAR(255) NOT NULL); ";
            db.execSQL(CREATE_TABLE);
             pos=li.get(position);
            }catch(SQLException e)
            {
                Message.message(KitchenData.this,"Errors in creating table "+e);
            }
listView.setOnItemClickListener(新的OnItemClickListener(){
私有静态最终int数据库_VERSION=5;
私有静态最终字符串UID=“\u id”;
私有静态最终字符串STEP=“Steps”;
私有静态最终字符串ImagePath=“Image\u Path”;
专用静态最终字符串AudioPath=“Audio\u Path”;
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//TODO自动生成的方法存根
Message.Message(KitchenData.this,“单击列表项目编号”);
SQLiteDatabase db=openOrCreateDatabase(“/mnt/sdcard/Kitchen_Data.db”,
模式\多\进程,空);
尝试
{
字符串CREATE_TABLE=“CREATE TABLE”+li.get(position)+”(“+UID+”整型主键自动递增“+STEP+”VARCHAR(255)不为空“+ImagePath+”VARCHAR(255)不为空“;”;
db.execSQL(创建_表);
pos=li.get(位置);
}捕获(SQLE异常)
{
Message.Message(KitchenData.this,“创建表时出错”+e);
}
DB_NAME此处是数据库的名称。假定您在资产文件夹中有数据库的副本,因此,例如,如果您的数据库名称为mbDB,则DB_NAME的值将为mbDB

private static String DB_NAME ="ordersDB";
将数据库复制到程序中的资产文件夹中

将以下代码放入Dbhelper类中,并在CreateDatabase函数中调用它

private void copyDataBase() throws IOException
{
    InputStream mInput = mContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0)
    {
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();
}

希望这是你需要的答案:)

您尝试了什么?首先尝试任何东西。我已经编辑了问题。这是我使用特定应用程序创建数据库和创建表的代码。如果您希望在这些应用程序之间共享数据,建议使用内容提供商。这意味着不需要内容提供商。我是否应该复制在资产中创建的数据库同一应用程序项目或新应用程序项目的文件夹?将已创建的数据数据库复制到“新应用程序项目资产”文件夹中。@PriyankaNadkarni内容提供程序仅在两个应用程序之间共享数据时才是必需的。
private void copyDataBase() throws IOException
{
    InputStream mInput = mContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0)
    {
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();
}