2017.5.12
SQL数据库存储
题目背景
1. 结合本任务所学内容,完成以下任务,界面如图所示。 a) 将学生信息存入数据库 b) 显示所有学生信息列表 c) 删除数据库表中第一条信息。
思路解析
思路
在EditText中输入姓名并获取,存储入数据库,然后通过cursoradapter将数据传递到listview中显示,然后点击删除第一条记录将第一条记录从数据库中删除 ####做法 1.先布局xml文件 2.创建数据库表 3.获取数据 4.创建一个对表增加和删除的类 5.利用cursoradapter来将数据传递到listview中 6.在main方法中实现增加数据和删除记录的代码 ###1.创建数据表public class MyDBHelper extends SQLiteOpenHelper {
private String sql = "create table student(_id integer primary key autoincrement," + "name text not null)";//创建表的sql语句,注意不要写错
public MyDBHelper(Context context) {
super(context, "studentInfo", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql);
}
//newVersion>oldVersion(旧版本)调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists student");
onCreate(db);
}
}
2.获取数据
public class Name implements Serializable {
private int _id;
private String name;
public Name(){
}
public Name(String name){
this.name=name;
}
public int get_id() {
return _id;
}
public void set_id(int _id) {
this._id = _id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
3.增加和删除数据的方法
public class NameDAO {
private Context context;//上下文
private MyDBHelper helper;//创建,升级,打开数据库
private SQLiteDatabase db;//对表增删改查
public NameDAO(Context context){
helper=new MyDBHelper(context);
}
public void insert(Name name){
//打开数据库
db=helper.getWritableDatabase();
//生成数据集合
ContentValues values=new ContentValues();
values.put("name",name.getName());
//执行语句
db.insert("student",null,values);
}
public Cursor selectAll() {
db =helper.getReadableDatabase();
Cursor cursor= db.query("student",null,null,null,null,null,null);
return cursor;
}
public void delete(int id){
db = helper.getWritableDatabase();
db.delete("student","_id=?",new String[]{String.valueOf(id)});//根据数据的id号来删除数据
}
}
4.cursoradapter
public MyCursorAdapter(Context context, Cursor c) {
super(context, c, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
return LayoutInflater.from(context).inflate(R.layout.item,viewGroup,false);//与之相对应的xml
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView name= (TextView) view.findViewById(R.id.tvname);
name.setText(cursor.getString(cursor.getColumnIndex("name")));//适配name
}
5.MainActivity中的按钮事件
onCreate方法
btnadd= (Button) findViewById(R.id.add);
btndelete= (Button) findViewById(R.id.delete);
btnadd.setOnClickListener(this);
btndelete.setOnClickListener(this);
lvshow= (ListView) findViewById(R.id.list_show);
nameDAO=new NameDAO(this);
cursor=nameDAO.selectAll(); //调用NameDAO中的selectALl()方法,即查询数据
if(cursor!=null){
adapter=new MyCursorAdapter(this,cursor);
lvshow.setAdapter(adapter);//根据游标将数据传递到listview中显示
}
按钮事件
增加记录
case R.id.add:
String name2=etshuru.getText().toString();
if(TextUtils.isEmpty(name2)){
Toast.makeText(this,"姓名不能为空",Toast.LENGTH_LONG).show();//判断EditText是否为空,空的话提示姓名不能为空
return;
}
name=new Name(name2);
nameDAO=new NameDAO(this);
nameDAO.insert(name); //将数据添加到数据库
cursor=nameDAO.selectAll();
adapter.changeCursor(cursor);//更新数据库至listview
Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();
break;
删除第一条记录
case R.id.delete:
if(name!=null){ //判断记录是否为空,如果是空的话会提示记录为空
cursor.moveToFirst();//数据的第一行
name=new Name();
name.set_id(cursor.getInt(cursor.getColumnIndex("_id")));获取数据第一行的id
nameDAO.delete(name.get_id());//调用delete方法删除第一条记录
nameDAO = new NameDAO(this);
cursor = nameDAO.selectAll();
adapter = new MyCursorAdapter(this, cursor);
lvshow.setAdapter(adapter);
Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
}
Toast.makeText(this,"记录为空",Toast.LENGTH_SHORT).show();
break;
ps:改写法只能判断第一次记录是否为空,删光后记录为空不能判断然后会闪退。
成果展示



浙公网安备 33010602011771号