• Android 数据库读取数据显示 [5]


     2016-12-1 课程内容

     昨天学了Android数据库升级、降级、创建 

    今天把数据库表里面的数据读取出来显示到手机屏幕上

    下面代码是MainActivity.java 的代码 

    package com.example.winxinmff;
    
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import android.app.Activity;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
    
    import com.example.entity.Message;
    import com.example.winxinmffSQL.R;
    import com.j256.ormlite.dao.Dao;
    
    public class MainActivity extends Activity {
    
        private SimpleAdapter sa; // 是android中一个列表适配器 主要用于做一些简单的列表适配
        private ListView lv;
        private List<Message> messageList = new ArrayList<Message>();
        private List<Map<String, Object>> messageList2 = new ArrayList<Map<String, Object>>();
        private List<Message> messageList3;// 用于ORMLite 的演示
        // 看名字就是databasehelper,数据库助手的意思,这本身就是一个类。
        // 包含了数据库连接,关闭,如果有拓展的话 可能包含基本的数据库JDBC操作方法也就是简化增删改查的一些方法。
        private DatabaseHelper db_helper;
    
        // 首次创建时,会调用这个方法。
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.weixin);
    
            // 此3行代码用于创建表结构,以及初始化数据
            MyDatabaseOpenHelper helper = new MyDatabaseOpenHelper(
                    MainActivity1.this);
            SQLiteDatabase db = helper.getWritableDatabase();
            db.close();
    
            lv = (ListView) findViewById(R.id.listView1);
            sa = new SimpleAdapter(this, messageList2,// data 不仅仅是数据,而是一个与界面耦合的数据混合体
                    R.layout.listview_item_layout, new String[] { "tou",
                            "userName", "lastMessage", "datetime" },// from 从来来
                    new int[] { R.id.imageView1, R.id.tv_userName,
                            R.id.tv_lasMessage, R.id.tv_datetime }// to 到那里去
            );
            lv.setAdapter(sa);
            lv.setOnItemClickListener(new OnItemClickListener() {
    
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    Map<String, Object> item = messageList2.get(position);
                    item.put("userName", "赵本山" + position);
                    sa.notifyDataSetChanged();
    
                }
    
            });
    
        }
    
        // UI呈现在眼前
        protected void onResume() {
            Log.i("ok", "onResume,界面出现了");
    
            // 使用ORMLite
            db_helper = new DatabaseHelper(this);
            Dao<Message, Integer> message_dao = db_helper.getMessageDao();
            try {
                messageList3 = message_dao.queryForAll();
                // Log.i("ormlite", "记录条数:"+messageList3.size());
                String t = "记录条数:" + messageList3.size();
                Toast.makeText(this, t, Toast.LENGTH_LONG).show();
    
            } catch (SQLException e) {
                String t = "记出错:" + e.getMessage();
                Toast.makeText(this, t, Toast.LENGTH_LONG).show();
            }
    
            // 模拟读取数据库或者互联网
    
            for (int i = 0; i < messageList3.size(); i++) {
                Message p = new Message();
                p.setTou1("xxx");
                p.setUserName("不对外开放 高内聚 ");
                p.setLastMessage("匿名内部类也就是没有名字的内部类匿名内部类也就是没有名字的内部类");
                p.setDatetime("11.11");
                messageList.add(p);// 上周
    
                // 定义一个界面与数据的混合体,一个item代表一行记录
                Map<String, Object> item = new HashMap<String, Object>();
                // 一行记录,包含多个控件
                item.put("tou", R.drawable.a);  // 头像
                item.put("userName", messageList3.get(i).getUserName() + i);     // 名字
                item.put("lastMessage", messageList3.get(i).getLastMessage());    // 内容
                item.put("datetime", messageList3.get(i).getDatetime());        // 时间
                messageList2.add(item);             // 添加到集合
            }
            super.onResume();
        }
    
        // UI完全消失在眼前,完全被另外一个进程覆盖
        protected void onPause() {
            Log.i("ok", "onPause,被抛弃");
            db_helper.close();// ??到底要不要?
            super.onPause();
        }
    
    }
    MainActivity

    数据库助手类

    package com.example.winxinmff;
    
    import java.sql.SQLException;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    
    import com.example.entity.Message;
    import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
    import com.j256.ormlite.dao.Dao;
    import com.j256.ormlite.support.ConnectionSource;
    
    public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
        
        
        private static final String DB_NAME = "mydata.db"; // 数据库名称
        private static final int version = 1; // 数据库版本
        // 定义每一张表的成员变量,其中一个功能:关闭helper,所有DAO对象清理
        private Dao<Message, Integer> messageDao;
        
        public Dao<Message, Integer> getMessageDao(){
            if (messageDao == null) {
                try {
                    messageDao = getDao(Message.class);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return messageDao;
        }
        
        
        public DatabaseHelper(Context context) {
            super(context, DB_NAME, null, version);
    
        }
    
        /*
         * 1. 此方法,不会自动执行,需要手动执行,因为它不是回调函数 
         * 2. 最后也不要自己调用,因为只应该执行1次
         */
        public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
    
        }
    
        /*
         * 此方法,不会自动执行,需要手动执行,因为它不是回调函数
         */
        public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
                int arg3) {
    
        }
        
        protected Object clone() throws CloneNotSupportedException {
            if (messageDao != null) {
                messageDao = null;
            }
            return super.clone();
        }
    
    }
    DatabaseHelper

     显示效果:

    和昨天用命令查询是结果是一样的    (图是昨天的)

     

    说一下里面的内容

    41行 是new一个自己定义的MyDatabaseOpenHelper()方法

    43行 getWritableDatabase() 方法以读写方式打开数据库

    44行 关闭资源

      Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。

      (getReadableDatabase()方法中会调用getWritableDatabase()方法)

      其中getWritableDatabase() 方法以读写方式打开数据库,

      一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。

    如果用户从pause(暂停)的状态又回到了你的activity,这个系统resume这个activity并且调用了onResume()这个方法。

    暂停(pause)你的Activity

      当系统调用activity的onPause()时, 虽然从技术角度来讲你的activity是可见的,

      但是更通常这也预示着用户会离开这个activity,然后你的activity会进入stop状态。

    Activity的生命周期之Pause(暂停)和Resume(重新返回)

    http://www.jcodecraeer.com/a/anzhuokaifa/developer/2013/0715/1439.html

  • 相关阅读:
    sitecore系统教程之体验编辑器
    Sitecore安装(手动方式)
    Sitecore详细安装(包含sitecore安装过程截图)
    logstash快速入门实战指南-Logstash简介
    Elasticsearch从入门到精通之Elasticsearch基本概念
    arcgis api 3.x for js 解决 textSymbol 文本换行显示(附源码下载)
    openlayers4 入门开发系列之前端动态渲染克里金插值 kriging 篇(附源码下载)
    arcgis api 4.x for js 结合 react 入门开发系列react全家桶实现加载天地图(附源码下载)
    arcgis api 4.x for js 结合 react 入门开发系列"esri-loader"篇(附源码下载)
    arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)
  • 原文地址:https://www.cnblogs.com/Seven-cjy/p/6124695.html
Copyright © 2020-2023  润新知