zoukankan      html  css  js  c++  java
  • Android-Sqlite数据库的操作

    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);
    
        //table: 表名 , nullColumnHack:可以为空,标示添加一个空行, values:数据一行的值 , 返回值:代表添加这个新行的Id ,-1代表添加失败
    long result = db.insert("info", null, values); //返回值是新增的行的id, 失败是-1 //关闭数据库对象 db.close(); if (result != -1) { //添加成功 return true; } else { return false; } } public int del(String name) { //创建数据库,调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //执行sql语句 //db.execSQL("delete from info where name=?;",new Object[]{name}); //table :表名, whereClause: 删除条件, whereArgs:条件的占位符的参数 ; 返回值:成功删除多少行 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();//是用map封装的对象,用来存放值 values.put("phone", stubean.phone);

        //table:表名, values:更新的值, whereClause:更新的条件, whereArgs:更新条件的占位符的值,返回值:成功修改多少行

    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});

          //table:表名, columns:查询的列名,如果null代表查询所有列; selection:查询条件, selectionArgs:条件占位符的参数值,
          //groupBy:按什么字段分组, having:分组的条件, orderBy:按什么字段排序

            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="aaa";
                    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("aaa");
                    Toast.makeText(mcontext,"成功删除了"+del+"",0).show();
                    break;
                case R.id.bt_update:
                    StuInfoBean bean1=new StuInfoBean();
                    bean1.name="aaa";
                    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("aaa");
                   //封装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步

    最后界面展示

  • 相关阅读:
    Nginx缓存[proxy cache、memcache]
    Nginx重写规则
    同步异步,阻塞非阻塞 和nginx的IO模型
    cookie & session
    HTTP状态码
    web简单的整体测试
    关于 如何用电脑的adb连接Mumu模拟器
    关于社保断交一个月的影响
    关于androidStudio的下载
    可以直接拿来用的android开源项目研究
  • 原文地址:https://www.cnblogs.com/DonAndy/p/6172167.html
Copyright © 2011-2022 走看看