当前位置:   article > 正文

Android SQLlite数据库简单总结

android sql

一、

DataBaseHelper.java文件,继承SQLiteOpenHelper

  1. package com.chy.sqlite.DataBase;
  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteOpenHelper;
  5. import androidx.annotation.Nullable;
  6. public class DataBaseHelper extends SQLiteOpenHelper {
  7. private static final int DATABASE_VERSION = 1; //数据库版本号
  8. /**
  9. * 构造函数
  10. * 在SQLiteOpenHelper的子类中,必须有该构造函数
  11. */
  12. public DataBaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory,
  13. int version) {
  14. // 参数说明
  15. // context:上下文对象
  16. // name:数据库名称
  17. // factory:一个可选的游标工厂(通常是 Null
  18. // version:当前数据库的版本,值必须是整数并且是递增的状态
  19. // 必须通过super调用父类的构造函数
  20. super(context, name, factory, version);
  21. }
  22. /**
  23. * 自定义构造函数
  24. * */
  25. public DataBaseHelper(@Nullable Context context, @Nullable String name) {
  26. super(context, name+".db", null, DATABASE_VERSION);
  27. }
  28. /**
  29. * 复写onCreate()
  30. * 调用时刻:当数据库第1次创建时调用
  31. * 作用:创建数据库 表 & 初始化数据
  32. * SQLite数据库创建支持的数据类型: 整型数据、字符串类型、日期类型、二进制
  33. */
  34. @Override
  35. public void onCreate(SQLiteDatabase db) {
  36. // 创建数据库1张表
  37. // 通过execSQL()执行SQL语句(此处创建了1个名为person的表)
  38. String sql = "create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";
  39. db.execSQL(sql);
  40. // 注:数据库实际上是没被创建 / 打开的(因该方法还没调用)
  41. // 直到getWritableDatabase() / getReadableDatabase() 第一次被调用时才会进行创建 / 打开
  42. }
  43. /**
  44. * 复写onUpgrade()
  45. * 调用时刻:当数据库升级时则自动调用(即 数据库版本 发生变化时)
  46. * 作用:更新数据库表结构
  47. * 注:创建SQLiteOpenHelper子类对象时,必须传入一个version参数,
  48. * 该参数 = 当前数据库版本, 若该版本高于之前版本, 就调用onUpgrade()
  49. */
  50. @Override
  51. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  52. // 参数说明:
  53. // db : 数据库
  54. // oldVersion : 旧版本数据库
  55. // newVersion : 新版本数据库
  56. // 使用 SQL的ALTER语句
  57. // 向person表中新增 sex 属性
  58. String sql = "alter table person add sex varchar(8)";
  59. db.execSQL(sql);
  60. }
  61. }

二、

DataBaseManager.java

  1. package com.chy.sqlite.DataBase;
  2. import android.content.ContentValues;
  3. import android.content.Context;
  4. import android.database.Cursor;
  5. import android.database.sqlite.SQLiteDatabase;
  6. import android.util.Log;
  7. import java.util.ArrayList;
  8. import java.util.HashMap;
  9. public class DataBaseManager {
  10. DataBaseHelper dbHelper;
  11. SQLiteDatabase sqLiteDatabase;
  12. //单例模式 返回DBManager
  13. private static DataBaseManager INSTANCE = null;
  14. public static synchronized DataBaseManager getInstance(Context context,String DBName){
  15. if (INSTANCE == null){
  16. INSTANCE = new DataBaseManager(context,DBName);
  17. }
  18. return INSTANCE;
  19. }
  20. /**
  21. * Context 上下文
  22. * DBName 数据库名
  23. * */
  24. private DataBaseManager(Context context,String DBName){
  25. dbHelper = new DataBaseHelper(context, DBName);
  26. // 创建 or 打开 可读的数据库(通过 返回的SQLiteDatabase对象 进行操作)
  27. //sqLiteDatabase = dbHelper.getReadableDatabase();// 只有查找(读取)权限
  28. // 创建 or 打开 可读/写的数据库(通过 返回的SQLiteDatabase对象 进行操作)
  29. sqLiteDatabase = dbHelper.getWritableDatabase();// 增、删、改、查权限
  30. }
  31. /**
  32. * 【插入数据】
  33. * */
  34. public void insertDataToDB(){
  35. // 创建ContentValues对象
  36. ContentValues values = new ContentValues();
  37. /** 向该对象中插入键值对
  38. * 其中,key = 列名,value = 插入的值
  39. * 注:CContentValues 和HashTable类似都是一种存储的机制
  40. * 但是两者最大的区别就在于,
  41. * contenvalues只能存储基本类型的数据,
  42. *string,int之类的,不能存储对象这种东西,而HashTable却可以存储对象*/
  43. values.put("name", "测试");
  44. values.put("address", "长春");
  45. // 参数1:要操作的表名称
  46. // 参数2:SQl不允许一个空列,若ContentValues是空,那么这一列被明确的指明为NULL
  47. // 参数3:ContentValues对象
  48. // sqLiteDatabase.insert("person", null, values);
  49. // 注:也可采用SQL语句插入
  50. String sql = "insert into person (name,address) values ('test','cc')";
  51. sqLiteDatabase.execSQL(sql);
  52. }
  53. /**
  54. * 【删除数据】
  55. *
  56. * */
  57. public void deleateToDB(){
  58. // 参数1:表名(String)
  59. // 参数2:WHERE表达式(String),需删除数据的行; 若该参数为 null, 就会删除所有行;?号是占位符
  60. // 参数3:WHERE选择语句的参数(String[]), 逐个替换 WHERE表达式中 的“?”占位符;
  61. // 删除 id = 1的数据
  62. // sqLiteDatabase.delete("person", "id=?", new String[]{"1"});
  63. // 注:也可采用SQL语句修改
  64. String sql = "delete from person where id='4'";
  65. sqLiteDatabase.execSQL(sql);
  66. }
  67. /**
  68. * 【更新数据】
  69. * */
  70. public void updataToDB(){
  71. // 创建一个ContentValues对象
  72. ContentValues values = new ContentValues();
  73. values.put("name", "lisi");
  74. // 参数1:表名(String)
  75. // 参数2:需修改的ContentValues对象
  76. // 参数3:WHERE表达式(String),需数据更新的行; 若该参数为 null, 就会修改所有行;?号是占位符
  77. // 参数4:WHERE选择语句的参数(String[]), 逐个替换 WHERE表达式中 的“?”占位符;
  78. //调用update方法修改数据库:将id=1 修改成 name = zhangsan
  79. // sqLiteDatabase.update("person", values, "id=?", new String[] { "2" });
  80. // 注:也可采用SQL语句修改
  81. String sql = "update person set name = 'lisi' where id='5'";
  82. sqLiteDatabase.execSQL(sql);
  83. }
  84. /**
  85. * 【查询数据】
  86. * */
  87. public void queryDataFromDB(){
  88. ArrayList<HashMap<String ,String>> list = new ArrayList<>();
  89. // 参数1:(String)表名
  90. // 参数2:(String[])要查询的列名
  91. // 参数3:(String)查询条件
  92. // 参数4:(String[])查询条件的参数
  93. // 参数5:(String)对查询的结果进行分组
  94. // 参数6:(String)对分组的结果进行限制
  95. // 参数7:(String)对查询的结果进行排序
  96. // 联合-模糊查询
  97. //String sql = "select ej.name,ej.jibie,ej.zw_name,ej.fuji from zy left join ej on zy.fenlei = ej.name where neirong like ? group by fenlei";
  98. //Cursor cursor = sqLiteDatabase.rawQuery(sql,new String[]{"%"+qwhere+"%"});
  99. Cursor cursor = sqLiteDatabase.query("person", new String[] {"id", "name", "address"} , "id = ?", new String[]{"2"}, null, null, null);
  100. int cur_len = cursor.getColumnCount();//获取数据所有列数
  101. while (cursor.moveToNext()){
  102. HashMap<String , String> map = new HashMap<>();
  103. for (int i=0; i<cur_len; i++){
  104. String clos_name = cursor.getColumnName(i);//从给定的索引i返回列名
  105. String clos_value = cursor.getString(cursor.getColumnIndex(clos_name));//返回指定的名称,没有就返回-1
  106. if(clos_value==null){
  107. clos_value = "";
  108. }
  109. Log.i("TAG:","while循环下面的for循环拿到的数据clos_value为:"
  110. + cursor.getString(cursor.getColumnIndex(clos_name)));
  111. map.put(clos_name , clos_value);
  112. }
  113. list.add(map);
  114. }
  115. }
  116. /**
  117. * 【查询单条数据】
  118. * */
  119. public HashMap<String , String> querySingleDataFromDB(){
  120. String[] queryWhere = new String[]{"1"};
  121. String sql = "select * from person where infoId = ?";
  122. Cursor cursor = sqLiteDatabase.rawQuery(sql, queryWhere);
  123. int cur_len = cursor.getColumnCount();//获取数据所有列数
  124. HashMap<String , String> map = new HashMap<>();
  125. while (cursor.moveToNext()) {
  126. for (int i = 0; i < cur_len; i++) {
  127. String clos_name = cursor.getColumnName(i);//从给定的索引i返回列名
  128. String clos_value = cursor.getString(cursor.getColumnIndex(clos_name));//返回指定的名称,没有就返回-1
  129. if (clos_value == null) {
  130. clos_value = "";
  131. }
  132. Log.i("TAG:","while循环下面的for循环拿到的数据clos_value为:"
  133. + cursor.getString(cursor.getColumnIndex(clos_name)));
  134. map.put(clos_name,clos_value);
  135. }
  136. }
  137. return map;
  138. }
  139. /**
  140. * 【查询数据条目数】
  141. * */
  142. public int getDBCount(){
  143. // String sql = "select count(*) from person";
  144. String sql = "select count(fid) from person";
  145. Cursor cursor = sqLiteDatabase.rawQuery(sql,null);
  146. cursor.moveToFirst();
  147. int count = cursor.getInt(0);
  148. cursor.close();
  149. return count;
  150. }
  151. /**
  152. * 【关闭数据库】
  153. * */
  154. public void closeDB(){
  155. /**注:完成数据库操作后,记得调用close()关闭数据库,从而释放数据库的连接*/
  156. sqLiteDatabase.close();
  157. }
  158. /**
  159. * 【自增列清零】
  160. * */
  161. private void clearSqlite_sequenceFromDB(){
  162. // 将自增id列清零,重新计算
  163. String sql = "update sqlite_sequence set seq=0 where name = 'person'";
  164. sqLiteDatabase.execSQL(sql);
  165. }
  166. }

三、使用方法:

  1. package com.chy.sqlite;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import com.chy.sqlite.DataBase.DataBaseManager;
  7. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  8. private Button addBtn;
  9. private Button delBtn;
  10. private Button updataBtn;
  11. private Button queryBtn;
  12. private DataBaseManager dataBaseManager;
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. // 获取数据库(没有则创建)
  18. dataBaseManager = DataBaseManager.getInstance(this,"test");
  19. // 新增数据
  20. addBtn = findViewById(R.id.addBtn);
  21. addBtn.setOnClickListener(this);
  22. // 删除数据
  23. delBtn = findViewById(R.id.delBtn);
  24. delBtn.setOnClickListener(this);
  25. // 更新数据
  26. updataBtn = findViewById(R.id.updataBtn);
  27. updataBtn.setOnClickListener(this);
  28. // 查找数据
  29. queryBtn = findViewById(R.id.queryBtn);
  30. queryBtn.setOnClickListener(this);
  31. }
  32. @Override
  33. public void onClick(View v) {
  34. switch (v.getId()){
  35. case R.id.addBtn:
  36. dataBaseManager.insertDataToDB();
  37. break;
  38. case R.id.delBtn:
  39. dataBaseManager.deleateToDB();
  40. break;
  41. case R.id.updataBtn:
  42. dataBaseManager.updataToDB();
  43. break;
  44. case R.id.queryBtn:
  45. dataBaseManager.queryDataFromDB();
  46. break;
  47. }
  48. }
  49. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号