简单介绍一下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. VS Code配置Python

    安装 1.安装python插件 直接在VS Code里搜索“Python”插件,安装. 2.下载Python 去官网下载Python 其他的插件在第一次运行Python程序会提示,按要求安装即可. 运 ...

  2. The happy secret to better work,https://www.ted.com/talks/shawn_achor_the_happy_secret_to_better_work/transcript#t-100352

    When I was seven years old and my sister was just five years old, we were playing on top of a bunk b ...

  3. RE:SB的SDOISB记

    Day0 到了农大 进门看见hly 和myj一起乱%一通 一本爷的气场就是强大 晚上gryz搬砖三人组出去吃饭,开心>_< 吃完饭后去试机 手速比较快,写了一下ntt,lct,sa和一些小 ...

  4. C语言博客作业4——数组

    0.展示PTA总分 一维数组 二维数组 字符数组 1.本章学习总结 1.1学习内容总结 一维数组知识点: 无论是对一维数组还是二维数组进行应用时,我们对其下标的应用十分广泛. 1:一维数组的输入和遍历 ...

  5. Unchecked runtime.lastError: The message port closed before a response was received.

    这是由于某个 Chrome 扩展程序造成的. 打开 chrome://extensions/,逐一关闭排查.我这边是由于“迅雷下载支持”这个扩展引起的,将其关闭即可.

  6. rsync 使用方法 ssh免密问题 不同端口同步

    不同端口同步(前提还是做好免密) 主要通过选项-e "ssh -p 端口"来实现 重命名了秘钥文件 指定-i即可~ 1. 本地目录同步到导地不同端口主机目录 [root@bakse ...

  7. Centos查看虚拟机IP地址及使用XShell连接

    1.在VMware中安装Centos7系统[1] 2.查看虚拟机里的Centos7的IP[2] 1)查看IP 输入ip查询命名 ip addr 发现 ens33 没有 inet 这个属性,那么就没法通 ...

  8. Linux安装vim,解决vim: command not found

    1,输入rpm -qa|grep vim 命令, 如果 vim 已经正确安裝,会返回下面的三行代码: root@server1 [~]# rpm -qa|grep vim vim-enhanced-7 ...

  9. [技术博客] JS正则活学活用

    正则基本语法 正则表达式(Regular Expression)是用单字符串来匹配一系列复合条件字符串的模式,对于乔姆斯基3型语法. 数学定义: 串行AB表示集合 {αβ | α ∈ A ,β ∈ B ...

  10. 基于32位Windows2003的数据库服务器优化,启用AWE,优化SQL Server

    最近几天,笔者所在的单位中的一台WEB服务器由于负载过大出现了问题,当同时在线的用户达到一定规模(2000-3000)时,频繁出现页面响应迟缓.超时等问题.服务器采用的操作系统是Windows Ser ...