Android-----创建SQLite数据库
简单介绍一下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数据库的更多相关文章
- Android 创建SQLite数据库(一)
Android内置了轻量级的数据库SQLite,这里将自己理解作个记录,方便自己复习. 一.首先,创建SQLite数据库比较常见的方式是通过Android提供的SQLiteOpenHelper来实现, ...
- Android实现SQLite数据库联系人列表
Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...
- android基础---->SQLite数据库的使用
SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, Python)都使 ...
- Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库
下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...
- android中sqlite数据库的基本使用和添加多张表
看了很多关于android使用sqlite数据库的文章,很多都是介绍了数据库的建立和表的建立,而表通常都是只建立一张,而实际情况我们用到的表可能不止一张,那这种情况下我们又该怎么办呢,好了,下面我教大 ...
- android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
android 一个SQLite数据库多个数据表(带demo) 前言 demo演示 一.搭建 二.建立实体类 三.建立数据库操作类 ...
- Qt for Android 打包 SQLite 数据库
Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...
- Android SQLiteOpenHelper Sqlite数据库的创建与打开
Android Sqlite数据库是一个怎样的数据库? 答:是一种嵌入式小型设备,移动设备,的数据库,应用在穿戴设备(例如:智能手表,计算手环 等等),移动设备(例如:Android系统类型的手机 等 ...
- Android开发SQLite数据库的创建
package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabas ...
- Android之SQLite数据库篇
一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...
随机推荐
- NOIP2019翻车前写(and 抄)过的代码
咕咕咕.按上传时间升序排列. //树的重心 void dfs(int x) { v[x]=1; size[x]=1; int max_part=0; for(int i=hed[x];i;i=nxt[ ...
- 第02组 团队Git现场编程实战
目录 1. 组员职责分工(2分) 2. github 的提交日志截图(1分) 3. 程序运行截图(3分) 4. 程序运行环境(1分) 5. GUI界面(5分) 6. 基础功能实现(10分) 7. 鼓励 ...
- nuxt或者vue,axios中如何发送多个请求
在使用vue或者nuxt中,我们需要使用axios去发送多个http请求,参考了axios的官方说明你也许会想到使用axios.all发送请求,但是这样可能会出现一些异常错误: (node:9360) ...
- R程序书写规范
suppressMessages(library(xxx)) # 导入所需的R包 suppressMessages(library(xxx)) # 导入所需的R包 fucntion02 <- f ...
- CentOS安装Hive
1.环境和软件准备: hive版本:apache-hive-2.3.6-bin.tar.gz,下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive ...
- asp.net调用c++的dll
只需要把dll文件拷贝到windows的system32目录下(64位系统为SysWOW64目录),如果操作系统为64位而dll为32位,还需在进程池启用32位支持.
- React的状态管理工具
Mobx-React : 当前最适合React的状态管理工具 MobX 简单.可扩展的状态管理 MobX 是由 Mendix.Coinbase.Facebook 开源和众多个人赞助商 ...
- linux系统ubuntu中在命令行如何打开图形界面的文件夹
用linux查看文件列表之类的受到命令行限制,还是不太方便的.在文件夹中打开的话,切换路径又没有linux终端快,于是,需要在命令行窗口中打开文件夹.如何做呢? 来到终端命令行中,cd切换你的路径,使 ...
- 如何下载最新版本和旧版本的eclipse?
1.进入官网,点击download,进入download界面,如果想要最新的版本的eclipse,直接点击下载即可,如图所示: 2.如果想下载旧版本的eclipse的话,可以点击上图的的downloa ...
- Mysql 学习参考
[1]Mysql 基础知识 (1)<Mysql 官网> (2)<菜鸟教程之Mysql数据库教程> (3)<C语言中文网之Mysql数据库栏> (4)<W3Sc ...