2017-4-28数据存储--数据库的操作
作业要求:
a) 将学生信息存入数据库
b) 显示所有学生信息列表
c) 删除数据库表中第一条信息。
关于数据库操作,因为是刚刚接触,对于整个操作流程其实并不是特别清晰,所以写代码的时候只能是写一步看一步,用到什么就写什么,所以对于数据库的操作流程这里就不进行分析了。 直接看代码吧,先是布局文件,很简单,就不进行解释了。先是MainActivity的布局文件,只有一个EditorView,两个Button,和一个ListView:然后对ListView写了一个简单的用来显示的布局文件:
然后肯定要有一个主类,按照业务逻辑分析,需要有专门用来操作数据库的类,android里的数据库有时候需要程序来创建,所以还有有一个类来创建库以及打开数据库,所以就这样产生了三个类:MainActivity(主类)、MyDBHelperl类(创建、打开数据库)、PersonerDAO类(操作数据库),还有一个自定义的Adapter用来解析cursor类型的数据MyCursorAdapter继承自CursonAdapter类。下面看代码:
MainActivity(主类):package com.example.a15083.sqliteoperate;import android.database.Cursor;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.ListView;public class MainActivity extends AppCompatActivity { private EditText et_input; private ListView lv_data; private MyCursorAdapter myCursorAdapter; private PersonDAO personDAO; private Cursor cursor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_input = (EditText)findViewById(R.id.et_input); lv_data = (ListView)findViewById(R.id.lv_data); //在程序刚运行时就去数据库中查询数据,并进行显示,如果数据库不存在则创建数据库 personDAO = new PersonDAO(this); cursor = personDAO.selectAll(); if(cursor!=null){ myCursorAdapter = new MyCursorAdapter(MainActivity.this,cursor); lv_data.setAdapter(myCursorAdapter); } } public void onClick(View view) { switch(view.getId()){ case R.id.bt_add: //获取编辑框中的内容插入数据库 String name = et_input.getText().toString(); personDAO.insert(name); cursor = personDAO.selectAll(); if(cursor!=null){ myCursorAdapter = new MyCursorAdapter(this,cursor); lv_data.setAdapter(myCursorAdapter); } break; case R.id.bt_delete: //删除数据库中的第一条数据 if(cursor!=null){ if(cursor.moveToFirst()){ personDAO.delete(cursor.getString(cursor.getColumnIndex("_id"))); cursor = personDAO.selectAll(); } } myCursorAdapter = new MyCursorAdapter(this,cursor); lv_data.setAdapter(myCursorAdapter); break; } }}
MyDBHelperl类(创建、打开数据库):
package com.example.a15083.sqliteoperate;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by 15083 on 2017/5/15 0015. */public class MyDBHelper extends SQLiteOpenHelper { private String sql = "create table person(id integer primary key autoincrement,name txt)"; //这个是用来在数据库中创建表和库用的 public MyDBHelper(Context context) { //使用父类方法创建数据库,库名为:personInfo super(context,"personInfo",null,1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { sqLiteDatabase.execSQL("drop table if exists person"); onCreate(sqLiteDatabase); }}
PersonerDAO类(操作数据库):
package com.example.a15083.sqliteoperate;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;/** * Created by 15083 on 2017/5/15 0015. */public class PersonDAO {//这里的定义的的这个类用来管理对数据库的各种操作 private MyDBHelper dbHelper; private SQLiteDatabase sqLiteDatabase; public PersonDAO(Context context){ dbHelper = new MyDBHelper(context); }//向数据库中插入数据 public void insert(String name){ sqLiteDatabase = dbHelper.getWritableDatabase(); String sql = "insert into person(name) values('"+name+"')"; sqLiteDatabase.execSQL(sql); }//查询数据库中的所有数据,并返回一个 Cursor类型的数据 public Cursor selectAll() { sqLiteDatabase = dbHelper.getReadableDatabase(); Cursor cursor = sqLiteDatabase.query("person", null, null, null, null, null, null); return cursor; }//删除数据库中的某一条数据 public void delete(String id){ sqLiteDatabase = dbHelper.getWritableDatabase(); String sql = "delete from person where _id="+String.valueOf(id);//"delete from student where _id="+id sqLiteDatabase.execSQL(sql); }}
MyCursorAdapter:
package com.example.a15083.sqliteoperate;import android.content.Context;import android.database.Cursor;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CursorAdapter;import android.widget.TextView;/** * Created by 15083 on 2017/5/15 0015. */public class MyCursorAdapter extends CursorAdapter {//自定义Adapter,并且继承自CursorAdapter,用来用自定义的方式处理这个程序中类型为cursor的值 public MyCursorAdapter(Context context, Cursor cursor) { super(context, cursor, 0); } @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { return LayoutInflater.from(context).inflate(R.layout.item,viewGroup,false); } @Override public void bindView(View view, Context context, Cursor cursor) { TextView name = (TextView) view.findViewById(R.id.tv_name); name.setText(cursor.getString(cursor.getColumnIndex("name"))); }}
所有的代码就是这样,我对整个业务逻辑的理解有点混乱,以后会理解的越来越好的!
附上程序运行图: