数据库的创建:
alter 就是改变,意思就是添加一个字段。
getWritableDatabase取得的实例不是仅仅具有写的功能,而是同时具有读和写的功能
同样的,getReadableDatabase取得的实例也是具对数据库进行读和写的功能
两者的区别在于
getWritableDatabase取得的实例是以读写的方式打开数据库,如果打开的数据库磁盘满了,此时只能读不能写,此时调用了getWritableDatabase的实例,那么将会发生错误(异常)
getReadableDatabase取得的实例是先调用getWritableDatabase以读写的方式打开数据库,如果数据库的磁盘满了,此时返回打开失败,继而用getReadableDatabase的实例以只读的方式去打开数据库
————
增删改查1:
我们一般把增删改查的方法写在dao类里面。
注意一点就是我们要实现增删改查的方法我们必须要使用,SQLiteDatabase 的对象。
所以我们一般会传递这个对象进去。
但是在公司,我们为了节省内存,一般直接在方法中创建对象,而不传递对象。这样我们在调用方法完,就会销毁。
我们用db.execSQL来实现增删改;
//sql:sql语句, bindArgs:sql语句中占位符的值
db.execSQL(sql,object[]bindArags)
占位符就是用? 代替你要找的参数的值.
但是当我们字段多余1 的时候 我们需要创建一个bean类 来传递参数。
如果只有一个 就可以直接传递 ,如 add(String name);
但是由于execSQL没有 返回值,所以不能用来查询,我们就使用一个
//sql:sql语句, selectionArgs:查询条件占位符的值,返回一个cursor对象
db.rewQuery(sql,String [] selectionArgs );
可以获得一个cursor对象,这个对象就是一个结果集对象。
记住:每一次在方法中创建了 SQLiteDatebase对象 要close 掉;
cursor.getcount();返回数据库的行数;
注意一个问题就是 当我们在方法中使用close时,你必须每次进来都要创建一个db对象,不然第二次 的时候我们会报错。
——————
使用cmd 去访问 数据库的内容:
第一步 adb shell
第二步去 cd /data/data/包名
第三步 cd databases
第四步 sqlite3 表名.db
第五步 执行Sql语句,记得语句后加分号;
____
————
ListView 怪异现象:
如果ListView 控件使用的是包裹内容,且内容少。那么他会出现 一直创建对象去尝试,手机的高度和宽度,会浪费内存.
所以我们一般使用充满父窗体,这样他一开始就知道了宽和高,不需要去尝试.
___