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
,这是因为在尝试检索基础数据之前,没有通过cursormove???
方法将光标移动到行中
- 创建光标时,光标位于第一行之前的(-1)
- 有关光标移动方法,请参阅(
已在下面使用。)moveToFirst
- 是的,结尾有分号
- 注意使用
,如果不这样做,您将得到:-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();
}
}