数据库在ListView上显示数据

 

跟着黑马视频学习所得,直接贴代码,两个MainActivity只是不同的listview样式显示。

package com.example.bhj;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private List<Person> personList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView mListView=findViewById(R.id.list_view);




        //得到数据库的数据
        PersonDao dao = new PersonDao(this);

        for (int i = 0;i<50;i++){
            dao.insert(new Person(i,"陈子龙"+i,i));
        }

        personList = dao.queryAll();

        //把view层对象ListView和控制器BaseAdapter关联起来
        mListView.setAdapter(new MyAdapter());
    }


    /**
     * 数据适配器
     */
    class MyAdapter extends BaseAdapter{

        @Override

        /**
         * 定义ListView的数据长度,也就是item的个数
         */
        public int getCount() {
            return personList.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        /**
         * 返回ListView中指定某一行的view对象,也就是item对象
         * @param position 当前view的索引位置
         * @param convertView  缓存对象
         * @param parent ListView
         * @return
         */
        public View getView(int position, View convertView, ViewGroup parent) {

            TextView mTextView = null;

            if (convertView != null){ //判断缓存对象是否null,不为null时已经缓存了对象

                mTextView = (TextView) convertView;

            }else {  //等于null,说明第一次显示,新创建

                mTextView = new TextView(MainActivity.this);

            }

            mTextView.setTextSize(20);

            Person person = personList.get(position);//获得指定位置的数据,进行对TextView的绑定

            mTextView.setText(person.toString());

            return mTextView;
        }
    }

}

package com.example.bhj;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.List;

public class MainActivity01 extends AppCompatActivity {

    private List<Person> personList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView mListView=findViewById(R.id.list_view);




        //得到数据库的数据
        PersonDao dao = new PersonDao(this);

        for (int i = 0;i<50;i++){
            dao.insert(new Person(i,"陈子龙"+i,i));
        }

        personList = dao.queryAll();

        //把view层对象ListView和控制器BaseAdapter关联起来
        mListView.setAdapter(new MyAdapter());
    }


    /**
     * 数据适配器
     */
    class MyAdapter extends BaseAdapter{

        @Override

        /**
         * 定义ListView的数据长度,也就是item的个数
         */
        public int getCount() {
            return personList.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        /**
         * 返回ListView中指定某一行的view对象,也就是item对象
         * @param position 当前view的索引位置
         * @param convertView  缓存对象
         * @param parent ListView
         * @return
         */
        public View getView(int position, View convertView, ViewGroup parent) {

            View view = null;

            if (convertView == null){

                //布局填充器对象,用于把xml对象转化为view对象
                LayoutInflater inflater = MainActivity01.this.getLayoutInflater();

                view = inflater.inflate(R.layout.listview_item,null);
            }else {

                view = convertView;
            }

            //给view中的年龄和姓名赋值
            TextView tvName = view.findViewById(R.id.tv_listview_item_name);//这里需调用view中的findViewById,不然会在R.layout.activity_main中寻找
            TextView tvAge = view.findViewById(R.id.tv_listview_item_age);

            Person person = personList.get(position);

            tvName.setText("姓名"+person.getName());
            tvAge.setText("年龄"+person.getAge());

            return view;
        }
    }

}

package com.example.bhj;

/**
 * Created by bhj on 2018/9/15.
 *
 * Person的一个实体类
 */

public class Person {

    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person() {
    }

    public Person(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.example.bhj;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by bhj on 2018/9/15.
 */


/**
 * SQLiteDatabase类概述
     公开管理SQLite数据库的方法。
     SQLiteDatabase有创建、删除、执行SQL命令和执行其他常见数据库管理任务的方法

 *只有通过SQLiteOpenHelper类来得到SQLiteDatabase对象,得到这个对象来连接数据库
 *
 * 所以在PersonDao构造函数中把PersonSQLiteOpenHelper来初始化,得到他的一个对象
 */

public class PersonDao {
    private  PersonSQLiteOpenHelper mOpenHelper; // 数据库的帮助类对象

    public PersonDao(Context context){
        mOpenHelper = new PersonSQLiteOpenHelper(context);
    }

    /**
     * 添加到person表一条数据
     * @param person  传入person的一个实体类,里面定义了id,name,age
     */
    public void insert(Person person){

        SQLiteDatabase db = mOpenHelper.getWritableDatabase();

        if (db.isOpen()){ //如果数据库打开,执行添加的操作

            db.execSQL("INSERT INTO person(name,age) values(?,?);",new Object[]{person.getName(),person.getAge()});

            db.close();//关闭数据库
        }
    }


    /**
     * 更据id删除记录
     * @param id
     */
    public void delete(int id) {
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();	// 获得可写的数据库对象
        if(db.isOpen()) {	// 如果数据库打开, 执行添加的操作

            db.execSQL("delete from person where id =?;", new Integer[]{id});

            db.close();	// 数据库关闭
        }
    }

    /**
     * 根据id找到记录, 并且修改姓名
     * @param id
     * @param name
     */
    public void update(int id, String name) {
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        if(db.isOpen()) {	// 如果数据库打开, 执行添加的操作

            db.execSQL("update person set name = ? where id = ?;", new Object[]{name, id});

            db.close();	// 数据库关闭
        }
    }


    /**
     * 查询所有的数据
     * @return  person
     */
    public List<Person> queryAll(){

        SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象

        if (db.isOpen()){

            Cursor cursor = db.rawQuery("select id, name, age from person;", null);

            if (cursor != null && cursor.getCount()>0){//如果游标读到的行有数据

                List<Person> personList = new ArrayList<Person>();
                int id;
                String name;
                int age;

                while (cursor.moveToNext()){

                    id = cursor.getInt(0);//取第0列的数据 id  列是从0开始的,有数据的行第一行是1
                    name = cursor.getString(1);
                    age = cursor.getInt(2);

                    personList.add(new Person(id,name,age));
                }
                cursor.close();
                db.close();
                return personList;

            }

            db.close();
        }

        return null;
    }

    public Person queryItem(int id){

        SQLiteDatabase db = mOpenHelper.getReadableDatabase();// 获得一个只读的数据库对象

        if (db.isOpen()){

            Cursor cursor = db.rawQuery("select id,name,age from person where id=? ;",new String[]{id+""});

            if (cursor!=null&&cursor.moveToFirst()){
                int _id = cursor.getInt(0);
                String name = cursor.getString(1);
                int age = cursor.getInt(2);
                db.close();
                return new Person(_id, name, age);
            }
            cursor.close();
            db.close();
        }

        return null;
    }

}
package com.example.bhj;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by bhj on 2018/9/15.
 */


/**
 *  借用API来操作数据库
 */

public class PersonDao2 {

    private static final String TAG = "PersonDao2";

    private PersonSQLiteOpenHelper mOpenHelper;	// 数据库的帮助类对象

    public PersonDao2(Context context) {
        mOpenHelper = new PersonSQLiteOpenHelper(context);
    }

    /**
     * 添加到person表一条数据
     * @param person
     */
    public void insert(Person person) {
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        if(db.isOpen()) {	// 如果数据库打开, 执行添加的操作

            ContentValues values = new ContentValues();
            values.put("name", person.getName());		// key作为要存储的列名, value对象列的值
            values.put("age", person.getAge());
            long id = db.insert("person", "name", values);
            Log.i(TAG, "id: " + id);

            db.close();	// 数据库关闭
        }
    }

    /**
     * 更据id删除记录
     * @param id
     */
    public void delete(int id) {
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();	// 获得可写的数据库对象
        if(db.isOpen()) {	// 如果数据库打开, 执行添加的操作

            String whereClause = "_id = ?";
            String[] whereArgs = {id + ""};
            int count = db.delete("person", whereClause, whereArgs);
            Log.i(TAG, "删除了: " + count + "行");
            db.close();	// 数据库关闭
        }
    }


    /**
     * 根据id找到记录, 并且修改姓名
     * @param id
     * @param name
     */
    public void update(int id, String name) {
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        if(db.isOpen()) {	// 如果数据库打开, 执行添加的操作
            ContentValues values = new ContentValues();
            values.put("name", name);

            int count  = db.update("person", values, "id = ?", new String[]{id + ""});

            Log.i(TAG, "修改了: " + count + "行");

            db.close();	// 数据库关闭
        }
    }

    public List<Person> queryAll() {
        SQLiteDatabase db = mOpenHelper.getReadableDatabase();	// 获得一个只读的数据库对象
        if(db.isOpen()) {
            String[] columns = {"id", "name", "age"};	// 需要的列
            String selection = null;	// 选择条件, 给null查询所有
            String[] selectionArgs = null;	// 选择条件的参数, 会把选择条件中的? 替换成数据中的值
            String groupBy = null;	// 分组语句  group by name
            String having = null;	// 过滤语句
            String orderBy = null;	// 排序

            Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);

            int id;
            String name;
            int age;
            if(cursor != null && cursor.getCount() > 0) {
                List<Person> personList = new ArrayList<Person>();

                while(cursor.moveToNext()) {	// 向下移一位, 知道最后一位, 不可以往下移动了, 停止.
                    id = cursor.getInt(0);
                    name = cursor.getString(1);
                    age = cursor.getInt(2);

                    personList.add(new Person(id, name, age));
                }

                db.close();
                return personList;
            }
            cursor.close();
            db.close();
        }
        return null;
    }

    /**
     * 根据id查询人
     * @param id
     * @return
     */
    public Person queryItem(int id) {
        SQLiteDatabase db = mOpenHelper.getReadableDatabase();	// 获得一个只读的数据库对象
        if(db.isOpen()) {
            String[] columns = {"_id", "name", "age"};	// 需要的列
            String selection = "_id = ?";	// 选择条件, 给null查询所有
            String[] selectionArgs = {id + ""};	// 选择条件的参数, 会把选择条件中的? 替换成数据中的值
            String groupBy = null;	// 分组语句  group by name
            String having = null;	// 过滤语句
            String orderBy = null;	// 排序

            Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);

            if(cursor != null && cursor.moveToFirst()) {		// cursor对象不为null, 并且可以移动到第一行,默认是-1行
                int _id = cursor.getInt(0);
                String name = cursor.getString(1);
                int age = cursor.getInt(2);

                db.close();
                return new Person(_id, name, age);
            }
            cursor.close();
            db.close();
        }
        return null;
    }
}
package com.example.bhj;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 数据库帮助类,用于创建和管理数据库.
 * Created by bhj on 2018/9/11.
 */

public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {

    /**
     * 数据库的构造方法
     * @param context
     * name 数据库名称
     * factory 游标工程
     * version 数据库版本,不能小于1
     */
    public PersonSQLiteOpenHelper(Context context) {
        super(context, "bhj.db", null, 2);
    }


    /**
     * 数据库创建时回调此方法
     * 初始化一些表格
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {

        //操作数据库
         String spl = "create table person(id integer primary key,name varchar(20),age integer);";
         db.execSQL(spl);//生成一个名叫person的表
    }


    /**
     * 数据库的版本号更新时回调此方法
     * 更新数据库的内容(删除表,增加表,修改表)
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        if (oldVersion == 1 && newVersion == 2){

            // 在person表中添加一个余额列balance
            db.execSQL("alter table person add balance integer;");
        }
    }
}

activity_main.xml

<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="horizontal"
    tools:context=".MainActivity">

<ListView

    android:id="@+id/list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</ListView>

</LinearLayout>

listview_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp"
    >

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/src_01"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_listview_item_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30dp"
            android:text="张三"/>

        <TextView
            android:id="@+id/tv_listview_item_age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30dp"
            android:text="35"/>


    </LinearLayout>

</LinearLayout>

 

  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值