简单介绍一下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:

 public class DBHelper extends SQLiteOpenHelper {

     private static final String DATABASE_NAME = "test.db";  //数据库名字
private static final int DATABASE_VERSION = ; //数据库版本号 public DBHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
} /**
* 创建数据库表:person
* _id为主键,自增
* **/
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
Log.i("TAG:","创建person数据库表!");
sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
" name VARCHAR,info TEXT)");
} @Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase,int oldVersion,int newVersion) { } @Override
public void onOpen(SQLiteDatabase sqLiteDatabase){
super.onOpen(sqLiteDatabase);
}
}

DBManager.java:

 public class DBManager {

     DBHelper helper;
SQLiteDatabase sqLiteDatabase; public DBManager(Context context){
helper = new DBHelper(context);
sqLiteDatabase = helper.getReadableDatabase();
} /**
* execSQL()方法可以执行insert,update,delete语句
* 实现对数据库的 增,删,改 功能
* sql为操作语句 , bindArgs为操作传递参数
* **/
public boolean updateSQLite(String sql , Object [] bindArgs){
boolean isSuccess = false;
try {
sqLiteDatabase.execSQL( sql , bindArgs );
isSuccess = true;
}catch (Exception e){
e.printStackTrace();
}finally {
if (sqLiteDatabase!=null){
sqLiteDatabase.close();
}
Log.i("TAG:","数据插入数据库中状态:" + isSuccess);
}
return isSuccess;
} /**
* rawQuery()方法可以执行select语句
* 实现查询功能
* sql为操作语句 , bindArgs为操作传递参数
* **/
public ArrayList<HashMap<String , String>> querySQLite(String sql , String [] bindArgs){
ArrayList<HashMap<String ,String>> list = new ArrayList<HashMap<String, String>>(); /**Cursor是结果集游标,使用Cursou.moveToNext()方法可以从当前行移动到下一行**/
Cursor cursor = sqLiteDatabase.rawQuery(sql , bindArgs);
int clos_len = cursor.getColumnCount(); //获取数据所有列数 Log.i("TAG:","querySQLite()方法中获得总列数clos_len:" + clos_len); boolean isfals = cursor.moveToNext();
Log.i("TAG:","isfals值为:" + isfals); while(cursor.moveToNext()) { //循环表格中的每一行
Log.i("TAG:","进入到while循环中"); HashMap<String , String> map = new HashMap<>();
for(int i = ;i<clos_len;i++){ //循环表格中的每一列
String clos_name = cursor.getColumnName(i); //从给定的索引i返回列名
String clos_value = cursor.getString(cursor.getColumnIndex(clos_name));//返回指定的名称,没有就返回-1
if(clos_value==null){
clos_value = "";
} Log.i("TAG:","while循环下面的for循环拿到的数据clos_value为:"
+ cursor.getString(cursor.getColumnIndex(clos_name))); map.put(clos_name , clos_value);
}
list.add(map);
}
return list;
}
}

SQLFunction.java:

 public class SQLFunction {

     static DBHelper helper;

     public static void initTable(Context context){
helper = new DBHelper(context);
helper.getReadableDatabase();
} /**【插入数据】**/
public static void insert(Context context , Object [] data){ Log.i("TAG:","插入数据到数据库表:person中:"+data.toString()); DBManager sqlManager = new DBManager(context);
helper = new DBHelper(context);
helper.getWritableDatabase();
String sql = "insert into person ( name , info ) values ( ? , ?)";
Object [] bindArgs = data;
sqlManager.updateSQLite( sql , bindArgs );
} /**【模糊查询】**/
public static ArrayList<HashMap<String ,String>>query(Context context,String where1 ,String where2){
DBManager sqlManager = new DBManager(context);
ArrayList<HashMap<String ,String>> list = new ArrayList<>();
String sql = "select * from person where name like ? and info like ?";
if(where1 == null){
list = sqlManager.querySQLite(sql,new String[] {"%","%"});
}else{
where1 = "%" + where1 + "%";
where2 = "%" + where2 + "%";
list = sqlManager.querySQLite(sql,new String [] { where1 , where2 } );
} Log.i("TAG:","查询完毕,返回数据:" + list.size()); return list;
} /**【删除数据】**/
public static void delete(Context context , Object[] data){
DBManager sqlmanager = new DBManager(context);
String sql = "delete from person where _id = ? ";
sqlmanager.updateSQLite(sql , data);
} /**【更新数据】**/
public static void update(Context context , Object[]data){
helper = new DBHelper(context);
helper.getReadableDatabase();
DBManager sqlManager = new DBManager(context);
String sql = "update person set name=? , info=? where _id=?";
sqlManager.updateSQLite(sql,data);
} }

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

 <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center"
tools:context="com.hs.example.exampleapplication.MainActivity"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"> <Button
android:id="@+id/btn_sql"
android:layout_width="0dp"
android:layout_weight=""
android:layout_height="match_parent"
android:text="数据库操作"/>
</LinearLayout> </LinearLayout>

MainActivity.java:

 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn_sql; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); /**【初始化数据库】**/
SQLFunction.initTable(MainActivity.this); /**【动态申请sdCard读写权限】**/
//DocumentTool.verifyStoragePermissions(MainActivity.this); btn_sql = this.findViewById(R.id.btn_sql);
btn_sql.setOnClickListener(this); } public void onClick(View view) {
int id = view.getId();
switch (id){
case R.id.btn_sql:
DB_i_u_d_s();
break;
}
} /**【操作数据库的方法】**/
private void DB_i_u_d_s(){
SQLFunction function = new SQLFunction(); /**
Log.i("TAG:","插入数据!");
Object[] data = {"root","123456"};
function.insert(MainActivity.this,data);
*/ /**
* Log.i("TAG:","通过id来修改数据!");
*String name = "sale";
*String info = "TestSale";
*int _id = 7;
*Object[]data = {name,info,_id};
*function.update(MainActivity.this,data);
* */ /**
* Log.i("TAG:","通过id来删除数据!");
*int d_id = 2;
*Object[] did = {d_id};
*function.delete(MainActivity.this,did);
* */
Log.i("TAG:","查询数据!");
String where1 = null;
String where2 = null;
ArrayList<HashMap<String ,String>> list = new ArrayList<>();
list = function.query(MainActivity.this,where1,where2);
if(list!=null){
for(int i = ; i<list.size();i++){
Log.i("TAG:","从数据库中拿到的数据 _ID为:" +list.get(i).get("_id"));
Log.i("TAG:","从数据库中拿到的数据name为:" + list.get(i).get("name"));
Log.i("TAG:","从数据库中拿到的数据info为:" + list.get(i).get("info"));
}
}else {
Log.i("TAG:","从数据库中没有拿到数据!");
}
}
}

执行效果:

Android-----创建SQLite数据库的更多相关文章

  1. Android 创建SQLite数据库(一)

    Android内置了轻量级的数据库SQLite,这里将自己理解作个记录,方便自己复习. 一.首先,创建SQLite数据库比较常见的方式是通过Android提供的SQLiteOpenHelper来实现, ...

  2. Android实现SQLite数据库联系人列表

    Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...

  3. android基础---->SQLite数据库的使用

    SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, Python)都使 ...

  4. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库

    下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...

  5. android中sqlite数据库的基本使用和添加多张表

    看了很多关于android使用sqlite数据库的文章,很多都是介绍了数据库的建立和表的建立,而表通常都是只建立一张,而实际情况我们用到的表可能不止一张,那这种情况下我们又该怎么办呢,好了,下面我教大 ...

  6. android 一个SQLite数据库多个数据表的基本使用框架 (带demo)

    android 一个SQLite数据库多个数据表(带demo) 前言        demo演示        一.搭建        二.建立实体类        三.建立数据库操作类        ...

  7. Qt for Android 打包 SQLite 数据库

    Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...

  8. Android SQLiteOpenHelper Sqlite数据库的创建与打开

    Android Sqlite数据库是一个怎样的数据库? 答:是一种嵌入式小型设备,移动设备,的数据库,应用在穿戴设备(例如:智能手表,计算手环 等等),移动设备(例如:Android系统类型的手机 等 ...

  9. Android开发SQLite数据库的创建

    package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabas ...

  10. Android之SQLite数据库篇

    一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...

随机推荐

  1. 第二阶段冲刺(个人)——five

    今天的计划:优化登录.注册信息的填写判断. 昨天做了什么?做背景. 困难:无

  2. Taro-UI 2.0样式在H5上生效,微信小程序不生效?

    答案: https://taro-ui.aotu.io/#/docs/questions taro-ui 自定义样式覆盖小程序组件样式使用到了 globalClass 这个微信小程序特性,由于微信小程 ...

  3. postfix发邮件失败,日志和postqueue -p提示Connection refused

    1. postfix服务未启动 2. /etc/postfix/main.cf文件中未设置inet_interfaces = all

  4. js判断客户端是iOS还是Android移动终端

    前段时间,小颖公司需要实现:用户在微信中打开一个html5,在该html5中通过点击下载按钮,Android手机会跳到Android的下载地址,IOS会跳转到IOS下载地址,其它则跳转到另一个指定地址 ...

  5. 对最长公共子序列(LCS)等一系列DP问题的研究

    LIS问题: 设\(f[i]\)为以\(a[i]\)结尾的最长上升子序列长度,有: \[f[i]=f[j]+1(j<i&&a[j]<a[i])\] 可以用树状数组优化至\( ...

  6. 趣谈Linux操作系统学习笔记:第二十七讲

    一.文件系统的功能规划 1.引子 咱们花了这么长的时间,规划了会议室管理系统,这样多个项目执行的时候,隔离性可以得到保证. 但是,会议室里面被回收,会议室里面的资料就丢失了.有一些资料我们希望项目结束 ...

  7. CF1276 D. Tree Elimination

    CF1276 D. Tree Elimination 传送门 CodeForces Solution 考虑树型\(dp\),设\(f_{u,0/1/2/3}\)分别表示点\(u\)被自己父亲边之前的边 ...

  8. 【Gamma】 Phylab 展示博客

    目录 [Gamma] Phylab 展示博客 发布地址 网站:PhyLab GitHub Release: WhatAHardChoice/Phylab Gamma版本 一.团队简介 二.项目目标 2 ...

  9. LRU缓存简单实现

    缓存接口定义 /** * 缓存接口 * * @author zhi * */ public interface ICache<K, V> { /** * 添加缓存数据 * * @param ...

  10. sqlcode与sqlerrm的区别

    sqlCode:是数据库操作的返回码,其中0--成功:-1--失败:100--没有检索到数据. sqlerrm:是数返回指定错误代码的错误信息. 在一个内在的异常中,SQLCODE返回Oracle错误 ...