Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取SQLiteException:未找到表_Android_Sqlite - Fatal编程技术网

Android 获取SQLiteException:未找到表

Android 获取SQLiteException:未找到表,android,sqlite,Android,Sqlite,我的应用程序由于找不到表错误而崩溃,原因是什么 主要活动 数据库助手 我还尝试了更改数据库版本以及卸载和重新安装应用程序。创建表查询的格式不正确。而且,在创建表时也没有使用try-catch,因为必须这样做。下面是解释 public static final String COL_NAME="_name"; public static final String COL_PUBLISHER="_publisher"; @Override public void onCreate(SQLiteDa

我的应用程序由于找不到表错误而崩溃,原因是什么

主要活动

数据库助手


我还尝试了更改数据库版本以及卸载和重新安装应用程序。

创建表查询的格式不正确。而且,在创建表时也没有使用try-catch,因为必须这样做。下面是解释

 public static final String COL_NAME="_name";
public static final String COL_PUBLISHER="_publisher";
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String create= "CREATE TABLE first ("+ BaseColumns._ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ COL_NAME+" TEXT, "+ COL_PUBLISHER +" TEXT)";
        sqLiteDatabase.execSQL(create);
}

这个问题与分号无关

无论异常情况如何,都会发布未找到的

实际的异常似乎是
CursorIndexOutOfBoundsException
,这是因为在尝试检索基础数据之前,没有通过cursor
move???
方法将光标移动到行中

  • 创建光标时,光标位于第一行之前的(-1)
  • 有关光标移动方法,请参阅(
    moveToFirst
    已在下面使用。)
使用的代码:-

g_dbHelper.java(添加了onUpgrade):-
  • 是的,结尾有分号
MainActivty.java:-
  • 注意使用
    if(cursor.moveToFirst){….}
    ,如果不这样做,您将得到:-
    android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为1
    • -1表示该位置在一行之前
结果:-

我认为create string中的“分号”是一个错误。谢谢你………你能详细说明一下你的意思吗change@HARDIKGARG编辑答案re
if(cursor.moveToFirst){..}
。但这不会导致找不到表。如果您仍然有问题,那么编辑您的问题,以包括日志中的堆栈跟踪。哦,我明白为什么找不到该表了。您可以在catch中发布此消息,而不考虑异常。您应该在catch内执行
e.printStackTrace()
,然后它将打印堆栈跟踪。如你所见,我又一次摆脱了“尝试/抓住”的习惯。因此,猜测这是指数超出范围的问题。
public class g_dbHelper extends SQLiteOpenHelper implements  BaseColumns {
    final static String DB_NAME="books.db";
    public g_dbHelper(Context context) {
        super(context,DB_NAME, null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        String create= "CREATE TABLE first ("+ BaseColumns._ID+" INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, PUBLISHER TEXT);";
         try {
             sqLiteDatabase.execSQL(create);
         } catch (SQLiteException e) {
             Log.e("TAG","Table not created");
         }
    }
}
 public static final String COL_NAME="_name";
public static final String COL_PUBLISHER="_publisher";
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String create= "CREATE TABLE first ("+ BaseColumns._ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ COL_NAME+" TEXT, "+ COL_PUBLISHER +" TEXT)";
        sqLiteDatabase.execSQL(create);
}
public class g_dbHelper extends SQLiteOpenHelper implements BaseColumns {
    final static String DB_NAME="books.db";
    public g_dbHelper(Context context) {
        super(context,DB_NAME, null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        String create= "CREATE TABLE first ("+ BaseColumns._ID+" INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, PUBLISHER TEXT);";
        sqLiteDatabase.execSQL(create);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {

    }
}
public class MainActivity extends AppCompatActivity {

    g_dbHelper helper;
    TextView txt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txt = (TextView) this.findViewById(R.id.textviewa);
        SO48472717();
    }

    private void SO48472717() {
        helper = new g_dbHelper((this));
        SQLiteDatabase sql = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("NAME", "Harry Potter");
        values.put("PUBLISHER", "Bloomberg Publications");
        long newRowId = sql.insert("first", null, values);
        String[] name = {"NAME"};
        SQLiteDatabase sql1 = helper.getReadableDatabase();
        Cursor cursor = sql1.query("first", name, null, null, null, null, null);
        //########################### Fix Here.
        if (cursor.moveToFirst()) {
            int id = cursor.getColumnIndex("NAME");
            txt.setText(cursor.getString(id));
        }
        //########################### End of Fix
        cursor.close();
    }
}