【Android】Android连接SQLite3数据库的操作
在前面使用SQLite3的时候,并没有留意到有SQLiteOpenHelper这个类,所以只好在Activity里面去创建和维护数据库跟数据表的创建。
但是,现在有了SQLiteOpenHelper这个类,就可以把数据库和数据表,以及一些初始化的数据的维护跟Activity分开了。。。
数据库和数据表结构的创建,是只需要执行一次的,而打开数据库获取数据库相应的SQLiteDatabase操作类则有可能是每次运行程序都需要执行的,如何把这两个步骤操作合理的放到一个辅助类里面呢?SQLiteOpenHelper!木错!就是这个类,只需要继承这个类,调用构造函数SQLiteOpenHelper(Context context, String name, CursorFactory factory,int version)然后重写onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)这两个方法即可(不过好像我只是使用了onCreate...)。
下面说一下这个类的大概原理,假设你的SQLiteHelper继承于SQLiteOpenHelper类,调用SQLiteOpenHelper的构造函数并且实现了onCreate和断onUpgrade,当你在程序中调用getWritableDatabase()方法的时候,会自动去检查你的databases目录,如果里面不存在你需要打开的数据库文件,则会自动调用你所写的方法onCreate,然后返回你所创建的数据库表象,如果已经存在则会直接返回该数据库的表象。这样,我们初始化的数据库表,跟默认数据就可以放到onCreate函数里面去实现。。。
继承的类构造函数里面必须调用父类(SQLiteOpenHelper)的构造函数SQLiteOpenHelper(Context context, String name, CursorFactory factory,int version)。
context是为打开创建数据库库用的,name是数据库的文件名称,factory设置为空使用默认的,version是创建或打开的数据库的版本号,这个必须大于等于1
如果这一次的version版本和上一次打开的version不一致的时候,SQLiteOpenHelper就会自动调用onUpgrade方法。。
对了,在Activity中,如果打开了数据库,一定要记得关闭!!!
测试SQLiteOpenHelper的一个代码框架,
SQLiteHelper.java
package com.Yao_GUET.test;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* SQLite3数据库辅助类
* @author Yao.GUET
* blog: http://blog.csdn.net/Yao_GUET
* date: 2011-07-06
*/
public class SQLiteHelper extends SQLiteOpenHelper {
private final static String TAG = "SQLiteHelper";
public SQLiteHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.e(TAG, "SQLitehelper onCreate!");
try {
db.execSQL("Create TABLE Data( " +
"ID integer Primary Key AUTOINCREMENT, " +
"UserName varchar(50) " +
")");
Log.e(TAG, "createDataTable OK!");
} catch (SQLException se) {
se.printStackTrace();
}
}
@Override
public void onOpen(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.e(TAG, "SQLiteHelper on Open!");
super.onOpen(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
Log.e(TAG, "SQLitehelper onUpgrade!");
}
}
测试Activity
SQLiteHelperTest.java
package com.Yao_GUET.test;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Button;
import android.widget.TextView;
public class SQLiteHelperTest extends Activity {
private final static String TAG = "SQLiteHelperTest";
private SQLiteHelper sqlHelper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sqlitehelper_test);
sqlHelper = new SQLiteHelper(this, "test2.db", null, 2);
db = sqlHelper.getWritableDatabase();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
Log.e(TAG, "onDestroy!");
if (db != null)
db.close();
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
Log.e(TAG, "onPause");
super.onPause();
}
}
可以按照如下的思路来操作,sqlite数据库,
public class MainActivity extends Activity {
private final static String TAG = "SQLiteHelperTest";
private SQLiteHelper sqlHelper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sqlHelper = new SQLiteHelper(this, "test.db", null, 1);
db = sqlHelper.getWritableDatabase();
//如果不存在这个表,那么创建
db.execSQL("Create TABLE if not exists MyData( " +
"ID integer Primary Key AUTOINCREMENT, " +
"UserName varchar(50) not null,"+
"Password varchar(50) not null,"+
"expire TEXT not null"+
")");
//插入数据
db.execSQL("insert into MyData(UserName,Password,expire) values('abc','abc','2018-03-13 00:00:00')");
//修改数据
db.execSQL("update MyData set UserName='def' where ID=1");
db.close();
//查询数据
db=sqlHelper.getReadableDatabase();
Cursor cursor= db.rawQuery("select * from MyData", null);
while(cursor.moveToNext()){
int index= cursor.getColumnIndex("ID");
int id= cursor.getInt(index);
index=cursor.getColumnIndex("UserName");
String name=cursor.getString(index);
index=cursor.getColumnIndex("Password");
String password=cursor.getString(index);
index=cursor.getColumnIndex("expire");
String expire=cursor.getString(index);
Log.i("info", id+","+name+","+password+","+expire);
}
db.close();
}
}
Sqlite数据库的文件路径是 /data/data/包名/databases/数据库名,可以看出在sqllite中,是以每个数据库名作为一个文件进行存储的。需要注意的是data/data文件夹下的内容必需在手机root之后才能看见。
【Android】Android连接SQLite3数据库的操作的更多相关文章
- django 中连接mysql数据库的操作步骤
django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys ...
- Android Studio连接SQLite数据库与SQLite Studio实时同步的实现
最近学习用到了android开发连接数据库这一块,发现连接成功后,都要先访问安卓项目的数据库路径data/data/项目/databases,然后把对应的db文件拷出来,再在SQLite的可视化工具中 ...
- Android如何连接MySQL数据库
Android开发中,大多数连接到远程MySQL数据库的方法是加入特定的Service到代码中.由于MySQL通常是和PHP一起使用的,最简单以及最常见的方法是写PHP脚本管理数据连接,以及从Andr ...
- [Android]AndroidInject增加sqlite3数据库映射注解(ORM)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...
- SQLite3数据库的操作
数据库的操作 我们在这个项目中使用的是SQLITE3数据库软件. 通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中. 打开数据 ...
- Android大学课件SQLite3 数据库操作
一.数据库介绍 SQLite3:当有大量相似结构的数据需要存储的时候 . 其实SQLite3 就是一个文件,类似之前学过的MySQL SqlServer等. 二.SQLiteOpenHelper 是一 ...
- android怎么连接sqlite数据库?
SQLite数据库首先先建立SQLiteOpenHelper()的子类实现SQLiteOpenHelper中的OnCreate()方法和构造方法. this class takes care of o ...
- Android基础之sqlite 数据库简单操作
尽管很简单,但是也存下来,以后直接粘过去就能用了. public class DBHelper extends SQLiteOpenHelper { private static final ...
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
第一步:下载第三方库,点击 连接 下载, 第二部:准备数据库:按照连接&中博客的步骤实现数据库, 数据库的设计大致如下表: id username pas ...
随机推荐
- guns使用注意问题
guns使用注意问题 1,创建的表必须有注释,这样自动生成代码有标题: 2,必须先构建好结构,后期修改主菜单会产生异常的结构影响: 3,修改菜单编号容易产生异常问题: 4,如果没有id,不会自动生成增 ...
- hdu 5411 CRB and Puzzle (矩阵高速幂优化dp)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5411 题意:按题目转化的意思是,给定N和M,再给出一些边(u,v)表示u和v是连通的,问走0,1,2... ...
- HTTPS 原理与证书实践
1.1 网络安全知识 1.1.1 网结安全出现背景 网络就是实现不同主机之间的通讯,网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间可以进行通汛的目的,虽然看似简简单单几句 ...
- RibbonControl中的主题设计
Ribbon+扁平化 据调查,其实人们可能最多只用到全部 Office 功能的 5%,为此,微软交互式团队推出了Ribbon风格,一时间,很多软件升级后都换成了Ribbon界面:扁平化其实不是新东西, ...
- Windows Service 之 Bug 记录
1.未能将“obj\x86\Debug\**.exe”复制到“bin\Debug\**.exe”.超出了重试计数 10.失败. 解决方案:关闭 VS 程序,到上述下,把 **.exe 删掉,然后重新打 ...
- c++ windows下读取大文件(内存映射)
关于内存映射的基本知识以及一些函数的原型说明,参考博客:http://blog.csdn.net/wcyoot/article/details/7363393 下面是我对于读取一个104M文件大小,使 ...
- C++ 第五课:C/C++ 数据类型
C语言包含5个基本数据类型: void, integer, float, double, 和 char. 类型 描述 void 空类型 int 整型 float 浮点类型 double 双精度浮点类型 ...
- JAVA eclipse 安装lombok
1.下载lombok http://projectlombok.org/download.html 2.点击安装: 如果eclipse没有安装到默认目录,那么需要点击Specify选择eclipse的 ...
- markdown table语法
普通的表格 | 一个普通标题 | 一个普通标题 | 一个普通标题 | | ------ | ------ | ------ | | 短文本 | 中等文本 | 稍微长一点的文本 | | 稍微长一点的文本 ...
- kibana 显示 @timestamp 时间问题(utc or browser当前时间)自动转换显示
https://github.com/elasticsearch/kibana/issues/95