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

Android创建SQLite数据库

简单介绍一下Android系统内置轻便又功能强大的嵌入式数据库–SQLite。 SQLite是D.RichardHipp用C语言编写的开源嵌入式数据库引擎,它是一款轻型的数据库

简单介绍一下Android系统内置轻便又功能强大的嵌入式数据库–SQLite。

 

  SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎,它是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且由于其占用资源低(占用内存只需几百K)、处

理速度快等特点,目前许多嵌入式产品中都使用了它,其中就包括大名鼎鼎的iOS和Android移动操作系统。SQLite能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、

C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

 

SQLite数据库的特点:

   1.轻量级:使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。

        2.独立性:SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。

        3.隔离性:SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。

        4.跨平台:SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android和IOS。

        5.多语言接口: SQLite 数据库支持多语言编程接口。

        6.安全性:SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。

 

接下来就在Android中创建一个自己的SQLite数据库,完整代码如下:

 

DBHelper.java:

1 public class DBHelper extends SQLiteOpenHelper {
2
3 private static final String DATABASE_NAME = "test.db"; //数据库名字
4 private static final int DATABASE_VERSION = 1 ; //数据库版本号
5
6 public DBHelper(Context context){
7 super(context,DATABASE_NAME,null,DATABASE_VERSION);
8 }
9
10
11 /**
12 * 创建数据库表:person
13 * _id为主键,自增
14 * **/
15 @Override
16 public void onCreate(SQLiteDatabase sqLiteDatabase) {
17 Log.i("TAG:","创建person数据库表!");
18 sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
19 " name VARCHAR,info TEXT)");
20 }
21
22 @Override
23 public void onUpgrade(SQLiteDatabase sqLiteDatabase,int oldVersion,int newVersion) {
24
25 }
26
27 @Override
28 public void onOpen(SQLiteDatabase sqLiteDatabase){
29 super.onOpen(sqLiteDatabase);
30 }
31 }

 

DBManager.java:

 

1 public class DBManager {
2
3 DBHelper helper;
4 SQLiteDatabase sqLiteDatabase;
5
6 public DBManager(Context context){
7 helper = new DBHelper(context);
8 sqLiteDatabase = helper.getReadableDatabase();
9 }
10
11 /**
12 * execSQL()方法可以执行insert,update,delete语句
13 * 实现对数据库的 增,删,改 功能
14 * sql为操作语句 , bindArgs为操作传递参数
15 * **/
16 public boolean updateSQLite(String sql , Object [] bindArgs){
17 boolean isSuccess = false;
18 try {
19 sqLiteDatabase.execSQL( sql , bindArgs );
20 isSuccess = true;
21 }catch (Exception e){
22 e.printStackTrace();
23 }finally {
24 if (sqLiteDatabase!=null){
25 sqLiteDatabase.close();
26 }
27 Log.i("TAG:","数据插入数据库中状态:" + isSuccess);
28 }
29 return isSuccess;
30 }
31
32 /**
33 * rawQuery()方法可以执行select语句
34 * 实现查询功能
35 * sql为操作语句 , bindArgs为操作传递参数
36 * **/
37 public ArrayList> querySQLite(String sql , String [] bindArgs){
38 ArrayList> list = new ArrayList>();
39
40 /**Cursor是结果集游标,使用Cursou.moveToNext()方法可以从当前行移动到下一行**/
41 Cursor cursor = sqLiteDatabase.rawQuery(sql , bindArgs);
42 int clos_len = cursor.getColumnCount(); //获取数据所有列数
43
44 Log.i("TAG:","querySQLite()方法中获得总列数clos_len:" + clos_len);
45
46 boolean isfals = cursor.moveToNext();
47 Log.i("TAG:","isfals值为:" + isfals);
48
49 while(cursor.moveToNext()) { //循环表格中的每一行
50 Log.i("TAG:","进入到while循环中");
51
52 HashMap map = new HashMap<>();
53 for(int i = 0;i//循环表格中的每一列
54 String clos_name = cursor.getColumnName(i); //从给定的索引i返回列名
55 String clos_value = cursor.getString(cursor.getColumnIndex(clos_name));//返回指定的名称,没有就返回-1
56 if(clos_value==null){
57 clos_value = "";
58 }
59
60 Log.i("TAG:","while循环下面的for循环拿到的数据clos_value为:"
61 + cursor.getString(cursor.getColumnIndex(clos_name)));
62
63 map.put(clos_name , clos_value);
64 }
65 list.add(map);
66 }
67 return list;
68 }
69 }

 

SQLFunction.java:

 

1 public class SQLFunction {
2
3 static DBHelper helper;
4
5
6 public static void initTable(Context context){
7 helper = new DBHelper(context);
8 helper.getReadableDatabase();
9 }
10
11 /**【插入数据】**/
12 public static void insert(Context context , Object [] data){
13
14 Log.i("TAG:","插入数据到数据库表:person中:"+data.toString());
15
16 DBManager sqlManager = new DBManager(context);
17 helper = new DBHelper(context);
18 helper.getWritableDatabase();
19 String sql = "insert into person ( name , info ) values ( ? , ?)";
20 Object [] bindArgs = data;
21 sqlManager.updateSQLite( sql , bindArgs );
22 }
23
24
25 /**【模糊查询】**/
26 public static ArrayList>query(Context context,String where1 ,String where2){
27 DBManager sqlManager = new DBManager(context);
28 ArrayList> list = new ArrayList<>();
29 String sql = "select * from person where name like ? and info like ?";
30 if(where1 == null){
31 list = sqlManager.querySQLite(sql,new String[] {"%","%"});
32 }else{
33 where1 = "%" + where1 + "%";
34 where2 = "%" + where2 + "%";
35 list = sqlManager.querySQLite(sql,new String [] { where1 , where2 } );
36 }
37
38 Log.i("TAG:","查询完毕,返回数据:" + list.size());
39
40 return list;
41 }
42
43 /**【删除数据】**/
44 public static void delete(Context context , Object[] data){
45 DBManager sqlmanager = new DBManager(context);
46 String sql = "delete from person where _id = ? ";
47 sqlmanager.updateSQLite(sql , data);
48 }
49
50 /**【更新数据】**/
51 public static void update(Context context , Object[]data){
52 helper = new DBHelper(context);
53 helper.getReadableDatabase();
54 DBManager sqlManager = new DBManager(context);
55 String sql = "update person set name=? , info=? where _id=?";
56 sqlManager.updateSQLite(sql,data);
57 }
58
59 }

 

我这里的数据都是用Log.i();方式输出,布局文件简单加载个button按钮:

 

1 <LinearLayout
2 xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_match_parent"
6 android:layout_wrap_content"
7 android:orientation="vertical"
8 android:layout_gravity="center"
9 android:gravity="center"
10 tools:cOntext="com.hs.example.exampleapplication.MainActivity">
11
12 <LinearLayout
13 android:layout_match_parent"
14 android:layout_wrap_content"
15 android:orientation="horizontal"
16 android:gravity="center">
17
18 <Button
19 android:id="@+id/btn_sql"
20 android:layout_0dp"
21 android:layout_weight="1"
22 android:layout_match_parent"
23 android:text="数据库操作"/>
24
25
26

 

MainActivity.java:

 

1 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
2 Button btn_sql;
3
4 @Override
5 protected void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 setContentView(R.layout.activity_main);
8
9 /**【初始化数据库】**/
10 SQLFunction.initTable(MainActivity.this);
11
12 /**【动态申请sdCard读写权限】**/
13 //DocumentTool.verifyStoragePermissions(MainActivity.this);
14
15 btn_sql = this.findViewById(R.id.btn_sql);
16 btn_sql.setOnClickListener(this);
17
18 }
19
20 public void onClick(View view) {
21 int id = view.getId();
22 switch (id){
23 case R.id.btn_sql:
24 DB_i_u_d_s();
25 break;
26 }
27 }
28
29 /**【操作数据库的方法】**/
30 private void DB_i_u_d_s(){
31 SQLFunction function = new SQLFunction();
32
33 /**
34 Log.i("TAG:","插入数据!");
35 Object[] data = {"root","123456"};
36 function.insert(MainActivity.this,data);
37 */
38
39 /**
40 * Log.i("TAG:","通过id来修改数据!");
41 *String name = "sale";
42 *String info = "TestSale";
43 *int _id = 7;
44 *Object[]data = {name,info,_id};
45 *function.update(MainActivity.this,data);
46 * */
47
48 /**
49 * Log.i("TAG:","通过id来删除数据!");
50 *int d_id = 2;
51 *Object[] did = {d_id};
52 *function.delete(MainActivity.this,did);
53 * */
54 Log.i("TAG:","查询数据!");
55 String where1 = null;
56 String where2 = null;
57 ArrayList> list = new ArrayList<>();
58 list = function.query(MainActivity.this,where1,where2);
59 if(list!=null){
60 for(int i = 0 ; i){
61 Log.i("TAG:","从数据库中拿到的数据 _ID为:" +list.get(i).get("_id"));
62 Log.i("TAG:","从数据库中拿到的数据name为:" + list.get(i).get("name"));
63 Log.i("TAG:","从数据库中拿到的数据info为:" + list.get(i).get("info"));
64 }
65 }else {
66 Log.i("TAG:","从数据库中没有拿到数据!");
67 }
68 }
69 }

 

执行效果:

 

《Android-----创建SQLite数据库》

 


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • SQLite3是一个广泛使用的数据库,从linux,windows到安卓都有SQLite的应用。本文介绍SQLite3在windows上的编译。SQLite3提供了多种源代码的下载 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • 在Android Studio中查看SQLite数据库
    原来查看数据库内容,我们一般都是将数据库文件从手机导出,再用专门的软件打开查看,比较繁琐。最近发现了一个比较方便的方法:使用工具stetho。使用方式在gradle中配置depen ... [详细]
  • 州的先生(https:zmister.com)在很多项目中都有使用到SQLite数据库作为数据存储的工具,其中包括一些桌面图形界面程序和线上的Web应用程序。至今为止,它们都运行良 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
author-avatar
张心虚要加油
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有