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 ...
随机推荐
- 2017-2018 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2017)
2017-2018 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2017) 全靠 wxh的博客 补完这套.wx ...
- Spring Cloud微服务安全实战_3-2_第一个API及注入攻击防护
1,本节主要讲了sql注入防范,如果使用mybatis,需要注意mapper.xml里面$会造成sql注入风险. 第一个 api 代码:https://github.com/lhy1234/sprin ...
- CLR Exception 0xE0434F4D和0xE0434352的区别
<根据<CLR Exception---E0434352>和<CLR Exception---E0434F4D>这两篇随笔,我们会发现,这两个异常太相似了,除了代码值不一 ...
- 几款不错的java表达式引擎
mvel 比较老牌了,很强大,但是好久没更新了 参考地址: http://mvel.documentnode.com/ https://github.com/mvel/mvel ScriptEngin ...
- win +R
一.电脑设置免登录密码及修改密码 1.win+R 2.输入control userpasswords2 3.勾选免密码账号登陆,修改密码 二.打开性能监视器 1.win+R 2.输入perfmon.e ...
- contest1 CF1084 div2 oooxx oooxo ooooo
题意: div2D (x)(x) 给出一棵树, 找出一条路径, 使得每一时刻点权和\(\ge\)边权和, 并且点权和\(-\)边权和最大 div2E (x)(o) 给出两个长度为\(n(\le 5e5 ...
- Python power函数
power函数 from math import pow def power(x, y): if y == 0: return 1 tot = 1 for i in range(y): tot *= ...
- Django 1.11 使用命令makemigrations命令无法执行表修改动作
由于在学习过程中,遇到models模型变动,变动后合并发生问题,故当时做了删除应用文件夹下migrations文件,由于数据库里无较多新数据,故删除后重建,但重建后执行模型合并操作结果为No Chan ...
- [RN] React Native 使用 阿里 ant-design
React Native 使用 阿里 ant-design 实例效果如图: 一.安装 npm install antd-mobile-rn --save npm install babel-plugi ...
- 说几条JavaScript的基本规范
1.不要在同一行声明多个变量 2.使用===或!==来比较 3.使用字面量的方式来创建对象.数组,替代new Array这种形式 4.不要使用全局函数 5.switch语句必须要带default分支 ...