薄樱

导航

SQLiteDatabase 库表操作问题个人小结

复制代码
activity类:

1
protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_main); 4 5 mydata=new mdata(getApplicationContext(),DB_FILE,null,1); 6 7 mydata.sqlt="CREATE TABLE "+DB_TABLE+"(STUDENTSCARD_id TEXT PRIMARY KEY);"; 8 9 sqtt=mydata.getWritableDatabase(); 10 11 }
复制代码

 

复制代码

SQLiteOpenHelper类:
1
public mdata(Context context, String name, CursorFactory factory, 2 int version) { 3 super(context, name, factory, version); 4 // TODO 自动生成的构造函数存根 5 sqlt=""; 6 } 7 @Override 8 public void onCreate(SQLiteDatabase db) { 9 // TODO 自动生成的方法存根l 10 //sqlt=null; 11 if(sqlt.isEmpty()){ 12 13 return; 14 } 15 16 db.execSQL(sqlt); 17 }
复制代码

问题现象:在执行添加数据操作

ContentValues cv=new ContentValues();               
            et.setText(cardID[0]);
            cv.put("STUDENTSCARD_id",“bokeyuan”);            
            sqtt.insert(DB_TABLE, null, cv)

发现程序直接崩溃(------在执行程序之前已经有一次执行操作当时的创表字段STUDENTSCARD_id的类型不为TEXT 而是INTEGER)

问题查找:经过各种排查发现SQLiteOpenHelper中的代码只有在程序第一次创库时才会运行,也就是说当你第一次写好代码运行时才会运行进去 之后不管你怎么更改建表代码(不更改库名) 程序都不会在执行相应的sql语句操作操作

所以才会发生我之前表中字段为integer 在我更改为text后无法插入string类型的值的情况

总结下来就是程序不会因为你每次的程序启动而覆盖你之前创建的库和表

 

解决方法:1.最简单的方法就是更改库名

              2.删除之前创建的库

 

 

posted on 2013-04-24 22:11  保护伞  阅读(237)  评论(0)    收藏  举报

努力加载评论中...
点击右上角即可分享
微信分享提示