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) 这个方法在实现时需要重写。
839 0
|
7天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
12 1
|
9天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
32 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
1月前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
10天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
39 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
30天前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
29 3
|
22小时前
|
机器学习/深度学习 安全 数据处理
构建未来:基于Android的智能家居控制系统开发
【4月更文挑战第29天】 随着物联网技术的蓬勃发展,智能家居已成为现代技术革新的重要领域。本文将深入探讨基于Android平台的智能家居控制系统的设计和实现,旨在提供一种用户友好、高度集成且功能丰富的解决方案。通过利用Android设备的广泛普及和其强大的处理能力,结合最新的无线通讯技术和人工智能算法,我们旨在打造一个可靠、易用且具有高度可定制性的智能家居控制环境。文中不仅详细阐述了系统架构、关键技术选型以及界面设计,还对可能遇到的安全挑战进行了分析,并提出了相应的解决策略。
|
5天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。