当前位置:   article > 正文

数据库操作,BaseAdapter适配器

baseadapter mysql

listView设置适配器BaseAdapter

通过执行sql语句操作数据库

通过api方式操作数据库

testTransaction事务回滚

listView设置适配器BaseAdapter

  1. package com.heima.sqlitedemo;
  2. import java.util.List;
  3. import com.heima.dao.PersonDao;
  4. import com.heima.entites.Person;
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.BaseAdapter;
  11. import android.widget.ListView;
  12. import android.widget.TextView;
  13. public class Sqlite_DBActivity extends Activity {
  14. private List<Person> personList;
  15. /** Called when the activity is first created. */
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main1);
  20. ListView listView = (ListView) findViewById(R.id.listview);
  21. PersonDao dao = new PersonDao(this);
  22. personList = dao.getAll();
  23. //把view层对象ListVew和控制器BaseAdapter关联起来
  24. listView.setAdapter(new MyAdapter());
  25. }
  26. //关联起来之后就会调用适配器的四个方法 主要是getCount和getView
  27. class MyAdapter extends BaseAdapter{
  28. //定义ListView的数据的长度
  29. @Override
  30. public int getCount() {
  31. // TODO Auto-generated method stub
  32. return personList.size();
  33. }
  34. @Override
  35. public Object getItem(int position) {
  36. // TODO Auto-generated method stub
  37. return null;
  38. }
  39. @Override
  40. public long getItemId(int position) {
  41. // TODO Auto-generated method stub
  42. return 0;
  43. }
  44. //此方法返回的是ListView列表中某一行的View对象 ListView就是一行一行的TextView
  45. //position 当前返回的view的索引位置
  46. //converView缓存对象 例如往下拉时可以把上面的view对象缓存起来
  47. //parent就是ListView对象 一般用不到
  48. @Override
  49. public View getView(int position, View convertView, ViewGroup parent) {
  50. // TODO Auto-generated method stub
  51. //这里的上下文是MyAdapter,所以不能直接this,this是Sqlite_DBActivity
  52. TextView tv = null;
  53. Log.i("adapter", "textview: " + position);
  54. if(convertView != null){ //判断缓存对象是否为null,不为空时已经缓存了对象
  55. tv = (TextView) convertView;
  56. }else{ //等于null说明第一次显示,则TextView都是新创建的
  57. tv = new TextView(Sqlite_DBActivity.this);
  58. }
  59. //不使用缓存的话,就是每一次都new一个TextView 目的是只有几个TextView不断复用
  60. tv.setTextSize(16);
  61. Person person = personList.get(position);
  62. tv.setText(person.toString());
  63. return tv;
  64. }
  65. }
  66. }
建立数据库
  1. package com.heima.sqlitedemo.db;
  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteDatabase.CursorFactory;
  5. import android.database.sqlite.SQLiteOpenHelper;
  6. import android.util.Log;
  7. //继承的是数据库帮助类,用于创建和管理数据库的
  8. public class personSQLITEOpenHelper extends SQLiteOpenHelper {
  9. //只剩下Context 其他都删掉
  10. public personSQLITEOpenHelper(Context context) {
  11. //第一参数 上下文
  12. //第二参数 数据库名字
  13. //第三参数 游标集 可以自定义,默认使用已有的。。一般都是默认
  14. //第四参数 版本号 至少从1开始
  15. super(context, "heima_Db", null, 2);
  16. // TODO Auto-generated constructor stub
  17. }
  18. //数据库第一次创建时会调用这个方法
  19. //一般用来初始化一些表
  20. @Override
  21. public void onCreate(SQLiteDatabase db) {
  22. // TODO Auto-generated method stub
  23. //创建表
  24. String sql = "create table person(_id integer primary key,name varchar(20),age integer);";
  25. //执行sql语句
  26. db.execSQL(sql);
  27. }
  28. //数据库的版本号更新时会调这个方法
  29. //更新数据库的内容 对表进行增删改查
  30. //一运行就更新 上面构造函数的版本号必须修改
  31. @Override
  32. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  33. // TODO Auto-generated method stub
  34. if(oldVersion == 1 && newVersion == 2){ //在person表中添加一个余额列balance
  35. Log.i("alter", "alter");
  36. db.execSQL("alter table person add balance integer;");
  37. }
  38. }
  39. }
通过执行sql语句操作数据库
  1. package com.heima.dao;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.Context;
  5. import android.database.Cursor;
  6. import android.database.sqlite.SQLiteDatabase;
  7. import com.heima.entites.Person;
  8. import com.heima.sqlitedemo.db.personSQLITEOpenHelper;
  9. public class PersonDao {
  10. private personSQLITEOpenHelper mOpenHelper;
  11. public PersonDao(Context context){
  12. mOpenHelper = new personSQLITEOpenHelper(context);
  13. }
  14. //添加person数据
  15. public void insert(Person person){
  16. //获取只写的数据库
  17. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  18. //判断数据库是否打开
  19. if(db.isOpen()){//如果打开就执行添加的操作
  20. //执行添加操作
  21. //拼接字符串
  22. // db.execSQL("insert into person(name, age) values('lisi', 19)");
  23. //可以传递参数的方式 这样还可以防止sql注入
  24. db.execSQL("insert into person(name, age) values(?,?)", new Object[]{person.getName(),person.getAge()});
  25. //打开就要记得关掉
  26. db.close();
  27. }
  28. }
  29. public List<Person> getAll(){
  30. SQLiteDatabase db = mOpenHelper.getReadableDatabase();
  31. List<Person> personList = new ArrayList<Person>();
  32. if(db.isOpen()){
  33. Cursor cursor = db.rawQuery("select _id, name, age from person", null);
  34. if(cursor!=null && cursor.getCount()>0){
  35. int id;
  36. String name;
  37. int age;
  38. while(cursor.moveToNext()){
  39. id = cursor.getInt(0);
  40. name = cursor.getString(1);
  41. age = cursor.getInt(2);
  42. personList.add(new Person(id,name,age));
  43. }
  44. }
  45. cursor.close();
  46. db.close();
  47. return personList;
  48. }
  49. return null;
  50. }
  51. }
通过api方式操作数据库
  1. package com.heima.dao;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.ContentValues;
  5. import android.content.Context;
  6. import android.database.Cursor;
  7. import android.database.sqlite.SQLiteDatabase;
  8. import android.util.Log;
  9. import com.heima.entites.Person;
  10. import com.heima.sqlitedemo.db.personSQLITEOpenHelper;
  11. public class PersonDao2 {
  12. private personSQLITEOpenHelper mOpenHelper;
  13. public PersonDao2(Context context){
  14. mOpenHelper = new personSQLITEOpenHelper(context);
  15. }
  16. //添加person数据
  17. public void insert(Person person){
  18. //获取只写的数据库
  19. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  20. //判断数据库是否打开
  21. if(db.isOpen()){//如果打开就执行添加的操作
  22. ContentValues values = new ContentValues();
  23. values.put("name", person.getName());
  24. values.put("age", person.getAge());
  25. //id是影响行 也就是插在那一行的那个主键
  26. //第二参数是当values为空的时候用来说明那个列的字段是null
  27. //db.insert("person","name",null);
  28. long id = db.insert("person", null, values);
  29. Log.i("insert", id+"");
  30. db.close();
  31. }
  32. }
  33. public void delete(int id){
  34. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  35. if(db.isOpen()){
  36. String whereClause = "id = ?"; //把where等关键字都去掉就是了
  37. String[] whereArgs = {id+""};
  38. int count = db.delete("person", whereClause, whereArgs);
  39. Log.i("delete", count+"");
  40. db.close();
  41. }
  42. }
  43. public void update(int id,String name){
  44. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  45. if(db.isOpen()){
  46. ContentValues values = new ContentValues();
  47. values.put("name", name);
  48. String whereClause = "id = ?";
  49. String[] whereArgs = {id+""};//一定要String类型?
  50. int count = db.update("person", values, whereClause, whereArgs);
  51. Log.i("update", count+"");
  52. db.close();
  53. }
  54. }
  55. public List<Person> queryAll(){
  56. SQLiteDatabase db = mOpenHelper.getReadableDatabase();
  57. if(db.isOpen()){
  58. //罗列出要选出的字段
  59. String[] columns = {"_id","name","age"};
  60. String selection = null; //选择查询条件 null为查询所有
  61. String[] selectionArgs = null; //选择条件参数 替代?的值
  62. String groupBy = null; //分组语句 group by name
  63. String having = null; //过滤语句
  64. String orderBy = null; //排序语句
  65. Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
  66. List<Person> personList = new ArrayList<Person>();
  67. Person person = null;
  68. if(cursor!=null && cursor.getCount()>0){
  69. int id;
  70. String name;
  71. int age;
  72. while(cursor.moveToNext()){
  73. id = cursor.getInt(0);
  74. name = cursor.getString(1);
  75. age = cursor.getInt(2);
  76. person = new Person(id,name,age);
  77. personList.add(person);
  78. }
  79. }
  80. //cursor用完之后一定要close,这是结果集,如果没关闭会一直存在,时间久了就是内存溢出
  81. cursor.close();
  82. db.close();
  83. return personList;
  84. }
  85. return null;
  86. }
  87. }
model类
  1. package com.heima.entites;
  2. public class Person {
  3. private int id;
  4. private String name;
  5. private int age;
  6. public Person() {
  7. super();
  8. // TODO Auto-generated constructor stub
  9. }
  10. public Person(int id, String name, int age) {
  11. super();
  12. this.id = id;
  13. this.name = name;
  14. this.age = age;
  15. }
  16. public int getId() {
  17. return id;
  18. }
  19. public void setId(int id) {
  20. this.id = id;
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. public int getAge() {
  29. return age;
  30. }
  31. public void setAge(int age) {
  32. this.age = age;
  33. }
  34. @Override
  35. public String toString() {
  36. return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
  37. }
  38. }

通过test测试数据库是否创建成功

    需要配置清单加上配置

testTransaction测试事务回滚

  1. package com.heima.test;
  2. import java.util.List;
  3. import com.heima.dao.PersonDao;
  4. import com.heima.dao.PersonDao2;
  5. import com.heima.entites.Person;
  6. import com.heima.sqlitedemo.db.personSQLITEOpenHelper;
  7. import android.database.sqlite.SQLiteDatabase;
  8. import android.provider.OpenableColumns;
  9. import android.test.AndroidTestCase;
  10. import android.util.Log;
  11. public class test extends AndroidTestCase {
  12. public void test(){
  13. //什么时候创建
  14. personSQLITEOpenHelper openHelper = new personSQLITEOpenHelper(getContext());//android提供的上下文
  15. //这里开始创建数据库 在data/data下多了一个database的文件夹 onCreate会被调用
  16. openHelper.getReadableDatabase();
  17. }
  18. public void testInsert(){
  19. PersonDao dao = new PersonDao(getContext());
  20. dao.insert(new Person(0,"zhangsan",23));
  21. dao.insert(new Person(0,"lisi",23));
  22. dao.insert(new Person(0,"wangwu",23));
  23. }
  24. public void testGetAll(){
  25. PersonDao dao = new PersonDao(getContext());
  26. List<Person> personList = dao.getAll();
  27. for(Person person : personList){
  28. Log.i("test", person.getName());
  29. }
  30. }
  31. public void testQueryAll(){
  32. PersonDao2 dao = new PersonDao2(getContext());
  33. List<Person> personList = dao.queryAll();
  34. for(Person person : personList){
  35. Log.i("test", person.getName());
  36. }
  37. }
  38. public void testTransaction(){
  39. personSQLITEOpenHelper openHelper = new personSQLITEOpenHelper(getContext());
  40. SQLiteDatabase db = openHelper.getWritableDatabase();
  41. if(db.isOpen()){
  42. try {
  43. //开始事务
  44. db.beginTransaction();
  45. db.execSQL("update person set balance = balance - 1000 where name = 'zhangsan';");
  46. db.execSQL("update person set balance = balance + 1000 where name = 'lisi';");
  47. db.close();
  48. //标记事务成功 可以写多次,相当于回滚点
  49. db.setTransactionSuccessful();
  50. } catch (Exception e) {
  51. // TODO: handle exception
  52. //停止事务
  53. db.endTransaction();
  54. //不需要回滚,因为如果没有执行到事务成功的标志,那么就会自动回滚
  55. }
  56. }
  57. }
  58. }

转载于:https://my.oschina.net/u/2356176/blog/420206

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/933819
推荐阅读
相关标签
  

闽ICP备14008679号