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



推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • openGauss每日一练:第6天 - 模式的创建、修改与删除
    本篇笔记记录了openGauss数据库中关于模式(Schema)的创建、修改和删除操作。通过这些操作,用户可以更好地管理和控制数据库对象。实验环境为openGauss 2.0.0,并使用由墨天轮提供的线上环境。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
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社区 版权所有