• android 44 SQLiteOpenHelper


     java

    package com.sxt.day06_10;
    
    import java.util.ArrayList;
    
    import com.sxt.day06_10.entity.StudentBean;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        StudentDBHelper mDao;
        
        ListView mlvStudent;
        ArrayList<StudentBean> mStudents;
        StudentAdapter mAdapter;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mDao=new StudentDBHelper(this);
            initData();
            initView();
        }
        
        private void initView() {
            mlvStudent=(ListView) findViewById(R.id.lvStudent);
            mAdapter=new StudentAdapter(mStudents, this, mDao);
            mlvStudent.setAdapter(mAdapter);
        }
    
        private void initData() {
            mStudents=mDao.queryAll();
        }
    
        class StudentAdapter extends BaseAdapter{
            ArrayList<StudentBean> students;
            Context context;
            StudentDBHelper dao;
            
            public StudentAdapter(ArrayList<StudentBean> students, Context context,//Context是Activity的父类
                    StudentDBHelper dao) {
                super();
                this.students = students;
                this.context = context;
                this.dao = dao;
            }
    
            public void remove(int position){//列表的删除
                dao.deleteRecord(students.get(position).getId());
                students.remove(position);
                notifyDataSetChanged();
            }
            
            public void add(StudentBean bean){//列表的增加
                students.add(bean);
                notifyDataSetChanged();
                dao.insertRecored(bean);
            }
            
            public void update(int position,StudentBean bean){
                students.set(position, bean);
                notifyDataSetChanged();
                dao.updateRecord(bean);
            }
            
            @Override
            public int getCount() {
                return students.size();
            }
    
            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return null;
            }
    
            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return 0;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder holder=null;
                if(convertView==null){
                    //缓存第一屏的所有convertView(比如10个)
                    convertView=View.inflate(context, R.layout.item_student, null);
                    holder=new ViewHolder();
                    holder.tvName=(TextView) convertView.findViewById(R.id.tvName);
                    holder.tvSex=(TextView) convertView.findViewById(R.id.tvSex);
                    holder.tvBirthday=(TextView) convertView.findViewById(R.id.tvBirthday);
                    holder.tvHeight=(TextView) convertView.findViewById(R.id.tvHeight);
                    convertView.setTag(holder);
                }else{
                    //滚屏的时候获取缓存的所有convertView(比如10个)
                    holder=(ViewHolder) convertView.getTag();
                }
                //修改成新的
                StudentBean bean=students.get(position);
                holder.tvName.setText(bean.getName());
                holder.tvSex.setText(bean.getSex());
                holder.tvBirthday.setText(bean.getBirthday());
                holder.tvHeight.setText(bean.getHeight()+"");
                return convertView;
            }
            class ViewHolder{
                TextView tvName,tvSex,tvBirthday,tvHeight;
            }
            
        }
    }
    package com.sxt.day06_10;
    
    import java.util.ArrayList;
    
    import com.sxt.day06_10.entity.StudentBean;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class StudentDBHelper extends SQLiteOpenHelper {
    
        private static final String DB_NAME="students.db";
        static final String TABLE_NAME="student";
        static final String ID="_id";
        static final String NAME="name";
        static final String SEX="sex";
        static final String BIRTHDAY="birthday";
        static final String HEIGHT="height";
        
        public StudentDBHelper(Context context) {
            super(context, DB_NAME, null, 1);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            String sql="create table if not exists "+TABLE_NAME+"("
                +ID+" integer primary key autoincrement,"
                +NAME+" varchar(50),"
                +SEX+" varchar(2),"
                +BIRTHDAY+" datetext,"
                +HEIGHT+" real)";
            db.execSQL(sql);
            insertRecords(db);
        }
    
        private void insertRecords(SQLiteDatabase db) {
            ContentValues values=new ContentValues();
            values.put(NAME, "张飞");
            values.put(SEX, "男");
            values.put(BIRTHDAY, "1990-5-5");
            values.put(HEIGHT, 1.99);
            db.insert(TABLE_NAME, null, values);
            
            values=new ContentValues();
            values.put(NAME, "王菲");
            values.put(SEX, "女");
            values.put(BIRTHDAY, "1990-8-5");
            values.put(HEIGHT, 1.69);
            db.insert(TABLE_NAME, null, values);
            
            values=new ContentValues();
            values.put(NAME, "刘亦菲");
            values.put(SEX, "女");
            values.put(BIRTHDAY, "1991-5-5");
            values.put(HEIGHT, 1.7);
            db.insert(TABLE_NAME, null, values);
            
            
            values=new ContentValues();
            values.put(NAME, "李菲");
            values.put(SEX, "女");
            values.put(BIRTHDAY, "1992-5-5");
            values.put(HEIGHT, 1.72);
            db.insert(TABLE_NAME, null, values);
            
            values=new ContentValues();
            values.put(NAME, "田菲");
            values.put(SEX, "男");
            values.put(BIRTHDAY, "1993-5-5");
            values.put(HEIGHT, 1.78);
            db.insert(TABLE_NAME, null, values);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
    
        }
    
        /**
         * 向表中增加一条记录
         * @param bean
         * @return
         */
        public int insertRecored(StudentBean bean){
            ContentValues values=new ContentValues();
            values.put(NAME, bean.getName());
            values.put(SEX, bean.getSex());
            values.put(BIRTHDAY, bean.getBirthday());
            values.put(HEIGHT, bean.getHeight());
            SQLiteDatabase db = getWritableDatabase();//getWritableDatabase()是SQLiteOpenHelper的方法
            long count = db.insert(TABLE_NAME, null, values);
            return (int) count;//插入的行数
        }
        
        /**
         * 删除指定id的记录
         * @param id
         * @return
         */
        public int deleteRecord(int id){
            SQLiteDatabase db = getWritableDatabase();
            int count = db.delete(TABLE_NAME, ID+"=?", new String[]{""+id});
            return count;//删除的行号
        }
        
        public int updateRecord(StudentBean bean){
            ContentValues values=new ContentValues();
            values.put(NAME, bean.getName());
            values.put(SEX, bean.getSex());
            values.put(BIRTHDAY, bean.getBirthday());
            values.put(HEIGHT, bean.getHeight());
            SQLiteDatabase db = getWritableDatabase();
            int count = db.update(TABLE_NAME, values, ID+"=?", new String[]{bean.getId()+""});//ID+"=?"是条件,new String[]{bean.getId()+""是填充占位符?
            return count;
        }
        
        public ArrayList<StudentBean> queryAll(){
            SQLiteDatabase db = getReadableDatabase();
            Cursor c = db.query(TABLE_NAME, null, null, null, null, null, null);//全查询,没有条件
            ArrayList<StudentBean> students=new ArrayList<StudentBean>();
            while(c.moveToNext()){
                int id=c.getInt(0);
                String name=c.getString(c.getColumnIndex(NAME));
                String sex=c.getString(c.getColumnIndex(SEX));
                String birthday=c.getString(c.getColumnIndex(BIRTHDAY));
                double height=c.getDouble(c.getColumnIndex(HEIGHT));
                StudentBean bean=new StudentBean(id, name, sex, birthday, height);
                students.add(bean);
            }
            return students;
        }
        
        public StudentBean queryRecord(int id){
            SQLiteDatabase db = getReadableDatabase();
            Cursor c = db.query(TABLE_NAME, null, ID+"=?", new String[]{""+id}, null,null,null);
            if(c.moveToNext()){
                String name=c.getString(c.getColumnIndex(NAME));
                String sex=c.getString(c.getColumnIndex(SEX));
                String birthday=c.getString(c.getColumnIndex(BIRTHDAY));
                double height=c.getDouble(c.getColumnIndex(HEIGHT));
                StudentBean bean=new StudentBean(id, name, sex, birthday, height);
                return bean;
            }
            return null;
        }
    }

    main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ListView
            android:id="@+id/lvStudent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:dividerHeight="5dp"/>
    
    </RelativeLayout>

    item_student.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
        
        <TextView 
            android:id="@+id/tvName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:text="张飞"
            android:layout_marginLeft="5dp"/>
        <TextView 
            android:id="@+id/tvSex"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:text="男"
            android:layout_marginLeft="5dp"/>
       <TextView 
            android:id="@+id/tvBirthday"
            android:layout_below="@id/tvName"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:text="1990-5-5"
            android:layout_marginLeft="5dp"/>
        <TextView 
            android:id="@+id/tvHeight"
            android:layout_below="@id/tvSex"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:text="1.99米"
            android:layout_marginLeft="5dp"/>    
    </RelativeLayout>
  • 相关阅读:
    boostrap各种设备大小,以及不同设备的隐藏和显示
    thinkphp5 layout布局的理解和使用,模板继承等等
    thinkphp5的前台是如何实现的,以及后台栏目的作用
    JS工作流进度条显示,以及相关的思路和原理
    Lnmp服务器集群配置研究和实践
    关于require.js写的最通俗易懂的文章
    使用js把html导出word,单位换算,配置样式和分页,页边距,字体及大小,行距,缩进,@page等等
    使用phpword插件,导出word,并解决循环数据的问题
    php使用array_filter函数,并使用闭包,动态的过滤数组
    leetcode——437. 路径总和 III
  • 原文地址:https://www.cnblogs.com/yaowen/p/4890226.html
Copyright © 2020-2023  润新知