这是创的历史表 我在历史表中加了一个username的字段
一运行 怎么就报错 报的是空指针错 /***
* 创建History表
* @param context
*/
public static boolean createBoQuHistory(Context context){
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("create table if not exists history( ")
.append(" _id integer primary KEY AUTOINCREMENT,")
.append(" Articler_id INTEGER NOT NULL,")
.append(" Articler_title NVARCHAR(250),")
.append(" Articler_info text,")
.append(" Articler_author NVARCHAR(250),")
.append(" Articler_lei NVARCHAR(250),")
.append(" Articler_img NVARCHAR(250),")
.append(" Articler_time TIMESTAMP,")
.append(" username text)");//这里是 增加字段的地方
try {
mySQLiteDataBase=context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
mySQLiteDataBase.beginTransaction();
mySQLiteDataBase.execSQL(stringBuffer.toString());
mySQLiteDataBase.setTransactionSuccessful();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}finally{
mySQLiteDataBase.endTransaction();//这里是报错的地方
mySQLiteDataBase.close();
}
}
这是报错信息
04-15 07:55:38.954: I/global(224): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
04-15 07:55:42.056: D/dalvikvm(224): GC freed 7082 objects / 639360 bytes in 155ms
04-15 07:55:42.695: I/com.reader.view.InforLayout(224): kind:1<FENLEIID:368>title:分类
04-15 07:55:42.905: I/System.out(224): FENLEIID368
04-15 07:55:53.674: I/history.username(224): [email protected]
04-15 07:55:53.695: D/AndroidRuntime(224): Shutting down VM
04-15 07:55:53.695: W/dalvikvm(224): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-15 07:55:53.714: E/AndroidRuntime(224): Uncaught handler: thread main exiting due to uncaught exception
04-15 07:55:53.746: E/AndroidRuntime(224): java.lang.NullPointerException
04-15 07:55:53.746: E/AndroidRuntime(224): at com.reader.tool.Mysqlite.createBoQuHistory(Mysqlite.java:58)
04-15 07:55:53.746: E/AndroidRuntime(224): at com.reader.view.page.Infor$1.onItemClick(Infor.java:139)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.widget.ListView.performItemClick(ListView.java:3285)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.os.Handler.handleCallback(Handler.java:587)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.os.Handler.dispatchMessage(Handler.java:92)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.os.Looper.loop(Looper.java:123)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-15 07:55:53.746: E/AndroidRuntime(224): at java.lang.reflect.Method.invokeNative(Native Method)
04-15 07:55:53.746: E/AndroidRuntime(224): at java.lang.reflect.Method.invoke(Method.java:521)
04-15 07:55:53.746: E/AndroidRuntime(224): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-15 07:55:53.746: E/AndroidRuntime(224): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-15 07:55:53.746: E/AndroidRuntime(224): at dalvik.system.NativeStart.main(Native Method)
04-15 07:55:53.784: I/dalvikvm(224): threadid=7: reacting to signal 3
04-15 07:55:53.784: E/dalvikvm(224): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
一运行 怎么就报错 报的是空指针错 /***
* 创建History表
* @param context
*/
public static boolean createBoQuHistory(Context context){
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("create table if not exists history( ")
.append(" _id integer primary KEY AUTOINCREMENT,")
.append(" Articler_id INTEGER NOT NULL,")
.append(" Articler_title NVARCHAR(250),")
.append(" Articler_info text,")
.append(" Articler_author NVARCHAR(250),")
.append(" Articler_lei NVARCHAR(250),")
.append(" Articler_img NVARCHAR(250),")
.append(" Articler_time TIMESTAMP,")
.append(" username text)");//这里是 增加字段的地方
try {
mySQLiteDataBase=context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
mySQLiteDataBase.beginTransaction();
mySQLiteDataBase.execSQL(stringBuffer.toString());
mySQLiteDataBase.setTransactionSuccessful();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}finally{
mySQLiteDataBase.endTransaction();//这里是报错的地方
mySQLiteDataBase.close();
}
}
这是报错信息
04-15 07:55:38.954: I/global(224): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
04-15 07:55:42.056: D/dalvikvm(224): GC freed 7082 objects / 639360 bytes in 155ms
04-15 07:55:42.695: I/com.reader.view.InforLayout(224): kind:1<FENLEIID:368>title:分类
04-15 07:55:42.905: I/System.out(224): FENLEIID368
04-15 07:55:53.674: I/history.username(224): [email protected]
04-15 07:55:53.695: D/AndroidRuntime(224): Shutting down VM
04-15 07:55:53.695: W/dalvikvm(224): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-15 07:55:53.714: E/AndroidRuntime(224): Uncaught handler: thread main exiting due to uncaught exception
04-15 07:55:53.746: E/AndroidRuntime(224): java.lang.NullPointerException
04-15 07:55:53.746: E/AndroidRuntime(224): at com.reader.tool.Mysqlite.createBoQuHistory(Mysqlite.java:58)
04-15 07:55:53.746: E/AndroidRuntime(224): at com.reader.view.page.Infor$1.onItemClick(Infor.java:139)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.widget.ListView.performItemClick(ListView.java:3285)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.os.Handler.handleCallback(Handler.java:587)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.os.Handler.dispatchMessage(Handler.java:92)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.os.Looper.loop(Looper.java:123)
04-15 07:55:53.746: E/AndroidRuntime(224): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-15 07:55:53.746: E/AndroidRuntime(224): at java.lang.reflect.Method.invokeNative(Native Method)
04-15 07:55:53.746: E/AndroidRuntime(224): at java.lang.reflect.Method.invoke(Method.java:521)
04-15 07:55:53.746: E/AndroidRuntime(224): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-15 07:55:53.746: E/AndroidRuntime(224): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-15 07:55:53.746: E/AndroidRuntime(224): at dalvik.system.NativeStart.main(Native Method)
04-15 07:55:53.784: I/dalvikvm(224): threadid=7: reacting to signal 3
04-15 07:55:53.784: E/dalvikvm(224): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
return true;
} catch () {
return false;
} finally {
}return让finally怎么执行呢?
在try-catch中如果有return的语句,如果还包含finally的话,
在返回前是还会执行这个语句块里的内容的,
所以我们可以把例如关闭数据库连接等的语句放在finally中,
确保方法执行完成后一定关闭数据库连接。
将StringBuffer stringBuffer=new StringBuffer();
改成StringBuffer stringBuffer=new StringBuffer(8000);
试一下,看是否可以。
/***
* 创建History表
* @param context
*/
public static boolean createBoQuHistory(Context context){ StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("create table if not exists history( ")
.append(" _id integer primary KEY AUTOINCREMENT,")
.append(" Articler_id INTEGER NOT NULL,")
.append(" Articler_title NVARCHAR(250),")
.append(" Articler_info text,")
.append(" Articler_author NVARCHAR(250),")
.append(" Articler_lei NVARCHAR(250),")
.append(" Articler_img NVARCHAR(250),")
.append(" Articler_time TIMESTAMP,")
.append(" username text)");//这里是 增加字段的地方
try {
mySQLiteDataBase=context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
mySQLiteDataBase.beginTransaction();
mySQLiteDataBase.execSQL(stringBuffer.toString());
mySQLiteDataBase.setTransactionSuccessful();
mySQLiteDataBase.endTransaction();//这里是报错的地方
mySQLiteDataBase.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}