热门标签 | 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



推荐阅读
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 在开发过程中,有时需要提供用户创建数据库的功能。本文介绍了如何利用 .NET 和 ADOX 在应用程序中实现创建 Access 数据库,并详细说明了创建数据库及表的具体步骤。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
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社区 版权所有