首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Sqllite的有关问题 那位大侠帮小弟我看看多谢了

2012-08-01 
Sqllite的问题 那位大侠帮我看看谢谢了这是创的历史表我在历史表中加了一个username的字段一运行怎么就报

Sqllite的问题 那位大侠帮我看看谢谢了
这是创的历史表 我在历史表中加了一个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): liping@1227.com
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






[解决办法]
怀疑是 mySQLiteDataBase 是 null导致的
[解决办法]
try {
return true;
} catch () {
return false;
} finally {
}

return让finally怎么执行呢?
[解决办法]
[Quote=引用:]

try {
return true;
} catch () {
return false;
} finally {
}

return让finally怎么执行呢?
[/Quote]
首先进来还没有看楼主的问题,但这位兄弟的错误观点我要指出来。
在try-catch中如果有return的语句,如果还包含finally的话,
在返回前是还会执行这个语句块里的内容的,
所以我们可以把例如关闭数据库连接等的语句放在finally中,
确保方法执行完成后一定关闭数据库连接。
[解决办法]
请问楼主没加username字段时是正确的吗?我见最后一行的错误是:

04-15 07:55:53.784: E/dalvikvm(224): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

难道是你的Activity没有注册?
[解决办法]
有点复杂
[解决办法]
其中2行的代码位置换一下:


/***
 * 创建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;
 }
 }

[解决办法]
另外,没有看到你有定义mySQLiteDataBase的代码?
[解决办法]
Mysqlite.java这个文件的全部代码贴上来

热点排行