Android Sqlite没有这样的表错误

Android Sqlite没有这样的表错误,android,sqlite,Android,Sqlite,我在市场上有申请。有些人给了我这个错误 没有这样的表:UserInfo:,编译时:从UserInfo中选择值,其中key='guid' 但我甚至有这个密码 if(!this.dhn.isTableExists("UserInfo")) { updateDB(); } 更新数据库 public void updateDB() { try { InputStream myInput; myInput = ge

我在市场上有申请。有些人给了我这个错误

没有这样的表:UserInfo:,编译时:从UserInfo中选择值,其中key='guid'

但我甚至有这个密码

    if(!this.dhn.isTableExists("UserInfo"))
    {
        updateDB();
    }
更新数据库

public void updateDB()
{
    try {
        InputStream myInput;

            myInput = getAssets().open("example.db");

        // Path to the just created empty db
        String outFileName = "/data/data/ko.tb/databases/"
                + "example.db";

        // Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        // transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }

        // Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
        buffer = null;
        outFileName = null;
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}
表存在

public boolean isTableExists(String tableName) {

    Cursor cursor = db.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
    if(cursor!=null) {
        if(cursor.getCount()>0) {
            return true;
        }
    }
    return false;
}
所有错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{ko.tb/ko.tb.KOActivity}: android.database.sqlite.SQLiteException: no such table: UserInfo: , while compiling: SELECT Value FROM UserInfo WHERE key = 'guid'
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1872)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4385)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: no such table: UserInfo: , while compiling: SELECT Value FROM UserInfo WHERE key = 'guid'
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1442)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1410)
at ko.tb.DataHelper.Guid(DataHelper.java:126)
at ko.tb.KOActivity.onCreate(KOActivity.java:202)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)
... 11 more
java.lang.RuntimeException:无法启动活动组件信息{ko.tb/ko.tb.KOActivity}:android.database.sqlite.SQLiteException:没有这样的表:UserInfo:,编译时:从UserInfo中选择值,其中键='guid'
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1872)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
在android.app.ActivityThread.access,售价1500美元(ActivityThread.java:135)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:150)
位于android.app.ActivityThread.main(ActivityThread.java:4385)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
在dalvik.system.NativeStart.main(本机方法)
原因:android.database.sqlite.SQLiteException:没有这样的表:UserInfo:,编译时:从UserInfo中选择值,其中key='guid'
在android.database.sqlite.SQLiteCompiledSql.native\u compile(本机方法)中
位于android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
位于android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:65)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:83)
位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:49)
位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1442)
位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1410)
位于ko.tb.DataHelper.Guid(DataHelper.java:126)
位于ko.tb.KOActivity.onCreate(KOActivity.java:202)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)上
... 还有11个

如果您使用多个提供程序。如说明书所述:

您可能会遇到的问题之一,当有多重 Android应用程序中的ContentProviders是指您会注意到 不会为每个用户调用SQLiteOpenHelper.onCreate(db) 提供者。因此,最终将导致一个数据库缺少几个 桌子


我曾经遇到过类似的问题,据我记忆所及,我在database helper类中更改了数据库版本以解决该问题(请参见下面的示例,您可以将版本从1更改为2等)


您能否复制粘贴错误?您是否通过adb确认数据库已通过
updateDB()
正确复制到应用程序的数据库区域?应用程序包是否列在清单中?您是否尝试过使用
getDatabasePath(“example.db”)
而不是手工构建路径?@Ted Hopp我刚才为您做了明确的尝试。所有步骤都可以正常工作我测试的是>创建一个没有UserInfo的复制db,推送到adb,然后istableexist给我false,然后创建复制,并尝试获取guid正常工作。但有些人有困难,我不知道如何解决:(我想其中一个家伙有Htc的感觉。我在几个小时内收到了3份报告。我所知道的就是这些错误消息的语法非常可疑。似乎有额外的字符(
:,
)在表名中。是否存在通过代码的路径,表名可能会被损坏?@Ted Hopp刚刚检查了google是否存在错误措辞差异,但外观相同。例如;sqlite.SQLiteException:没有这样的表:CityType:,编译时:从CityType中选择cityName
 private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE =
        "create table titles (_id integer primary key autoincrement, "
        + "isbn text not null, title text not null, " 
        + "publisher text not null);";

    private final Context context; 

    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx) 
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

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

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, 
        int newVersion) 
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion 
                    + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS titles");
            onCreate(db);
        }
    }