Android SQLite事务处理结合Listview列表显示功能示例

本文实例讲述了Android SQLite事务处理结合Listview列表显示功能。分享给大家供大家参考,具体如下:

前面的文章里介绍过事务的特点如原子性,隔离性,一致性,持久性。下面就结合Android的sqlite来说下,这次的文章里会把listview也结合起来用。实际上android里的事务和我们数据库里的是一样的。也是开启事务,操作,提交事务。如果出现问题就回滚。

public void Transaction(){
  SQLiteDatabase database=db.getReadableDatabase();
  database.beginTransaction(); //开启事务
  try{
   String sql1="update student set username='lili' where userid=2";
   String sql2="update student set username='lucy' where userid=3";
   database.execSQL(sql1);
   database.execSQL(sql2);
   database.setTransactionSuccessful(); //设置事务的状态,这句不写事务就会回滚
  }finally{
    database.endTransaction(); //结束事务
  }
}

上面这段代码就是一个简单的事务操作,需要注意的就是要捕获异常,这样事务就会被结束掉可以节约数据库资源。

事务的操作就是这样,下面就介绍下listview的使用,我们理解成列表就可以了。界面如下

我们可以把这个界面拆成2个,主界面就只有“用户id”,“用户名”,“用户住址”也就是列表的头,主界面如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
 <TextView
  android:layout_width="60dip"
  android:layout_height="wrap_content"
  android:text="用户id"
 />
  <TextView
  android:layout_width="60dip"
  android:layout_height="wrap_content"
   android:text="用户名"
 />
  <TextView
  android:layout_width="60dip"
  android:layout_height="wrap_content"
  android:text="用户住址"
 />
</LinearLayout>
  <ListView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:id="@+id/listview"
  />
</LinearLayout>

这里的listview要定义一个id提供后面数据绑定使用,含有内容的显示界面也比较简单,也就是几个textview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
 <TextView
  android:layout_width="60dip"
  android:layout_height="wrap_content"
  android:id="@+id/userid"
 />
  <TextView
  android:layout_width="60dip"
  android:layout_height="wrap_content"
  android:id="@+id/username"
 />
  <TextView
  android:layout_width="90dip"
  android:layout_height="wrap_content"
  android:id="@+id/address"
 />
</LinearLayout>

这样界面的部分就OK了,接下来就是读取数据了,之后显示在listview中,在这里就提供2种方法来显示数据

(1)方法1

package org.lxh.db;
import java.util.*;
import org.lxh.service.StudentService;
import org.lxh.vo.Student;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class DBActivity extends Activity {
  private StudentService service;
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    this.service=new StudentService(this);
    ListView view=(ListView)this.findViewById(R.id.listview);
    List<Student> all=this.service.fiandAll();
    List<HashMap<String,Object>> data=new ArrayList<HashMap<String,Object>>();
    //逐个取出元素
    Iterator<Student> it=all.iterator();
    Student stu=null;
    while(it.hasNext()){
      stu=new Student();
      stu=it.next();
      HashMap<String,Object> map=new HashMap<String,Object>();
      map.put("userid", stu.getUserid());
      map.put("username", stu.getUsername());
      map.put("address", stu.getAddress());
      data.add(map);
    }
    //数据绑定
    SimpleAdapter adapter=new SimpleAdapter(this, data, R.layout.listview, new String[]{"userid","username","address"},new int[]{R.id.userid,R.id.username,R.id.address});
    view.setAdapter(adapter);
    //添加列表项监听事件
    view.setOnItemClickListener(new OnItemClickListener(){
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
        ListView listview=(ListView)parent;
        HashMap<String,Object> hash=(HashMap<String,Object>)listview.getItemAtPosition(position);
        Toast.makeText(DBActivity.this, hash.get("userid").toString(), 1).show();
      }});
}

这里的数据绑定,使用的是SimpleAdapter,我们首先要做的就是把数据逐个取出来存入一个HashMap,如下所示

HashMap<String,Object> map=new HashMap<String,Object>();

这里的hashmap存储的是泛型数据,这个集合的泛型不能随便修改,接下来的工作就是把这个集合当做list的泛型

List<HashMap<String,Object>> data=new ArrayList<HashMap<String,Object>>();

最后要记得把这个map添加到集合里

对于

SimpleAdapter adapter=new SimpleAdapter(this, data, R.layout.listview, new String[]{"userid","username","address"},new int[]{R.id.userid,R.id.username,R.id.address});
    view.setAdapter(adapter);

第四个参数里的"userid","username","address"是map集合里的key,最后一个参数是textview,也就是数据界面里的textview.后面还加了个监听,只要点击textview就会显示用户id,android就会通过textview的位置读取内容。

这里把先读数据的代码先贴出来

public List<Student> fiandAll(){
  List<Student> all=new ArrayList<Student>();
  String sql="select * from student";
  SQLiteDatabase database=db.getReadableDatabase(); //使用getReadableDatabase取得SQLiteDatabase
  Cursor cursor=database.rawQuery(sql, null); //得到游标,类似resultset
  Student stu;
  while(cursor.moveToNext()){ //移动游标
    int id=cursor.getInt(cursor.getColumnIndex("userid"));
    String name=cursor.getString(cursor.getColumnIndex("username"));
    String address=cursor.getString(cursor.getColumnIndex("address"));
    stu=new Student();
    stu.setUserid(id);
    stu.setUsername(name);
    stu.setAddress(address);
    all.add(stu);
  }
  cursor.close(); //关闭游标
  return all;
}

(2)游标适配器

下面是读数据的代码

public Cursor fiandAllCursor(){
  List<Student> all=new ArrayList<Student>();
  String sql="select userid as _id,username,address from student";
  SQLiteDatabase database=db.getReadableDatabase(); //使用getReadableDatabase取得SQLiteDatabase
  Cursor cursor=database.rawQuery(sql, null); //得到游标,类似resultset
  //cursor.close(); //这里不可以关闭游标
  return cursor;
}

这里为主键的列取了别名是因为android内部建议主键设置为_id,但是不可能每个表的主键的名称都是_id

Cursor all=this.service.fiandAllCursor(); //使用游标适配器
SimpleCursorAdapter cadapter=new SimpleCursorAdapter(this, R.layout.listview,all, new String[]{"_id","username","address"},new int[]{R.id.userid,R.id.username,R.id.address});
view.setAdapter(cadapter);
//添加列表项监听事件
view.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
  ListView listview=(ListView)parent;
  Cursor hash=(Cursor)listview.getItemAtPosition(position); //取得被点击item的位置
  int temp=hash.getInt(hash.getColumnIndex("_id"));
  Toast.makeText(DBActivity.this, String.valueOf(temp), 1).show();
}});

这里的适配器参数顺序和上面的有点不同,而且第四个参数里的“usernam”,"address"和'_id'都是表的列名。其他地方没太大区别,上面的“_id”也不能写成别的。否则会出错

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作SQLite数据库技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android使用SQLite数据库的示例

    一. 简介 SQLite数据库是一个轻量级的DBMS(数据库管理系统).SQLite使用单个文件存储数据,Android标准库包含SQLite库以及配套使用的一些Java辅助类.主要特点:轻量级,单一文件,跨平台,开源. 二. Android中SQLite数据库的使用 1.创建SQLite数据库 SQLiteDatabase db= SQLiteDatabase.openOrCreateDatabase( "/data/data/" + getPackageName() + "

  • Android编程之SQLite数据库操作方法详解

    本文实例讲述了Android SQLite数据库操作方法.分享给大家供大家参考,具体如下: SQLite and Android SQLite简介 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外,它还是开源的,任何人都可以使用它. SQLite由以下几个组件组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展SQLite的内核变得更加方便. SQLite支持的数据类型包括: 1.

  • Android SQLite数据库基本操作方法

    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能.而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库.那么就来看一下在Android程序中怎么去操作SQLite数据库来实现一些需求的吧,仍然以一个小例子开始: 在创建Android项目之前,我们应该想一下我们要定义的数据库的相关信息和里面的表格的相关信息,为了日后数据库的更新更加方便 ,我们可以用一个专门的类保存数据库的相关信息,以后如果要更新数据库的话只需要该动这个类

  • android SQLite数据库总结

    SQLite SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用. sql语法就不介绍了,直接看在android中的使用 SQLiteOpenHelper--封装好的数据库操作辅助类,需重写 重写方法 onCreate:初始化数据库,创建表,添加初始数据 onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等 常用方法 getReadableDatabase() 

  • Android批量插入数据到SQLite数据库的方法

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度. 有时需要把一些数据内置到应用中,常用的有以下几种方式: 1.使用db.execSQL(sql) 这里是把要插入的数据拼接成可执行的sql语句,然后调用db.execSQL(sql)方法执行插入. public void inertOrUpdateDateBatch(List<

  • Android开发笔记SQLite优化记住密码功能

    本文实例为大家分享了Android SQLite优化记住密码功能的具体代码,供大家参考,具体内容如下 package com.example.alimjan.hello_world; /** * Created by alimjan on 7/4/2017. */ import com.example.alimjan.hello_world.bean.UserInfo; import com.example.alimjan.hello_world.dataBase.UserDBHelper; i

  • Android利用listview控件操作SQLite数据库实例

    在本实例中,首先我们利用SQLiteOpenHelper类建立一个数据库,并写好增.删.查等方法,通过SimpleCursorAdapter连接listview实现数据库的增加.查询以及长按删除的功能. 首先,我们先认识一下什么是SQLiteOpenHelper类. Android为了操作SQlite数据库,提供了SQLiteDatabase类,其内封装了insert .delete.update .query .执行SQL命令等操作.同时又为SQLiteDatabase提供了一个辅助类,SQL

  • Android SQLite数据库版本升级的管理实现

    Android SQLite数据库版本升级的管理实现 我们知道在SQLiteOpenHelper的构造方法: super(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 中最后一个参数表示数据库的版本号.当新的版本号大于当前的version时会调用方法: onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 所以我们

  • Android SQLite事务处理结合Listview列表显示功能示例

    本文实例讲述了Android SQLite事务处理结合Listview列表显示功能.分享给大家供大家参考,具体如下: 前面的文章里介绍过事务的特点如原子性,隔离性,一致性,持久性.下面就结合Android的sqlite来说下,这次的文章里会把listview也结合起来用.实际上android里的事务和我们数据库里的是一样的.也是开启事务,操作,提交事务.如果出现问题就回滚. public void Transaction(){ SQLiteDatabase database=db.getRead

  • Android ItemDecoration 实现分组索引列表的示例代码

    本文介绍了Android ItemDecoration 实现分组索引列表的示例代码,分享给大家.具体如下: 先来看看效果: 我们要实现的效果主要涉及三个部分: 分组 GroupHeader 分割线 SideBar 前两个部分涉及到一个ItemDecoration类,也是我们接下来的重点,该类是RecyclerView的一个抽象静态内部类,主要作用就是给RecyclerView的ItemView绘制额外的装饰效果,例如给RecyclerView添加分割线. 使用ItemDecoration时需要继

  • QT实现制作一个ListView列表的示例代码

    目录 1.概述 2.代码示例 1.自定义QListWidget 2.自定义QListWidgetItem 3.使用 3.图片演示 1.概述 案例:使用Qt制作一个ListView.点击ListView的Item可以用于测试OpenCV的各种效果 自定义一个:MainListView继承QListWidget .MainListViewItem继承QListWidgetItem 2.代码示例 1.自定义QListWidget mainlistview.h class MainListView :

  • Android UI 中的 ListView列表控件的示例

    当程序中有大量的数据需要展示时,就需要用到 ListView 啦.ListView 允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕. 1 基本用法 布局文件中加入 ListView: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and

  • 深入Android SQLite 事务处理详解

    应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作.我的应用初始5000条记录也就是要5000次读写磁盘操作. 而且不能保证所有数据都能同时插入.(有可能部分插入成功,另外一部分失败,后续还得删除.太麻烦) 解决方法: 添加事务处理,把5000条插入作为一个事务 我们使用SQLite的事务进行控制: 复制代码 代码如下: db.beginTransac

  • Android入门教程之ListView的应用示例

    本文实例讲述了Android ListView的简单应用.分享给大家供大家参考,具体如下: 我们今天要讲的内容是Android中ListView中的实现.一共分为四个步骤,我将一一讲解: Step one:创建一个新的Android工程,命名为ListViewDemo. Step two:找到ListViewDemo.Java,把我们习惯的继承Activity,改成ListActivity,如下: public class ListViewDemo extends ListActivity St

  • 浅谈Android RecyclerView UI的滚动控件示例

    ListView 由于其强大的功能,在过去的 Andorid 开发中使用非常广泛.不过 ListView 需要优化来提升运行效率,就像我们之前所优化的那样,否则性能将很差.还有就是只能够纵向滚动,如果要想实现横向移动,用 ListView 是做不到的. RecyclerView 可以说是一个增强版的 ListView .它不仅实现了和 ListView 同样的效果,而且还优化了 ListView 存在的各种不足. RecyclerView 现在可是官方推荐使用的滚动控件哦O(∩_∩)O~ 1 基

  • Android开发之ListView列表刷新和加载更多实现方法

    本文实例讲述了Android开发之ListView列表刷新和加载更多实现方法.分享给大家供大家参考.具体如下: 上下拉实现刷新和加载更多的ListView,如下: package com.sin.android.ui; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; import andro

  • Android ListView列表控件的介绍和性能优化

    ListView列表控件 一.ListView显示数据的原理:mvc模式 m:mode 数据(用javabean规范封装) v:view ListView c:adapter 适配器,负责把数据展示到ListView上 二.ListView最常用适配器 BaseAdapter.SimpleAdapter.ArrayAdapter 三.ListView显示数据的步骤 1.创建ListView 2.自定义ListView的适配器继承BaseAdapter,重写baseAdapter的getCount

  • Android Scroll实现弹性滑动_列表下拉弹性滑动的示例代码

    我这一次讲使用scroll实现弹性滑动,我不会只有一个例子就说完,因为写文章的时候我也在学习,我分几次讲完吧. 首先上一段代码, private void smoothScrollByScroller(int dy){ mScroller.startScroll(0,dy,0,dy*-1,1000); invalidate(); } @Override public void computeScroll() { if (mScroller.computeScrollOffset()) { scr

随机推荐