android数据库

Android SQLite 数据库详细介绍

两盒软妹~` 提交于 2020-01-26 11:24:53
Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手机上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工方式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版本进行管理来实现前面提出的需求。 下面我们来看一下Android SQLite 最常用的几个类和那些方法: 一、SQLiteOpenHelper : onCreate(SQLiteDatabase db); 用于初次使用软件时生成数据库表。 当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候, 如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate(

Android使用getWritableDatabase()和getReadableDatabase()

早过忘川 提交于 2020-01-22 03:03:41
数据库SQLite介绍 Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。      getReadableDatabase()方法中会调用getWritableDatabase()方法 其中 getWritableDatabase() 方法以读写方式打开数据库 ,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。 getReadableDatabase() 方法则是先以读写方式打开数据库 ,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象。 它会调用并返回一个可以读写数据库的对象 在第一次调用时会调用onCreate的方法 当数据库存在时会调用onOpen方法 结束时调用onClose方法 4. 区别 是不是上面两个总结一样? 然后事实呢? 两个方法都是返回读写数据库的对象,但是当磁盘已经满了时, getWritableDatabase 会抛异常,而 getReadableDatabase 不会报错,它此时不会返回读写数据库的对象,而是仅仅返回一个读数据库的对象。

Android数据库源码分析(2)-SQLiteDatabase的实现以及多线程行为

a 夏天 提交于 2020-01-22 03:02:20
Android数据库源码分析(2)-SQLiteDatabase的实现以及多线程行为 本系列主要关注安卓数据库的线程行为,分为四个部分: (1)SQLiteOpenHelper的getReadableDatabase和getWritableDatabase (2)SQLiteDatabase的实现以及多线程行为 (3)连接缓存池SQLiteConnectionPool (4)SQLiteDatabase多线程实践 本篇主要关注 SQLiteDatabase 的线程同步实现与架构实现。 1 SQLiteClosable的acquireReference与releaseReference方法 SQLiteClosable 是 SQLiteDatabase 的父类,也同时是数据库下其他几个类的父类。其中实现了引用计数逻辑来控制资源释放的时机。 private int mReferenceCount = 1; public void acquireReference() { synchronized(this) { if (mReferenceCount <= 0) { throw new IllegalStateException( "attempt to re-open an already-closed object: " + this); } mReferenceCount++;

教你如何开关Android的APN网络

≯℡__Kan透↙ 提交于 2020-01-01 23:24:31
版权所有,转载请注明来自Mobile Developer (http://mdev.cc ) 作者 : SinFrancis 说明:此程序需要将手机上的数据连接的按钮(下图)打开,才好使。(怎么用程序去打开这个按钮呢?各位大牛请不吝赐教!!!) 由于Android对于APN的网络API没有公开,不过我们可以阅读源代码,然后进行数据库操作,系统会自动监听数据库的变化,从而实现开启或者关闭APN。 大家可以研究一下frameworks/base/core/java/android/provider/Telephony.java这个类, 比较重要的就是 URI 和数据库字段: content://telephony/carriers 字段可以在Telephony.java中找到。 其实原理很简单 : 1 、 当开启APN的时候,设置一个正确的移动或者联通的APN 2、 关闭的时候设置一个错误APN就会自动关闭网络 import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import

android 数据库的创建

六月ゝ 毕业季﹏ 提交于 2019-12-23 17:56:19
主java package com.itheima.createdatabase; import android.app.Activity; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; public class MainActivity extends Activity { private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; //创建一个帮助类对象 MySqliteOpenHelper mySqliteOpenHelper = new MySqliteOpenHelper(mContext); //调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); } }

Android--数据持久化之SQLite

ε祈祈猫儿з 提交于 2019-12-19 04:56:40
前言   对于一个应用程序而言,数据持久化是必不可少的,Android程序也不例外。这篇博客将介绍Android中关于SQLite的使用,SQLite是一种嵌入式的数据库引擎,专门适用于资源有限的设备上进行适量的数据存储,而Android就全面支持标准的SQLite数据库。在本片博客中,将说明SQLite数据库的创建以及维护,还有使用SQLite执行CRUD的两种方式,以及SQLite中事务的使用,最后都会使用示例讲解博客中所提到的概念性的内容。 SQLite   Android对SQLite数据库,提供了完全的支持,而所有创建的SQLite数据库,仅限于当前应用访问,如果其他应用需要访问,则必须提供的Content Provider的支持,并且SQLite数据库会随着Android应用的卸载而被删除。SQLite是一个嵌入式的数据库引擎,最后是以文件的形式保存数据的。从本质上来看,SQLite的操作方式只是一种更为便捷的文件操作,当应用程序创建或打开一个SQLite数据库时,其实只是打开一个文件准备读写。因为SQLite仅适用于资源有限的小型设备,所以本身就不应该把大量数据存储在设备的SQLite数据库里,SQLite只适合存储一些小型的数据。   为了使SQLite和其他数据库间的兼容性最大化,SQLite支持对列上类型进行“类型近似”

Android--数据库GreenDao使用

吃可爱长大的小学妹 提交于 2019-12-18 04:46:06
一、简介 GreenDao 优点: 1.性能高,号称Android最快的关系型数据库 2.内存占用小 3.库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制 4.支持数据库加密 greendao支持SQLCipher进行数据库加密 有关SQLCipher可以参考这篇博客Android数据存储之Sqlite采用SQLCipher数据库加密实战 5.简洁易用的API 二、配置 1、需要在工程(Project)的build.gradle中添加依赖 buildscript { repositories { jcenter ( ) } dependencies { classpath 'com.android.tools.build:gradle:2.0.0' //GreenDao3依赖 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' } } 2、在项目(Module)的build.gradle中添加依赖 apply plugin : 'com.android.application' //使用greendaoapply plugin : 'org.greenrobot.greendao' android { compileSdkVersion 23 buildToolsVersion "23.0.2"

如何在android studio 中查看数据库

混江龙づ霸主 提交于 2019-12-15 09:50:22
最近对android中数据库那一块刚入门,首先学了下怎么创建数据库然后在android studio中查看自己创建的数据库,刚刚开始自己有点懵逼,但是我还是慢慢百度下学会了,至此写下自己的心得,希望对初学者有点帮助。 《步骤一》 >自己创建一个数据库(这一步我不解释) 《步骤二》 >启动自己的虚拟机 《步骤三》 >在工具栏中找到Tools-----Android-------Android Device Monitor单击打开,打开之后出现如下图 >我们点击data----data----找到自己的项目(我的如图) >找到了自己的数据库在这里还不能直接操作我们需要保存到本地,如图 >保存之后我们还不能打开,这时候我们需要下载一个软件来打开,下载地址如下 http://sqlitebrowser.org/ 《步骤四》 >接下来就是使用DB.Browser.for.SQLite来打开user.db 恩恩,按照这个步骤就可以完成打开自己创建的数据库了。 最近对android中数据库那一块刚入门,首先学了下怎么创建数据库然后在android studio中查看自己创建的数据库,刚刚开始自己有点懵逼,但是我还是慢慢百度下学会了,至此写下自己的心得,希望对初学者有点帮助。 来源: CSDN 作者: 梦你入睡 链接: https://blog.csdn.net/yechiyu167

Android SQLite 数据库的使用

倾然丶 夕夏残阳落幕 提交于 2019-12-10 18:34:55
如有不对的地方,望各路大神指点,小女子在此谢过,(*^__^*) 嘻嘻…… 一、创建数据库 第一个参数:数据库的名字 第二个参数:数据库权限(MODE_PRIVATE为本应用程序私有 * ,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE分别为全局可读和可写) 第三个参数:可以用来实例化一个cusor对象的工厂类 SQLiteDatabase database = context.openOrCreateDatabase("Book.db", 0, null); 1.判断数据库是否打开 database.isOpen() 2.关闭数据库 database.close(); 二 创建表(创建一个book 表) //创建book表 public void createBookTable() { StringBuilder createBook = new StringBuilder("CREATE TABLE book(id char(40) PRIMARY KEY,name char,actionType varchar(10) default 'add',") .append("createDate date default CURRENT_TIMESTAMP ,editDate date default CURRENT_TIMESTAMP,")

android如何获取SD卡上的多媒体文件

你说的曾经没有我的故事 提交于 2019-12-09 17:53:49
获取视频文件: ContentResolver contentResolver = mContext.getContentResolver(); String[] projection = new String[]{MediaStore.Video.Media.TITLE}; Cursor cursor = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER); cursor.moveToFirst(); int fileNum = cursor.getCount(); for(int counter = 0; counter < fileNum; counter++){ Log.w(TAG, "----------------------file is: " + cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TITLE)) ); cursor.moveToNext(); } cursor.close(); 如果获取路径,需要讲projection修改为String[] projection =