热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLite(一)基本操作

SQLite的基本操作SQLite数据库主要依靠SQLiteOpenHelper类(数据库帮助类)来实现数据库,数据表的创建,

SQLite的基本操作

 

SQLite数据库主要依靠SQLiteOpenHelper类(数据库帮助类)来实现数据库,数据表的创建,还有使用SQLiteDatabase类(数据库类)来对数据库进行操作。

第一步:创建数据库和数据表

示例代码:为了方便以后的维护,所有我创建了一个类Constant(常量类)来保存常量,这样以后修改数据库的变量名和表明就不需要去程序里面一个个找了

1 public class Constant {
2 public static String DB_NAME = "Text";
3
4 public static String TABLE_NAME = "person";
5 public static String ID = "_id";
6 public static String NAME = "name";
7 public static String AGE = "age";
8 }

 

1 public class MySQLiteOpenHelper extends SQLiteOpenHelper {
2
3 /*
4 * context: 上下文对象
5 * name : 数据库名字
6 * factory: 游标工厂,游标Cursor相当于一个数据表,用来保存数据
7 * version: 数据库版本 >=1
8 */
9 public MySQLiteOpenHelper(Context context, String name,
10 CursorFactory factory, int version) {
11 super(context, name, factory, version);
12 }
13 //这个构造方法是为了简便操作
14 public MySQLiteOpenHelper(Context context){
15 super(context, Constant.DB_NAME, null, 1);
16 }
17
18 //数据库创建时回调
19 public void onCreate(SQLiteDatabase arg0) {
20 String SQL = "create table "+Constant.TABLE_NAME+"("+Constant.ID+" int(4) not null primary key,"+Constant.AGE+" int(2) not null,"+Constant.NAME+" char(20))";
21 arg0.execSQL(SQL);
22 }
23
24 //数据库更新时回调
25 public void onUpgrade(SQLiteDatabase arg0, int oldVersion, int newVersion) {
26 }
27 //数据库打开时回调,一般不重写
28 public void onOpen(SQLiteDatabase arg0){
29 }
30
31 }

我们把应用的所有要使用的数据表都创建好在这个类,使用数据的时候也不需要动这个类了,因为一般应用使用时(除了第一次使用)都不需要额外的创建数据库。

MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this);

SQLiteDatabase DB = helper.getWritableDatabase();

执行这两条方法后,就可以创建好MySQLiteOpenHelpe中创建的所有数据表保存在DB对象中了。

这里的getWritableDatabase();和getReadableDatabase()方法在一般情况下没什么区别,但在内存满了之后,getReadableDatabase()只能读不能写数据库。

第二部:定义数据库操作类,SQLite有两种方法对数据库进行操作,第一种是用SQL语句,第二种是用安卓自带的API方法。

第一种的示例代码:

1 public class DBoperation2 {
2 SQLiteDatabase DB = null;
3 public DBoperation2(SQLiteDatabase DB){
4 this.DB = DB;
5 }
6 //用sql语句实现增删改,实际运用中适当的让某些变量拆解SQL语句,让人机交互更和谐
7 public void SQL(SQLiteDatabase DB, String SQL){
8 if(DB != null){
9 DB.execSQL(SQL);
10 }
11 }
12 //用sql语句实现查询
13 public Cursor SQLSEL(SQLiteDatabase DB, String SQL, String[] where){
14 Cursor cursor = null;
15 if(DB != null){
16 cursor = DB.rawQuery(SQL, where);
17 }
18 return cursor;
19 }
20 }

即用数据库类的exeSQL方法直接执行SQL语句,缺点是方法没用返回值,比较难用来判断是否执行成功。具体的操作方法参数根据实际情况定义,这里暂时不展示。

第二种的示例代码:

1 public class DBoperation {
2 SQLiteDatabase DB = null;
3 public DBoperation(SQLiteDatabase DB){
4 this.DB = DB;
5 }
6 /*
7 * 增: insert(table, nullColumnHack, values)
8 * String table : 要插入的表的名字
9 * nullColumHack: 空列填充,默认值
10 * ContentValues values: 要插入的数据(id,name即插入的数据)
11 * 返回值为大于0的数时表示insert()方法执行成功
12 */
13 public long Insert(int id, int age, String name){
14 ContentValues values = new ContentValues();
15 values.put(Constant.ID, id);
16 values.put(Constant.AGE, age);
17 values.put(Constant.NAME, name);
18 long i = DB.insert(Constant.TABLE_NAME, null, values);
19 return i;
20 }
21 /*
22 * 删: delete(table, whereClause, whereArgs)
23 * String table: 要删除表的名字
24 * String whereClause: 删除的条件
25 * String[] whereArgs: 删除条件的占位符
26 * 占位符解释: ①:DB.delete(Constant.TABLE_NAME, Constant.ID+"=1", null);
27 * ②:DB.delete(Constant.TABLE_NAME, Constant.ID+"=?",new String[1]);效果一致
28 * 返回值为大于0的数时表示Delete()方法执行成功,这里是根据ID来删除,按实际情况更改
29 */
30 public long Delete(int age){
31 long i = DB.delete(Constant.TABLE_NAME, Constant.AGE+"="+age, null);
32 return i;
33 }
34 /*
35 * 改: update(table, values, whereClause, whereArgs)
36 * String table: 要更新表的名字
37 * ContentValues values: 要更新的数据(name即更新的内容)
38 * String whereClause: 更新的条件
39 * String[] whereArgs: 更新条件的占位符
40 * 返回值是一个整形表示更新的行数,这里是根据ID更新,根据实际情况更改。
41 */
42 public int Updata(String name, int age){
43 ContentValues values = new ContentValues();
44 values.put(Constant.NAME, name);
45 int i = DB.update(Constant.TABLE_NAME, values, Constant.AGE+"="+age, null);
46 return i;
47 }
48 /*
49 * 查询: query(table, columns, selection, selectionArgs, groupBy, having, orderBy)
50 * String table: 要查询的表名字
51 * String[] columns: 要查询显示的列
52 * String selection: 查询条件
53 * String[] selectionArgs: 查询条件的占位符
54 * String groupBy: String having: String orderBy
55 * 返回只是一个游标。
56 */
57 public Cursor Select(String[] columns, String selection, String[] selectionArgs){
58 Cursor cursor = DB.query(Constant.TABLE_NAME, columns, selection, selectionArgs, null, null, null);
59 return cursor;
60 }
61 }

代码中已经有详细的注释,具体方法的构造和参数可以根据自己的需求改造。

接下来,展示一下上面的方法。

为了方便,我把插入的年龄都定义为1,名字都为LWJ,删除和更新的条件都是年龄为1.所有更新和删除都是回把全部内容都改的。查询则是查询所有内容,查询实则在前面的增删改后都执行了一次。

示例代码:

1 public class MainActivity extends Activity {
2
3 private MySQLiteOpenHelper helper = null;
4 private DBoperation operation = null;
5 private Cursor cursor = null;
6 private ListView lv = null;
7 private int n = 1;
8 @Override
9 protected void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.activity_main);
12 lv = (ListView)findViewById(R.id.lv);
13 if(helper == null){
14 helper = new MySQLiteOpenHelper(this);
15 }
16 }
17 //这里的条件可以根据需要输入来操作,我这里是为了方便
18 public void Click(View v){
19 SQLiteDatabase DB = helper.getWritableDatabase();
20 operation = new DBoperation(DB);
21 switch(v.getId()){
22 case R.id.insert :
23 long i = operation.Insert(n,1,"LWJ");
24 if(i > 0){
25 Toast toast = Toast.makeText(MainActivity.this, "插入成功", Toast.LENGTH_SHORT);
26 toast.show();
27 } else {
28 Toast toast = Toast.makeText(MainActivity.this, "插入失败", Toast.LENGTH_SHORT);
29 toast.show();
30 }
31 n++;
32 Show2(DB);
33 DB.close();
34 break;
35 case R.id.delete :
36 long d = operation.Delete(1);
37 if( d >0){
38 Toast toast = Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT);
39 toast.show();
40 } else {
41 Toast toast = Toast.makeText(MainActivity.this, "删除失败", Toast.LENGTH_SHORT);
42 toast.show();
43 }
44 Show2(DB);
45 DB.close();
46 break;
47 case R.id.updata :
48 int u = operation.Updata("lwj", 1);
49 if( u >0){
50 Toast toast = Toast.makeText(MainActivity.this, "更新成功", Toast.LENGTH_SHORT);
51 toast.show();
52 } else {
53 Toast toast = Toast.makeText(MainActivity.this, "更新失败", Toast.LENGTH_SHORT);
54 toast.show();
55 }
56 Show2(DB);
57 DB.close();
58 break;
59 case R.id.select :
60 Show(DB);
61 DB.close();
62 break;
63 }
64 }
65 }

这里的show()和Show2()方法是下一篇讲适配器的时候再解释,知道他是把数据库里面的内容展示再ListView里面的就可以了。

Click方法是layou文件t定义按钮响应的方法名字。

结果:

      

这里解释一下如何在layout文件中定义Click方法:

只需要在控件的属性中添加:android:onClick="Click" 就ok拉。

 

如果有什么错误,或者我理解错误或不当的,恳请大家纠正,谢谢!嘻嘻嘻~

 

转:https://www.cnblogs.com/xiaolai1995/p/6502530.html



推荐阅读
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本文介绍如何在SQL Server中对Name列进行排序,使特定值(如Default Deliverable Submission Notification)显示在结果集的顶部。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
author-avatar
采蘑菇的灵的fans
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有