Android整理:SQlite数据库的使用以及通过listView显示数据
前言:上个月与同学一起做了一个简单的Android应用,这段时间正好没有很多事情所以趁热整理一下学习到的知识,刚开始学习Android还有很多不懂的地方,继续努力吧!
作业中需要用到数据库,当然首选Android集成了的SQLite数据库。
直接使用数据库可以这样:
//打开或创建test.db数据库
SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
//创建person表
db.execSQL("CREATE TABLE IF NOT EXISTS person([id] INTEGER PRIMARY KEY, [name] TEXT)");
//查询
Cursor cursor = db.rawQuery("select * from person where name = " + "'urbain'", null);
if(cursor.moveToNext()) {
id = Integer.parseInt( cursor.getString(0) );
name = cursor.getString(1);
}
//更新删除操作均可用db.execSQL(string)来操作
利用listView显示数据库中的数据要加一个adapter,步骤:
1.将Sqlite数据库的内容查询出来并放入数组列表中,形成ListView的数据源;
2.adapter适配器绑定数据源,显示在ListView item中。
自己写类DatabaseHelper继承SQLiteOpenHelper并实现部分数据库操作:
package com.zkurbain.wenriji;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper{
private static final int VERSION = 1;
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
public DatabaseHelper(Context context, String name){
this(context, name, VERSION);
}
public DatabaseHelper(Context context, String name, int version){
this(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
String crtWenTable = "CREATE TABLE IF NOT EXISTS [wenti]([wentiHash] INTENGER PRIMARY KEY, [wentiName] TEXT)" ;
db.execSQL(crtWenTable);
//如果数据库为空,则预置一些数据
Cursor cursor = db.rawQuery("select * from wenti", null);
if( !cursor.moveToNext()){
String[] swen = {"我今天读书了吗?", "我明天打算做什么?", "今天吃啥好吃的?"};
db.beginTransaction(); //开始事务处理
for (String s : swen) {
db.execSQL("insert into wenti values(" + s.hashCode() + ", '"+ s +"')");
}
db.setTransactionSuccessful(); //设置事务标志为成功,当结束事务时就会提交事务
db.endTransaction(); //结束事务
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
在主类中,借助SimpleAdapter使数据显示在listView:
package com.zkurbain.wenriji;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class ChooseWen extends Activity {
private ListView listView = null;
private List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
private SimpleAdapter simpleAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_wen);
listView = (ListView) findViewById(android.R.id.list);
simpleAdapter = new SimpleAdapter(this, getdata(), R.layout.list,
new String[] { "wentiName" }, new int[] { R.id.wenti });
//listView绑定adapter
listView.setAdapter(simpleAdapter);
}
private List<Map<String, Object>> getdata() {
DatabaseHelper dbHelper = new DatabaseHelper(ChooseWen.this,
"wenriji.db");
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from wenti", null);
// 清空list
list.clear();
// 查询到的数据添加到list集合
while (cursor.moveToNext()) {
String wenti = cursor.getString(1);
Map<String, Object> map = new HashMap<String, Object>();
map.put("wentiName", wenti); // 获取name
list.add(map);
}
return list;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.choose_wen, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
}
下面是XML文件内容:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.wenriji.wenriji.ChooseWen"
android:id="@+id/activity_choose_wen" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true" >
<requestFocus />
</ListView>
</RelativeLayout>
Android整理:SQlite数据库的使用以及通过listView显示数据的更多相关文章
- Qt for Android 打包 SQLite 数据库
Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...
- Android实现SQLite数据库联系人列表
Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...
- Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库
下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...
- android中sqlite数据库的基本使用和添加多张表
看了很多关于android使用sqlite数据库的文章,很多都是介绍了数据库的建立和表的建立,而表通常都是只建立一张,而实际情况我们用到的表可能不止一张,那这种情况下我们又该怎么办呢,好了,下面我教大 ...
- android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
android 一个SQLite数据库多个数据表(带demo) 前言 demo演示 一.搭建 二.建立实体类 三.建立数据库操作类 ...
- Android之SQLite数据库使用
转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...
- Android之SQLite数据库篇
一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...
- android安卓Sqlite数据库实现用户登录注册
看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...
- Android中SQLite数据库小计
2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...
随机推荐
- spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon
0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...
- asp.net core 实现支持多语言
asp.net core 实现支持多语言 Intro 最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语言方面的一 ...
- Spring Cloud Stream消息驱动@SendTo和消息降级
参考程序员DD大佬的文章,自己新建demo学习学习,由于需要消息回执,看到了@SendTo这个注解能够实现,下面开始学习demo,新建两个项目cloud-stream-consumer消费端 和 cl ...
- 2018 东北地区大学生程序设计竞赛(ABEHIK)
HDU6500:Problem A. Game with string 题意: 给你一个字符串s以及它的m个子串的首尾位置,现在Alice和 Bob两个人轮流在任一子串的前面或者后面加1个字符,要求加 ...
- C++ | C++ 基础知识 | 结构、联合与枚举
1. 结构 1.0 结构 数组是相同类型元素的集合,相反,struct 是任意类型元素的集合. 代码例子: struct Address { const char* name; int number; ...
- Python学习中的“按位取反”笔记总结
| 疑惑 最近在学习Python的过程中了解到位运算符,但对于按位取反有点迷糊,就比如说~9(按位取反)之后的结果是-10,为什么不是6呢?所以下面就来看看为什么不是6,正确结果是如何计算出来的呢? ...
- 让vue-router渲染为指定的标签
<router-link :to="{name:'cart'}" tag="li"> cart </router-link> 在rout ...
- netcore使用IOptions
{ "Logging": { "LogLevel": { "Default": "Information", " ...
- redis 其他操作
1.设定服务端密码 1.1.编辑 redis的配置文件 [root@centos7 ~]# vim /usr/local/redis/etc/redis.conf requirepass 123 # ...
- Flask DBUtils
作用:创建连接池,解决多线程问题 1.安装模块 pip3 install -i https://pypi.douban.com/simple DBUtils 2.settings.py(配置文件) f ...