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>
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4890226.html,如需转载请自行联系原作者


相关文章
|
数据库 Android开发 计算机视觉
|
存储 数据库 Android开发
Android中SQLiteOpenHelper类的onUpgrade方法浅谈
      public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version) 这个方法在实现时需要重写。
925 0
|
2月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
143 11
|
6月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1190 77
|
3月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
164 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
7月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
411 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
7月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
203 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
7月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
165 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
8月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
359 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程