1 目标从sqllite中读取数据并显示如下:

MainActivity对应的界面

MainActivity2对应的界面          

2  配置Android的清单文件

<?xml   编写操作数据库用的工具PersonSQLiteOpenHelper

package com.itheima28.sqlitedemo.db;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

/**

* 数据库帮助类,用于创建和管理数据库

* @author toto

*/

public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {

private static final String TAG = "PersonSQLiteOpenHelper";

/**

* 数据库的构造函数

* @param context

*

* name 数据库名称

* factory 游标工程

* version 数据库的版本号   不可以小于1

*/

public PersonSQLiteOpenHelper(Context context) {

//Open Declaration android.database.sqlite.SQLiteOpenHelper.SQLiteOpenHelper(

//                                         Context context,

//                                         String name,

//                                         CursorFactory factory,

//                                         int version)

super(context, "itheima28.db", null, 1);

}

/**

* 数据库第一次创建时回调此方法

* 初始化

*/

@Override

public void onCreate(SQLiteDatabase db) {

//操作数据库

String sql = "create table person(_id integer primary key, name varchar(20), age integer);";

db.execSQL(sql);

}

/**

* 数据库的版本号更新时回调此方法,

* 更新数据库的内容(删除表,添加表,修改表)

*/

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

if (oldVersion == 1 && newVersion == 2) {

Log.i(TAG, "数据库更新啦");

//在person表中添加一个余额列balance

db.execSQL("alter table person add balance integer;");

}

}

}

4 编写Person实体

package com.itheima28.sqlitedemo.entities;

public class Person {

private int id;

private String name;

private int age;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public Person() {

super();

}

public Person(int id, String name, int age) {

super();

this.id = id;

this.name = name;

this.age = age;

}

@Override

public String toString() {

return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

5第一种直接通过sql的方式操作数据库:

package com.itheima28.sqlitedemo.dao;

import java.util.ArrayList;

import java.util.List;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import com.itheima28.sqlitedemo.db.PersonSQLiteOpenHelper;

import com.itheima28.sqlitedemo.entities.Person;

public class PersonDao {

//数据库的帮助类对象

private PersonSQLiteOpenHelper mOpenHelper;

public PersonDao(Context context) {

mOpenHelper = new PersonSQLiteOpenHelper(context);

}

/**

* 添加到person表一条数据库

* @param person

*/

public void insert(Person person) {

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

//如果数据库打开,执行添加的操作

if (db.isOpen()) {

//执行添加到数据库的操作

db.execSQL("insert into person(name,age) values(?,?);",new Object[]{

person.getName(),

person.getAge()

});

//数据库关闭

db.close();

}

}

/**

* 根据id删除记录

* @param id

*/

public void delete(int id) {

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

//如果数据库打开,执行添加的操作

if (db.isOpen()) {

db.execSQL("delete from person where _id = ?;",new Integer[]{id});

//数据库关闭

db.close();

}

}

/**

* 根据id找到记录,并且修改姓名

* @param id

* @param name

*/

public void update(int id,String name) {

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

//如果数据库打开,执行添加的操作

if (db.isOpen()) {

db.execSQL("update person set name = ? where _id = ?;",new Object[]{name,id});

//数据库关闭

db.close();

}

}

/**

* 查询所有

* @return

*/

public List<Person> queryAll() {

SQLiteDatabase db = mOpenHelper.getReadableDatabase();

if (db.isOpen()) {

Cursor cursor = db.rawQuery("select _id, name, age from person;", null);

if (cursor != null && cursor.getCount() > 0) {

List<Person> personList = new ArrayList<Person>();

int id;

String name;

int age;

while (cursor.moveToNext()) {

id = cursor.getInt(0);        //取到第0列的数据id

name = cursor.getString(1);   //取姓名

age = cursor.getInt(2);

personList.add(new Person(id,name,age));

}

cursor.close();

db.close();

return personList;

}

db.close();

}

return null;

}

/**

* 根据id查询人

* @param id

* @return

*/

public Person queryItem(int id) {

SQLiteDatabase db = mOpenHelper.getReadableDatabase();       // 获得一个只读的数据库对象

if(db.isOpen()) {

Cursor cursor = db.rawQuery("select _id, name, age from person where _id = ?;", new String[]{id + ""});

if(cursor != null && cursor.moveToFirst()) {

int _id = cursor.getInt(0);

String name = cursor.getString(1);

int age = cursor.getInt(2);

cursor.close();

db.close();

return new Person(_id, name, age);

}

db.close();

}

return null;

}

}

6 第二种操作数据库的方式

package com.itheima28.sqlitedemo.dao;

import java.util.ArrayList;

import java.util.List;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.util.Log;

import com.itheima28.sqlitedemo.db.PersonSQLiteOpenHelper;

import com.itheima28.sqlitedemo.entities.Person;

/**

* 不使用SQL的方式进行操作

* @author toto

*/

public class PersonDao2 {

private static final String TAG = "PersonDao2";

//数据库的帮助类对象

private PersonSQLiteOpenHelper mOpenHelper;

public PersonDao2(Context context) {

mOpenHelper = new PersonSQLiteOpenHelper(context);

}

/**

* 添加到person表一条数据

* @param person

*/

public void insert(Person person) {

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

//如果数据库打开,执行添加的操作

if (db.isOpen()) {

ContentValues values = new ContentValues();

//key作为要存储的列名,value对象列的值

values.put("name", person.getName());

values.put("age", person.getAge());

long id = db.insert("person", "name", values);

Log.i(TAG, "id:" + id);

//数据库关闭

db.close();

}

}

/**

* 根据id删除记录

*/

public void delete(int id) {

//获得可写的数据库对象

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

//如果数据库打开,执行添加的操作

if (db.isOpen()) {

String whereClause = "_id = ?";

String[] whereArgs = {id + ""};

int count = db.delete("person", whereClause, whereArgs);

Log.i(TAG,"删除了:" + count + "行");

//数据库关闭

db.close();

}

}

/**

* 根据id找到记录,并且修改姓名

* @param id

* @param name

*/

public void update(int id,String name) {

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

//如果数据库打开,执行添加的操作

if (db.isOpen()) {

ContentValues values = new ContentValues();

values.put("name", name);

int count = db.update("person", values, "_id = ?", new String[]{id + ""});

Log.i(TAG, "修改了:" + count + "行");

//数据库关闭

db.close();

}

}

/**

* 查询所有的结果集

* @return

*/

public List<Person> queryAll() {

// 获得一个只读的数据库对象

SQLiteDatabase db = mOpenHelper.getReadableDatabase();

if(db.isOpen()) {

// 需要的列

String[] columns = {"_id", "name", "age"};

// 选择条件, 给null查询所有

String selection = null;

// 选择条件的参数, 会把选择条件中的? 替换成数据中的值

String[] selectionArgs = null;

// 分组语句  group by name

String groupBy = null;

// 过滤语句

String having = null;

// 排序

String orderBy = null;

Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);

int id;

String name;

int age;

if(cursor != null && cursor.getCount() > 0) {

List<Person> personList = new ArrayList<Person>();

while(cursor.moveToNext()) {

// 向下移一位, 知道最后一位, 不可以往下移动了,停止.

id = cursor.getInt(0);

name = cursor.getString(1);

age = cursor.getInt(2);

personList.add(new Person(id, name, age));

}

cursor.close();

db.close();

return personList;

}

db.close();

}

return null;

}

/**

* 根据id查询人

* @param id

* @return

*/

public Person queryItem(int id) {

// 获得一个只读的数据库对象

SQLiteDatabase db = mOpenHelper.getReadableDatabase();

if(db.isOpen()) {

// 需要的列

String[] columns = {"_id", "name", "age"};

// 选择条件, 给null查询所有

String selection = "_id = ?";

// 选择条件的参数, 会把选择条件中的? 替换成数据中的值

String[] selectionArgs = {id + ""};

// 分组语句  group by name

String groupBy = null;

// 过滤语句

String having = null;

// 排序

String orderBy = null;

Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);

// cursor对且象不为null, 并可以移动到第一行

if(cursor != null && cursor.moveToFirst()) {

int _id = cursor.getInt(0);

String name = cursor.getString(1);

int age = cursor.getInt(2);

cursor.close();

db.close();

return new Person(_id, name, age);

}

db.close();

}

return null;

}

}

7 TestCase才是personDao,注意项目中是通过单元测试来添加数据的

package com.itheima28.sqlitedemo.test;

import java.util.List;

import android.database.sqlite.SQLiteDatabase;

import android.test.AndroidTestCase;

import android.util.Log;

import com.itheima28.sqlitedemo.dao.PersonDao;

import com.itheima28.sqlitedemo.db.PersonSQLiteOpenHelper;

import com.itheima28.sqlitedemo.entities.Person;

public class TestCase extends AndroidTestCase{

private static final String TAG = "TestCase";

public void test() {

//数据库什么时候创建

PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());

//第一次连接数据库时创建数据库文件  .onCreate会被调用

openHelper.getReadableDatabase();

}

/**

* 向数据库中插入一条数据

*/

public void testInsert() {

PersonDao dao = new PersonDao(getContext());

dao.insert(new Person(0,"田七",28));

}

/**

* 删除数据

*/

public void testDelete() {

PersonDao dao = new PersonDao(getContext());

dao.delete(1);

}

/**

* 更新数据

*/

public void testUpdate() {

PersonDao dao = new PersonDao(getContext());

dao.update(3, "李四");

}

/**

* 查询所有的列表信息

*/

public void testQueryAll() {

PersonDao dao = new PersonDao(getContext());

List<Person> personList = dao.queryAll();

for (Person person : personList) {

Log.i(TAG, person.toString());

}

}

/**

* 查询条项

*/

public void testQueryItem() {

PersonDao dao = new PersonDao(getContext());

Person person = dao.queryItem(4);

Log.i(TAG, person.toString());

}

/**

* 事务操作

*/

public void testTransaction() {

PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());

SQLiteDatabase db = openHelper.getWritableDatabase();

if (db.isOpen()) {

try {

//开启事务

db.beginTransaction();

//1.从张三账户中扣1000块钱

db.execSQL("update person set balance = balance - 1000 where name = 'zhangsan';");

//ATM机,挂掉了

//int result = 10 / 0;

//2.向李四账户中加1000块钱

db.execSQL("update person set balance = balance + 1000 where name = 'lisi';");

//标记事务成功

db.setTransactionSuccessful();

} finally {

//停止事务

db.endTransaction();

}

db.close();

}

}

}

数据库截图如下:

8 TestCase2测试第二种方式操作数据库

package com.itheima28.sqlitedemo.test;

import java.util.List;

import com.itheima28.sqlitedemo.dao.PersonDao2;

import com.itheima28.sqlitedemo.db.PersonSQLiteOpenHelper;

import com.itheima28.sqlitedemo.entities.Person;

import android.test.AndroidTestCase;

import android.util.Log;

public class TestCase2 extends AndroidTestCase {

private static final String TAG = "TestCase";

public void test() {

//数据库什么时候创建

PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());

//第一次连接数据库时创建数据库文件   onCreate会被调用

openHelper.getReadableDatabase();

}

/**

* 添加

*/

public void testInsert() {

PersonDao2 dao = new PersonDao2(getContext());

dao.insert(new Person(0, "zhouqi", 88));

}

public void testDelete() {

PersonDao2 dao = new PersonDao2(getContext());

dao.delete(8);

}

public void testUpdate() {

PersonDao2 dao = new PersonDao2(getContext());

dao.update(3, "fengjie");

}

public void testQueryAll() {

PersonDao2 dao = new PersonDao2(getContext());

List<Person> personList = dao.queryAll();

for (Person person : personList) {

Log.i(TAG, person.toString());

}

}

public void testQueryItem() {

PersonDao2 dao = new PersonDao2(getContext());

Person person = dao.queryItem(4);

Log.i(TAG, person.toString());

}

}

9 MainActivity的代码如下:

package com.itheima28.sqlitedemo;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ListView;

import android.widget.TextView;

import com.itheima28.sqlitedemo.dao.PersonDao;

import com.itheima28.sqlitedemo.entities.Person;

public class MainActivity extends Activity {

private List<Person> personList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ListView mListView = (ListView) findViewById(R.id.listview);

PersonDao dao = new PersonDao(this);

personList = dao.queryAll();

// 把view层对象ListView和控制器BaseAdapter关联起来

mListView.setAdapter(new MyAdapter());

}

/**

* @author andong

* 数据适配器

*/

class MyAdapter extends BaseAdapter {

private static final String TAG = "MyAdapter";

/**

* 定义ListView的数据的长度

*/

@Override

public int getCount() {

return personList.size();

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return null;

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return 0;

}

/**

* 此方法返回的是ListView的列表中某一行的View对象

* position 当前返回的view的索引位置

* convertView 缓存对象

* parent 就是ListView对象

*/

@Override

public View getView(int position, View convertView, ViewGroup parent) {

TextView tv = null;

if(convertView != null) {       // 判断缓存对象是否为null,  不为null时已经缓存了对象

Log.i(TAG, "getView: 复用缓存" + position);

tv = (TextView) convertView;

} else {   // 等于null, 说明第一次显示, 新创建

Log.i(TAG, "getView: 新建" + position);

tv = new TextView(MainActivity.this);

}

tv.setTextSize(25);

Person person = personList.get(position); // 获得指定位置的数据, 进行对TextView的绑定

tv.setText(person.toString());

return tv;

}

}

}

10 MainActivity2的代码如下:

package com.itheima28.sqlitedemo;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ListView;

import android.widget.TextView;

import com.itheima28.sqlitedemo.dao.PersonDao;

import com.itheima28.sqlitedemo.entities.Person;

public class MainActivity2 extends Activity {

private List<Person> personList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ListView mListView = (ListView) findViewById(R.id.listview);

PersonDao dao = new PersonDao(this);

personList = dao.queryAll();

// 把view层对象ListView和控制器BaseAdapter关联起来

mListView.setAdapter(new MyAdapter());

}

/**

* @author andong

* 数据适配器

*/

class MyAdapter extends BaseAdapter {

private static final String TAG = "MyAdapter";

/**

* 定义ListView的数据的长度

*/

@Override

public int getCount() {

return personList.size();

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return null;

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return 0;

}

/**

* 此方法返回的是ListView的列表中某一行的View对象

* position 当前返回的view的索引位置

* convertView 缓存对象

* parent 就是ListView对象

*/

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view = null;

if(convertView == null) {

// 布局填充器对象, 用于把xml布局转换成view对象

LayoutInflater inflater = MainActivity2.this.getLayoutInflater();

view = inflater.inflate(R.layout.listview_item, null);

} else {

view = convertView;

}

// 给view中的姓名和年龄赋值

TextView tvName = (TextView) view.findViewById(R.id.tv_listview_item_name);

TextView tvAge = (TextView) view.findViewById(R.id.tv_listview_item_age);

Person person = personList.get(position);

tvName.setText("姓名: " + person.getName());

tvAge.setText("年龄: " + person.getAge());

return view;

}

}

}

07_Android操作sqllite数据库(包括2中方式操作数据的方式),单元测试,BaseAdapter的使用,自定义view的综合使用案例的更多相关文章

  1. JDBC操作Oracle数据库——实际操作过程中的小总结

    1.对数据库中,表的每一行数据记录的增删改查 增:insert into 表名 values() 删:delete 表名 where 条件(id=?) 改:update 表名 set 列名=? whe ...

  2. Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...

  3. 【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布 ...

  4. Android中API建议的方式实现SQLite数据库的增、删、改、查的操作

    package com.examp.use_SQLite.dao; import java.util.ArrayList; import java.util.List; import android. ...

  5. UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库

    在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...

  6. 不使用spring的情况下原生java代码两种方式操作mongodb数据库

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  7. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  8. C# Asp.net中简单操作MongoDB数据库(一)

    需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...

  9. Android中操作SQLite数据库

    我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些 ...

随机推荐

  1. JAVA反射之Class类的练习

    package zhang; /** * JAVA反射之CLass类的练习 * * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? * 类的类型是CLass * * */ class Tes ...

  2. C++并发高级接口:std::async和std::future

    std::async和std::future std::async创建一个后台线程执行传递的任务,这个任务只要是callable object均可,然后返回一个std::future.future储存 ...

  3. delphi 面向对象实用技能教学一(递归)

    本例使用类与TList相结合,用简洁的方法,实现了一个 HTML 解析与格式化功能.所用到的知识点如下:1.类的提前申明2.TList用法3.String的指针操作4.单例设计5.递归用法 编程是综合 ...

  4. 02_Action

    1.action VS Action action:代表一个Struts2的请求 Action:能够处理action请求的类 属性名必须与JavaBeans属性名相同 属性的类型可以是任意类型,从字符 ...

  5. ACM Ignatius and the Princess II

    Problem Description Now our hero finds the door to the BEelzebub feng5166. He opens the door and fin ...

  6. 利用github webhook 结合openresty自动更新静态博客

    使用hexo在github pages上弄了一个静态博客,后来觉得访问有点慢,于是放到自己vps上. 对于静态博客的部署非常简单,本来就是html,js,css等静态文件,只要nginx上配置下目录就 ...

  7. ubuntu重装指定版本的mysql

    查看错误log cat /var/log/mysql/error.log 首先彻底删除mysql,比如版本5.5 apt-get autoremove --purge mysql-server-5.5 ...

  8. Linux 性能监测:Memory

    这里的讲到的 "内存" 包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为 ...

  9. 初识Spark2.0之Spark SQL

    内存计算平台spark在今年6月份的时候正式发布了spark2.0,相比上一版本的spark1.6版本,在内存优化,数据组织,流计算等方面都做出了较大的改变,同时更加注重基于DataFrame数据组织 ...

  10. springMVC源码分析--AbstractHandlerMapping(二)

    上一篇博客springMVC源码分析--HandlerMapping(一)中我们简单的介绍了HandlerMapping,接下来我们介绍一下它的抽象实现类AbstractHandlerMapping