热门标签 | 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数据库》

 


推荐阅读
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解
    PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • 在编写数据库应用程序时,常常需要用户自己在控制面板中配置ODBC数据源。然而对一般用户而言,配置ODBC数据源的工作是有一定困难的。因此, ... [详细]
  • mybatis相关面试题 ... [详细]
  • 本文旨在探讨Linux系统中两种重要的进程间通信(IPC)机制——System V和POSIX的标准及其特性,为开发者提供深入的理解。 ... [详细]
  • 大数据SQL优化:全面解析数据倾斜解决方案
    本文深入探讨了大数据SQL优化中的数据倾斜问题,提供了多种解决策略和实际案例,旨在帮助读者理解和应对这一常见挑战。 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • 本文详细介绍了MySQL表分区的概念、类型及其在实际应用中的实施方法,特别是针对Zabbix数据库的优化策略。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 如何使用R语言高效连接并操作MySQL数据库
    如何使用R语言高效连接并操作MySQL数据库 ... [详细]
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社区 版权所有