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 ...
随机推荐
- POJ 1456 Supermarket
题意:商场卖东西,每种商品有两个属性,一种是价格pi,另一种是保质期di,每种商品只能在天数<=di的时候卖出.每天只能卖一种商品,问最多能卖出价格之和为多少的商品.(n <= 10^4, ...
- OC类方法和实例方法 及常用的for/in方法
类方法前面有+,实例方法前面有- 类方法和实例方法的区别在于,类方法不能使用实例变量. 使用类方法主要原因有: 1.类方法的使用不依赖于实例化一个对象,也就是说如果一个功能的实现不需要实例化对象,就可 ...
- C++高精度运算类bign (重载操作符)
大数据操作,有例如以下问题: 计算:456789135612326542132123+14875231656511323132 456789135612326542132123*14875231656 ...
- 定制属于自己的Chrome起始页
个人感觉没什么技术含量,可是很有用.我定制的起始页面例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ19saWNodW4=/font/5 ...
- MYSQL 体系结构图
- 数据的存储-NSKeyedArchiver和write to file介绍
数据的存储-NSKeyedArchiver和write to file介绍 首先介绍各个文件的作用-->讲解文件位置的查找方法-->介绍数据存储的方式:1.使用归档方式存储数据 2.wri ...
- TCP的封包与拆包
对于基于TCP开发的通讯程序,有个很重要的问题需要解决,就是封包和拆包. 一.为什么基于TCP的通讯程序需要进行封包和拆包. TCP是个"流"协议,所谓流,就是没有界限的一串数据. ...
- Windows XP CD 函数不正确
参考这篇文章:http://support.hp.com/cn-zh/document/c00760286 一,在设备管理中查看,如果刻录机名称中含 ROM,则需确认设备是否可写 二,若确定设备可写, ...
- firebug中console命令尝试
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linq101-Generation
using System; using System.Linq; namespace Linq101 { class Generation { /// <summary> /// This ...