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 ...
随机推荐
- CSS布局对齐的小技巧
类似以上这种对齐怎么做? 很简单,上面是的污水开始的位置是由于被"能源种类"顶着,下面没有字怎么办?最差的办法就是用margin-left,因为在不同的机器上,可能会出现兼容性问题 ...
- 4-OpenResty 配置 https 访问
首先是下载证书 https://www.cnblogs.com/yangfengwu/p/11809757.html 因为咱用的 Nginx 所以 修改这个 server { listen ssl; ...
- [RN] Android 设备adb连接后unauthorized解决方法
Android 设备adb连接后unauthorized解决方法 安卓设备usb或者adbwireless连接后输入adb device后都是未授权状态 相信很多同学都会遇到这种情况,除了一直重复开关 ...
- MybatisPlus使用代码生成器遇到的小问题
MyBatisPlus 在3.0.3版本之前使用代码生成器因为存在默认依赖,所以不需要其他的依赖,项目中使用的是3.0.1的版本,所以不用添加其他依赖,添加之后反倒是会报错,实际上MP官网上已经说明了 ...
- php获取客户端公网ip代码
<?php /*如果是本地服务器获取客户端的ip地址是 127.0.0.1 如果是域名服务器获取客户端的是公网ip地址*/ function get_client_ip() { $ipaddre ...
- Unable to resolve service for type 'Microsoft.AspNetCore.ResponseCompression.IResponseCompressionProvider' while attempting to activate 'Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMid
System.InvalidOperationException HResult=0x80131509 Message=Unable to resolve service for type 'Micr ...
- 依赖注入(DI)与控制反转(IOC)基础知识
依赖注入(DI)与控制反转(IOC)基础知识 一.什么是依赖注入? 依赖注入英文是Dependcy Injection简写DI,依赖注入会将所依赖的对象自动交由目标对象使用,而不是让对象自己去获取. ...
- 【C/C++开发】emplace_back() 和 push_back 的区别
在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...
- TopCoder入门
TopCoder入门 http://acmicpc.info/archives/164?tdsourcetag=s_pctim_aiomsg 本文根据经典的TC教程完善和改编.TopCoder:htt ...
- 关于jsruntime 的概念
In the JSAPI, JSRuntime is the top-level object that represents an instance of the JavaScript engine ...