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:改写法只能判断第一次记录是否为空,删光后记录为空不能判断然后会闪退。

成果展示

posted on 2017-05-12 20:42  丁金涛  阅读(184)  评论(0)    收藏  举报

导航