我在列表视图中显示了我的数据库中的所有可用表。 但是如果那里没有任何表,那么它将给出numm指针Exception。 代码如下:
public ArrayList<Object> showAllTable()
{ ArrayList tableList = new ArrayList();
String SQL_GET_ALL_TABLES = "SELECT name FROM sqlite_master WHERE type='table'";
Cursor cursor = db.rawQuery(SQL_GET_ALL_TABLES, null);
//////////////////
if (cursor.moveToLast())
{
do
{
if(cursor.getString(0).equals("android_metadata"))
{
//System.out.println("Get Metadata");
continue;
}
else
{
tableList.add(cursor.getString(0));
}
}
while (cursor.moveToPrevious());
}
///////////////////////
cursor.close();
return tableList;
}
请帮帮我 我得到的例外情况就像:
09-09 09:57:25.873: ERROR/AndroidRuntime(574): FATAL EXCEPTION: main
09-09 09:57:25.873:ERROR / AndroidRuntime(574):android.database.sqlite.SQLiteException:near“null”:语法错误:create table null(_id整数主键,isbn text not null,title text not null,word text not null,sound text not null,publisher text not null); 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.database.sqlite.SQLiteDatabase.native_execSQL(Native方法) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.quiz.spellingquiz.DBAdapter $ DatabaseHelper.onCreate(DBAdapter.java:68) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.quiz.spellingquiz.DBAdapter.open(DBAdapter.java:88) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.quiz.spellingquiz.MenuPage $ 2.onClick(MenuPage.java:51) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.view.View.performClick(View.java:2408) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.view.View $ PerformClick.run(View.java:8816) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.os.Handler.handleCallback(Handler.java:587) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.os.Handler.dispatchMessage(Handler.java:92) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.os.Looper.loop(Looper.java:123) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):在android.app.ActivityThread.main(ActivityThread.java:4627) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at java.lang.reflect.Method.invokeNative(Native Method) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at java.lang.reflect.Method.invoke(Method.java:521) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 09-09 09:57:25.873:ERROR / AndroidRuntime(574):at dalvik.system.NativeStart.main(Native Method)
所以,给我解决方法如何解决它。 。 。感谢。
68号线是:
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);
//线下面是68 db.execSQL(“create table”+ DATABASE_TABLE +“(_id integer primary key,” +“isbn text not null” +“标题文字不为空” +“word text not null” +“声音文字不为空” +“发布者文本不为空”;“); }
@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 "+DATABASE_TABLE);
onCreate(db);
}
}
答案 0 :(得分:1)
我认为您的DATABASE_TABLE变量为null,这可能就是您获得空指针异常的原因。
基于此错误
09-09 09:57:25.873:ERROR / AndroidRuntime(574):android.database.sqlite.SQLiteException:near“null”:语法错误:create table null(_id整数主键,isbn text not null,title text not null,word text not null,sound text not null,publisher text not null);
答案 1 :(得分:1)
参见示例代码。
public class DBAdapter
{
private static final String DATABASE_NAME = "myDatabase.db";
private static final int DATABASE_VERSION = 1;
private static final String USERDETAILS=
"create table userdetails(usersno integer primary key autoincrement,userid text not null ,username text not null,password text not null,photo BLOB,visibility 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);
}
public void onCreate(SQLiteDatabase db)
{
db.execSQL(USERDETAILS);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS users");
onCreate(db);
}
}
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
public void close()
{
DBHelper.close();
}
}