Android-Sqlite数据库的操作
Posted 佩喻幻的Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-Sqlite数据库的操作相关的知识,希望对你有一定的参考价值。
设置增删改查的按钮,xml界面布局设置
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_marginTop="10dp" tools:context="com.example.yb.myapplication.DataBaseOperateActivity"> <Button android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bt_add" android:text="增加"/> <Button android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bt_queryAll" android:text="查找"/> <Button android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bt_update" android:text="修改/更新"/> <Button android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/bt_delete" android:text="删除"/> <ListView android:layout_width="fill_parent" android:layout_height="match_parent" android:id="@+id/lv_stuInfo"></ListView> </LinearLayout>
使用数据库存储的步骤:
1新建数据库:
1.1.创建一个数据库帮助类mysqliteOpenHelper继承SqliteOpenHelper,需要添加一个构造方法,实现两个方法oncreate ,onupgrade
构造方法中的参数介绍:
//context :上下文 ,name:数据库文件的名称、 factory:用来创建cursor对象,默认为null 。version:数据库的版本号,从1开始,如果发生改变,onUpgrade方法将会调用,4.0之后只能升不能将 . super(context, "info.db", null,1);
1.2.复写oncreate和onupgrdate方法:
oncreate方法是数据库第一次创建的时候会被调用; 特别适合做表结构的初始化,需要执行sql语句;SQLiteDatabase db可以用来执行sql语句
//onUpgrade数据库版本号发生改变时才会执行; 特别适合做表结构的修改
public class MySqliteOpenHelper extends SQLiteOpenHelper { public MySqliteOpenHelper(Context context) { //factory用来创建cursor对象,默认是null //super(context, name, factory, version); super(context, "info.db", null, 1); } //第一次的创建的 时候被调用, @Override public void onCreate(SQLiteDatabase db) { //通过SQLiteDatabase执行创建一个sql语句 db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(11))"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
2:新建一个Bean包,有一个数据的封装StuInfoBean,新建一个StuInfoBean类
package com.example.yb.Bean; /** * Created by yb on 2016/12/12. */ public class StuInfoBean { public String id; public String name; public String phone; }
3.新建一个包,创建一个数据操作类StuInfoDao,Dao层是对数据进行增删改查操作
public class StuInfoDao { //数据库帮助类对象 private MySqliteOpenHelper mySqliteOpenHelper; //构造函数 public StuInfoDao(Context context) { mySqliteOpenHelper = new MySqliteOpenHelper(context); } public boolean add(StuInfoBean stubean) { //创建数据库 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //方法一:执行sql语句 //db.execSQL("insert into info(name,phone) values(?,?);",new Object[]{stubean.name,stubean.phone}); //方法二 ContentValues values = new ContentValues();//用map封装的对象,存放值 values.put("name", stubean.name); values.put("phone", stubean.phone); long result = db.insert("info", null, values); //返回值是新增的行的id, 失败是-1 //关闭数据库对象 db.close(); if (result != -1) { //添加成功 return true; } else { return false; } } public int del(String name) { //创建数据库 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //执行sql语句 //db.execSQL("delete from info where name=?;",new Object[]{name}); //result,受影响的行数 int result = db.delete("info", "name=?", new String[]{name}); //关闭数据库对象 db.close(); return result; } public int update(StuInfoBean stubean) { //创建数据库 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //执行sql语句 //db.execSQL("update info set phone=? where name=?;", new Object[]{stubean.phone, stubean.name}); ContentValues values = new ContentValues(); values.put("phone", stubean.phone); int result = db.update("info", values, "name=?", new String[]{stubean.name});//name=? where的条件 //关闭数据库对象 db.close(); return result;//返回成功的行数 } public ArrayList<StuInfoBean> query(String name) { ArrayList<StuInfoBean> list = new ArrayList<StuInfoBean>(); //创建数据库 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //执行sql语句,返回一个cursor对象,游标对象 //Cursor cursor = db.rawQuery("select _id,name,phone from info where name=?", new String[]{name}); Cursor cursor = db.query("info", new String[]{"_id", "name", "phone"}, "name=?", new String[]{name}, null, null, "_id desc"); if (cursor != null && cursor.getCount() > 0) { //循环遍历结果,获取每一行的 值 while (cursor.moveToNext()) { StuInfoBean stubean = new StuInfoBean(); stubean.id = cursor.getInt(0) + ""; stubean.name = cursor.getString(1); stubean.phone = cursor.getString(2); list.add(stubean); } cursor.close(); } //关闭数据库对象 db.close(); return list; } }
2.Activity里面创建这个帮助类的一个对象,调用getReadableDatabase()方法,会帮助我们创建打开一个数据库
MySqliteOpenHelper sqlhelper=new MySqliteOpenHelper();
SQLiteDatabase db=sqlhelper.getReadDatabase();
/** * 数据库的操作,增删改查 */ public class DataBaseOperateActivity extends AppCompatActivity implements View.OnClickListener { private Context mcontext; private ListView lv_stuInfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_data_base_operate); mcontext = this; //创建一个数据库帮助类对象 MySqliteOpenHelper mySqliteOpenHelper = new MySqliteOpenHelper(mcontext); //创建数据库 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); findViewById(R.id.bt_add).setOnClickListener(this); findViewById(R.id.bt_delete).setOnClickListener(this); findViewById(R.id.bt_update).setOnClickListener(this); findViewById(R.id.bt_queryAll).setOnClickListener(this); lv_stuInfo = (ListView) findViewById(R.id.lv_stuInfo); } @Override public void onClick(View view) { StuInfoDao studao = new StuInfoDao(mcontext); switch (view.getId()) { case R.id.bt_add: StuInfoBean stubean=new StuInfoBean(); stubean.name="haa"; stubean.phone="111"; boolean result = studao.add(stubean); if(result){ Toast.makeText(mcontext,"添加成功",0).show(); }else { Toast.makeText(mcontext,"添加失败",0).show(); } break; case R.id.bt_delete: int del = studao.del("hyb"); Toast.makeText(mcontext,"成功删除了"+del+"行",0).show(); break; case R.id.bt_update: StuInfoBean bean1=new StuInfoBean(); bean1.name="hyb"; bean1.phone="112"; int update = studao.update(bean1); Toast.makeText(mcontext,"成功修改了"+update+"行",0).show(); break; case R.id.bt_queryAll: //获取数据 ArrayList<StuInfoBean> arraylist = studao.query("hyb"); //封装QueryAdapter, QueryAdapter queryAdapter = new QueryAdapter(mcontext,arraylist); //将adapter设置给listview(lv_stuInfo); lv_stuInfo.setAdapter(queryAdapter); break; } } }
帮助类对象中的getWritableDatabase 和 getReadableDatabase都可以帮助我们获取一个数据库操作对象SqliteDatabase.
注意:这里面设计到查询数据时要展示数据在Listview上,新建一个Adapter包,专门写adapter的,新建一个QueryAdapter类继承BaseAdapter,
adapter的基本操作是:
public class QueryAdapter extends BaseAdapter{ private Context mcontext; private ArrayList<StuInfoBean> arraylist; public QueryAdapter(Context mcontext, ArrayList<StuInfoBean> arraylist) { this.mcontext=mcontext; this.arraylist=arraylist; } @Override public int getCount() { return arraylist.size(); } @Override public Object getItem(int i) { return arraylist.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view1, ViewGroup viewGroup) { //1复用Convertview View view=null; if(view1!=null){ view=view1; }else{ view = View.inflate(mcontext, R.layout.item_database_layout, null); } //2找到控件,view用inflate转为View对象 TextView item_tv_id = (TextView) view.findViewById(R.id.item_tv_id); TextView item_tv_name = (TextView) view.findViewById(R.id.item_tv_name); TextView item_tv_phone = (TextView) view.findViewById(R.id.item_tv_phone); //3找到内容,list.get(position); StuInfoBean stuInfoBean = arraylist.get(i); //4控件设置内容setText item_tv_id.setText(stuInfoBean.id); item_tv_name.setText(stuInfoBean.name); item_tv_phone.setText(stuInfoBean.phone); return view; } }
1.布局写listview
2.找到listview
3.封装新闻数据到list集合中 ,目的是为adapter提供数据展示。
4.封装一个Adapter类继承BaseAdatper,写一个构造方法接受list集合数据,复写四个方法
a.创建一个构造方法
b.封装getCount方法
c.getView方法:
1.复用convertview,模板代码,如果不都能空,需要将一个布局文件转换为view对象作为getview的返回对象。
view = View.inflater(Context context, int resuorceId,ViewGroup root)
2.找到view上的这些子控件,目的是将list集合中的bean数据一一对应设置给这些子控件
3.从list集合中获取postion条目上要显示的数据Bean
4.将获取的bean中的数据设置给这些子控件
d.getItem方法:将list集合中指定postion上的bean对象返回
e.getItemId,直接返回postion
5.创建一个封装的Adapter对象,设置给listview
上面的代码是第4步,
以上是关于Android-Sqlite数据库的操作的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种方法可以使用 android-sqlite 游标从列数未知的表中选择 *