在前面使用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数据库的操作的更多相关文章

  1. django 中连接mysql数据库的操作步骤

    django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys ...

  2. Android Studio连接SQLite数据库与SQLite Studio实时同步的实现

    最近学习用到了android开发连接数据库这一块,发现连接成功后,都要先访问安卓项目的数据库路径data/data/项目/databases,然后把对应的db文件拷出来,再在SQLite的可视化工具中 ...

  3. Android如何连接MySQL数据库

    Android开发中,大多数连接到远程MySQL数据库的方法是加入特定的Service到代码中.由于MySQL通常是和PHP一起使用的,最简单以及最常见的方法是写PHP脚本管理数据连接,以及从Andr ...

  4. [Android]AndroidInject增加sqlite3数据库映射注解(ORM)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...

  5. SQLite3数据库的操作

    数据库的操作 我们在这个项目中使用的是SQLITE3数据库软件. 通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中. 打开数据 ...

  6. Android大学课件SQLite3 数据库操作

    一.数据库介绍 SQLite3:当有大量相似结构的数据需要存储的时候 . 其实SQLite3 就是一个文件,类似之前学过的MySQL SqlServer等. 二.SQLiteOpenHelper 是一 ...

  7. android怎么连接sqlite数据库?

    SQLite数据库首先先建立SQLiteOpenHelper()的子类实现SQLiteOpenHelper中的OnCreate()方法和构造方法. this class takes care of o ...

  8. Android基础之sqlite 数据库简单操作

    尽管很简单,但是也存下来,以后直接粘过去就能用了. public class DBHelper extends SQLiteOpenHelper {      private static final ...

  9. Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录

    第一步:下载第三方库,点击 连接 下载, 第二部:准备数据库:按照连接&中博客的步骤实现数据库, 数据库的设计大致如下表: id        username             pas ...

随机推荐

  1. Is there anyway to discover which ip addresses are connected to the db?

    From mongo shell run db.currentOp() to show all active connections or db.currentOp(true) to show all ...

  2. .NET 服务器定位模式(Service Locator Pattern)——Common Service Locator

    本文内容 场景 目标 解决方案 实现细节 思考 相关模式 更多信息 参考资料 Common Service Locator 代码很简单,它一般不会单独使用,而是作为一个单件模式,与像 .net Uni ...

  3. PAT《数据结构学习与实验指导》实验项目集 2-09 2-10 2-11 2-12 2-13

    pat 2-09 装箱问题模拟 #include<cstdio> #include<set> #include<vector> using namespace st ...

  4. MDX Step by Step 读书笔记(八) - Navigating Hierarchies 层次结构导航

    开篇介绍 本章主要内容包括: 解释各种不同的 MDX 导航函数的使用: Parent, Children, FirstChild, LastChild, Siblings, FirstSibling, ...

  5. Spring-boot logback日志处理

    1:在resources目录下面创建logback.xml配置文件 <?xml version="1.0"?> <configuration> <!- ...

  6. mac pro 显示隐藏文件

    经常希望在IOS操作系统现实隐藏文件,下面两条语句可以使用: 显示:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏:de ...

  7. 初识:JMX

    来自:http://blog.csdn.net/derekjiang/article/details/4531952 JMX是一份规范,SUN依据这个规范在JDK(1.3.1.4.5.0)提供了JMX ...

  8. ES6 class 技术点拾遗

    语法 方法不需要加function,方法之间不需要加分号 class Point { constructor(x, y) { this.x = x; this.y = y; } toString() ...

  9. Docker 命令导图

  10. Tomcat上文件的绝对路径访问笔记

    部署到Tomcat上的web项目的文件在代码中访问,可以先通过request获取到项目的根目录绝对路径,然后自己拼接子目录路径,直到文件.方法如下: String realpath=request.g ...