您的位置:首页 > 数据库

学生管理系统总结和SQLiteDatabase注意事项

2013-07-02 09:48 225 查看
学生管理系统

根据数据库操作,实现增加学生、删除学生、修改学生信息和查询学生信息的简单功能。

listView列表视图布局组件有文本和两个按钮,按钮和列表每行均有事件监听。

遇到问题的总结:

首先,每一行的焦点在按钮上面,要为listview区域加上监听,那么焦点要放在listView空白区域

处理方法:为两个按钮设置focusable=false属性,这样焦点就在列表上面了。

其次,修改、删除和查询学生信息;单击列表视图上的修改、删除按钮;一定会根据id到数据库查找。那么,如何得到id呢?由于每一行都有按钮;作修改操作时,如何判断用户点击的按钮在哪一行,和哪一个id对应呢?

处理方法:

1、得到游标cursor;利用getColumnIndex("id")方法,得到id所在的列号;该方法返回int型。

2、再根据getInt("id列号")得到cursor所指向该行对应列的值,这样就得到了id。

3、有了id;可以为两个按钮设置标示btn.setTag(id);把id和按钮绑定在一起;可以通过int id = Integer.parseInt(v.getTag().toString());得到id;这样就可以通过点击按钮得到该行数据的id

4、程序员自定义适配器,listView中按钮的事件和按钮是一个整体;调用getView()方法是,就会绘制出一行带事件的组件。所以,在注册监听的事后,要找准地方,把事件监听放在getView()方法内部才行。

5、关于修改、添加、删除操作后,listView界面更新的问题。

方法有二。其一,利用notifyDataSetChanged()方法可以解决删除后的界面更新(即,删除操作后不需要跳转activity的界面刷新)。但是这个方法只有在数据发生改变时才会调用该方法;那么如何才能让他知道我们的数据发生了变化呢?很简单,我们查询数据库到得cursor,再把结果赋值给原来的cursor。这样cursor发生了改变,notifyDataSetChanged()才会触发。

其二、这种方法适合于activity跳转返回时的界面数据更新。首先要知道activity的生命周期。oncreate()---->instart()---->onResume()---->运行期------>onstop()---->onpuse()----->onReStarrt().从activity生命周期可以看出,在程序进入运行期之前会经历三个阶段;我们可以把listView的监听事件放在onResume()方法中实现,这样在activity第一次加载时会调用onResume()方法;在activity返回时,仍然是调用该方法。

SQLiteDatabase注意事项:

打开数据的2种方式

1、(1)SQLiteDataBase db = SQLiteDataBase.OpenOrCreateDataBase("db绝对路径",null);

null 表示默认的工厂模式

(2)File dataFile = getFileDir();

dataFile.getAbsolutePath();得到文件绝对路径

SQLiteDataBase db = SQLiteDataBase.OpenOrCreateDataBase(dataFile.getAbsolutePath()+"lovo.db",null);

2、利用辅助类SQLiteOpenHelper来获取SQLiteDataBase对象

首先要继承SQLiteOpenHelper类,必须重写两个方法,onCreate(SQLiteDataBase db)和onUpgrade(SQLiteDataBase db)方法。

前者是创建数据库,建表;后者是有版本更新时,需要数据库的更新操作。

getReadableDataBase()和getWriteableDataBase()方法都是返回SQLiteDataBase对象;但是二者的区别在于,前者在磁盘满时,只能读取数据,不能写入数据;后者在磁盘满时,会继续向磁盘追加数据,覆盖以前的数据.

第二种方法建立的文件在项目中,android系统平台分配。

3、第一种方法会频繁的打开数据库,手机内存有限,不利于手机效率。因此,要在程序打开时就打开数据库,在退出程序时再关闭数据库。

一般利用单列模式来解决此类问题。在类加载时,静态的db为null;当程序调用db方法时,再创建db;若db已存在,则返回已存在的db。所以,不管你new多少个db,都始终是第一次产生的db。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: