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

Android 数据库读取数据显示 [5]的更多相关文章

  1. Android 数据库读取数据显示优化 Application [6]

    Application和Activity,Service一样是android框架的一个系统组件, 当android程序启动时系统会创建一个application对象,用来存储系统的一些信息. 通常我们 ...

  2. 初学coreData数据库读取不成功的问题

    写了一个从数据库读取数据显示列表的代码,结果却无法运行,提示找不到对应的entity,也就是数据库中的某一个表 我查遍了代码也没有发现什么逻辑错误,在appDelegate也初始化了相关数据库,在界面 ...

  3. Android数据读取之Sqlite数据库操作

    咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作.以一个实例开始吧: 首先,上图,看看做成后的效果: 大概描述:类似于浏览器的收藏夹,网站名称,网站地址, ...

  4. Android打开数据库读取数据

    打开数据库读取数据 private MyDatabaseHelper dbHelper; dbHelper=new MyDatabaseHelper(this,"List.db", ...

  5. 深入解析Sqlite的完美替代者,android数据库新王者——Realm

    写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里给大家补刀,所以我觉得今天不虐狗,继续给大家分享有用的. 如果你比较关心androi ...

  6. Android数据库升级

    随着Android应用版本的迭代,经常遇到数据库表结构发生改变,或者一些指定的表数据需要更新.这也就引出一个问题Android数据库的更新问题. Android数据库升级分类 Android数据库更新 ...

  7. 不root手机的情况下查看Android数据库

    最近写Android的时候发现想要读取数据库很不方便,使用adb工具的方法需要root手机,而华为手机root十分麻烦,需要解除密码,一些品牌手机即使root了也没有sqlite3命令,总之十分麻烦. ...

  8. Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

    Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...

  9. Android自动读取短信验证码

    Android自动读取短信验证码  extends:http://www.cnblogs.com/jiayaguang/p/4366384.html,http://blog.csdn.net/yung ...

随机推荐

  1. @protocol 和 category 中如何使用 @property

    出题者简介: 孙源(sunnyxx),目前就职于百度 整理者简介:陈奕龙(子循),目前就职于滴滴出行. 转载者:豆电雨(starain)微信:doudianyu 在 protocol 中使用 prop ...

  2. angularJS 指令二

    指令详解1.用directive()方法来定义指令.directive('myDirective',function($timeout,userDefinedService){ return {};} ...

  3. July收集荷兰国旗问题之三路partition

    这道题目和分成两块的partition的扩展.比如有一堆0 1 2 数字组成的数组,要分成 00 00  11 1 1  222 2这样的顺序的. 利用lumoto版的partition能够非常好的解 ...

  4. [AngularJS] 5 simple ways to speed up your AngularJS application

    Nowdays, Single page apps are becoming increasingly popular among the fornt-end developers. It is th ...

  5. CreateFont具体解释

    CFont * f;    f = new CFont;    f->CreateFont(10, // nHeight         0, // nWidth         0, // n ...

  6. vs2008试用期到期解决办法

    vs2008试用期结束之后,     在“控制面板”中启动“添加删除程序”,      选中Vs2008,点击“更改.删除”,      在出现的维护模式对话框中, 选择下一步,输入下面的CD-Key ...

  7. configure JAAS for jboss 7.1 and mysql--reference

    Hello all, In this tutorial we are going to configure JAAS for jboss 7.1 and mysql for Form based au ...

  8. TCP/IP协议原理与应用笔记11:TCP/IP中地址与层次关系

    1. 网络中常用的地址: 2. TCP/IP中地址与层次关系 :

  9. Asp.net页面使用showModalDialog时Postback弹出新页面解决办法

    今天碰到一个让我一开始觉得莫名其妙的问题, 用window.showModalDialog打开一个.aspx文件,然后点击这个页面上一个button, 把页面的数据存入数据库之后,居然又打开一个这个页 ...

  10. 移动页面缩放方法之(三)rem布局

    <!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta http-equiv="Con ...