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
Android 数据库读取数据显示 [5]的更多相关文章
- Android 数据库读取数据显示优化 Application [6]
Application和Activity,Service一样是android框架的一个系统组件, 当android程序启动时系统会创建一个application对象,用来存储系统的一些信息. 通常我们 ...
- 初学coreData数据库读取不成功的问题
写了一个从数据库读取数据显示列表的代码,结果却无法运行,提示找不到对应的entity,也就是数据库中的某一个表 我查遍了代码也没有发现什么逻辑错误,在appDelegate也初始化了相关数据库,在界面 ...
- Android数据读取之Sqlite数据库操作
咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作.以一个实例开始吧: 首先,上图,看看做成后的效果: 大概描述:类似于浏览器的收藏夹,网站名称,网站地址, ...
- Android打开数据库读取数据
打开数据库读取数据 private MyDatabaseHelper dbHelper; dbHelper=new MyDatabaseHelper(this,"List.db", ...
- 深入解析Sqlite的完美替代者,android数据库新王者——Realm
写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里给大家补刀,所以我觉得今天不虐狗,继续给大家分享有用的. 如果你比较关心androi ...
- Android数据库升级
随着Android应用版本的迭代,经常遇到数据库表结构发生改变,或者一些指定的表数据需要更新.这也就引出一个问题Android数据库的更新问题. Android数据库升级分类 Android数据库更新 ...
- 不root手机的情况下查看Android数据库
最近写Android的时候发现想要读取数据库很不方便,使用adb工具的方法需要root手机,而华为手机root十分麻烦,需要解除密码,一些品牌手机即使root了也没有sqlite3命令,总之十分麻烦. ...
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...
- Android自动读取短信验证码
Android自动读取短信验证码 extends:http://www.cnblogs.com/jiayaguang/p/4366384.html,http://blog.csdn.net/yung ...
随机推荐
- Appium移动自动化测试(四)--one demo(转)
Appium移动自动化测试(四)--one demo 2015-06-15 20:41 by 虫师, 40514 阅读, 34 评论, 收藏, 编辑 继续更新. ------------------- ...
- Mysql Binlog日志详解
一.Mysql Binlog格式介绍 Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在 ...
- Redis的安装及配置
Redis安装及主从配置 一.何为Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表) ...
- STRUCTS 2 LABLE
{LJ?Dragon}[标题]structs2标签的作用 {LJ?Dragon}[Diary]2017年,愉快的开始:离别不一定总伤感,虽然只是安慰着自己......... 问与答 问题 在Strut ...
- Unity3D 画线插件 Vectrosity 画一个一直循环的正弦函数曲线
直接贴代码 public Material myMaterisl; float fx;//曲线最左边的X坐标 float fy;//曲线趋于直线时y轴坐标 float fyMax = 0f;//曲线最 ...
- Android ===smail语法总结
(转载自 网络)smail 语法总结 http://www.blogjava.net/midea0978/archive/2012/01/04/367847.html Smali背景: Smali,B ...
- 分布式系统状态下redis存储asp.net session使用第三方Providers驱动
https://github.com/ServiceStack/ServiceStack.Redis (redis客户端组件) 注:redis服务端在windows不太稳定,一般部署在Linux下. ...
- jquery自定义插件来实现分页的效果
本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DT ...
- Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- ADLINK 8158控制程序-连续运动(VB.NET)
运动平台:日脉的二维运动平台(一个旋转平台和一个滑动平台) 开发环境:VS2010 + .NET Framework + VB.NET 使用文件:pci_8158.vb motion_8158_2D. ...