Android 存储学习之SQLite数据库的基本操作

本节学习SQLite数据库,SQLite是Android内置的一个简单的轻量级的数据库。关于SQLite的简介我这里不做过多的介绍。

既然我们要学习数据库的基本操纵,那就离不开,数据库的创建,增删改查等操作。

再学习数据库的相关操作前,我先给大家介绍一个类:SQLiteOpenHelper。SQLiteOpenHelper是Android系统为方便程序的开发引入的一个对数据库管理的工具类。可用于关于数据库的创建和版本更新。一般的用法是创建SQLiteOpenHelper的子类,并实现它的OnCreate方法和OnUpdate方法。

比如:下面是我定义的一个SQLiteOpenHelper的子类:

public class MySQLiteOpenHelper extends SQLiteOpenHelper {

	/*
	 * context: 上下文,通常是Activity
	 * name: 数据库的文件的名字
	 * factory:通常为默认是null
	 * version:数据库的版本号,通常从1开始,且必须大于0
	 */
	public MySQLiteOpenHelper(Context context, String name,
			CursorFactory factory, int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	//数据库创建时调用
	@Override
	public void onCreate(SQLiteDatabase arg0) {
		Log.i("MySQLiteOpenHelper", "onCreate-----被调用了!");
	}

	//数据库升级时调用
	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		Log.i("MySQLiteOpenHelper", "onUpgrade-------被调用了");
	}
}

我们必须要实现子类的构造方法。

既然我们大概认识了SQLiteOpenHelper,那我们就先开始行动。

1: 先创建一个关于天气的数据库

	private SQLiteDatabase db;
	public void create()
	{
		MySQLiteOpenHelper oh = new MySQLiteOpenHelper(getContext(), "weather.db", null, 1);

		/*如果数据库不存在,先创建数据库,再获取可读可写的数据库对象。如果数据库存在,直接打开。
		 * 一般情况下:getWritableDatabase和getReadableDatabase返回的都是可读可写的数据库
		 * 但是出错情况下:比如磁盘已满,则调用getReadableDatabase返回的只是只读 的数据库。具体见API说明
		 */
		db = oh.getWritableDatabase();
		//oh.getReadableDatabase();
	}

当第一次没有数据库时,就会调用MySQLiteOpenHelper中的create方法

//数据库创建时调用
	@Override
	public void onCreate(SQLiteDatabase db) {
		Log.i("MySQLiteOpenHelper", "onCreate-----被调用了!");
		db.execSQL("create table weather(_id integer primary key autoincrement, city char(10), temp integer(3), pm integer(5))");
	}

当我测试后:

此时在包名下面的databasesx下数据库就已经存在了

打开后发现:

这时候数据库已经存在了,此时如果再次调用oh.getWritableDatabase();或者oh.getReadableDatabase();就直接打开数据库,不会再调用OnCreate方法了。

2:给数据库中插入几条数据

public void insert()
{
	//得到数据库对象
	MySQLiteOpenHelper oh = new MySQLiteOpenHelper(getContext(), "weather.db", null, 1);
	db = oh.getWritableDatabase();

	//插入4条记录
	db.execSQL("insert into weather(city, temp, pm) values(?, ?, ?)", new Object[]{"北京",37,280});
	db.execSQL("insert into weather(city, temp, pm) values(?, ?, ?)", new Object[]{"西安",35,200});
	db.execSQL("insert into weather(city, temp, pm) values(?, ?, ?)", new Object[]{"上海",37,100});
	db.execSQL("insert into weather(city, temp, pm) values(?, ?, ?)", new Object[]{"哈尔滨",30,80});

	//关闭数据库
	db.close();
}

导出数据库:

3:删除一条记录

public void delete()
{
	//得到数据库对象
	MySQLiteOpenHelper oh = new MySQLiteOpenHelper(getContext(), "weather.db", null, 1);
	db = oh.getWritableDatabase();

	//删除城市名为哈尔滨
	db.execSQL("delete from weather where city = ?", new Object[]{"哈尔滨"});

	//关闭数据库
	db.close();
}

导出后显示为:

4:修改西安的温度到36度

public void update()
{
	//得到数据库对象
	MySQLiteOpenHelper oh = new MySQLiteOpenHelper(getContext(), "weather.db", null, 1);
	db = oh.getWritableDatabase();

	//修改西安的温度为36度
	db.execSQL("update weather set temp = ? where city = ?", new Object[]{36, "西安"});

	//关闭数据库
	db.close();
}

导出显示为:

5:查询温度大于36度的城市

public void query()
{
	//得到数据库对象
	MySQLiteOpenHelper oh = new MySQLiteOpenHelper(getContext(), "weather.db", null, 1);
	db = oh.getWritableDatabase();

	//查询温度大于36的城市
	Cursor cursor = db.rawQuery("select * from weather where temp > ?",  new String[]{"36"});
	while(cursor.moveToNext())
	{
		String city = cursor.getString(cursor.getColumnIndex("city"));
		String temp = cursor.getString(cursor.getColumnIndex("temp"));
		String pm = cursor.getString(cursor.getColumnIndex("pm"));

		System.out.println(city + ";" + temp + ";" + pm);
	}

	//关闭数据库
	db.close();
}

打印为:

关于数据库的增删改查就到这里。大家有木有发现直接写SQL语句是不是很麻烦,同时也可能会写错一个字母。所以Google给我们提供了一套API,可以很方便的操作数据库。关于使用API我们下节再说。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 23:39:30

Android 存储学习之SQLite数据库的基本操作的相关文章

Android数据的四种存储方式之SQLite数据库

Test.java: /** * 本例解决的问题: * 核心问题:通过SQLiteOpenHelper类创建数据库对象 * 通过数据库对象对数据库的数据的操作 * 1.sql语句方式操作SQLite数据库 * 2.谷歌提供的api对SQLite数据库的操作 * 3.SQLite对事务的操作 */ import com.ghsy.createsqlitedb.db.MyOpenHelper; import android.content.ContentValues; import android.

cocos2d-x 2.1 Win32+Android开发中的sqlite数据库加密技术探讨

注意:本博客转移自本人约一年前的ITPUB博客文章,为的是便于学员参考之用. 很显然,cocos2d-x编程中只了解基本的sqlite数据库操作技术只是一个开头,真正把此数据库数据应用于实际中不使用一定的加密及解密技术几乎是不行的. 这个问题尽早会来到我面前,这不?现在就来了.一开始,自然想使用最省工的了:但是,这样的好事并不多,极少极少...... 于是,我先搜罗了一些现成的文章拿来一阅. 1,Sqlite数据库加密解密 SRC: http://blog.sina.com.cn/s/blog_

Android——使用SQLiteDatabase操作SQLite数据库

除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n).char(n).decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型. SQLite最大的特点是

IOS开发-UI学习-sqlite数据库的操作

IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还快,在ios和安卓app中常用来完成对数据进行离线缓存的处理,如新闻数据的离线缓存. 它的基本操作步骤是: 1.先加入sqlite开发库libsqlite3.dylib, 2.新建或打开数据库, 3.创建数据表, 4.插入数据, 5.查询数据并打印, 6.关闭数据库, 具体操作步

Android 查看和管理sqlite数据库

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databases中. 使用DDMS导出sqlite数据库. 1.首先打开android项目的调试模式,然后找到显示DDMS: 选择DDMS 2.切换到DDMS,显示File Explorer窗口,找到/data/data/ 然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了.选择将

Android 存储学习之在外部存储中读写文件

上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件.那就是如何在Sdcard中读写文件. 那我们还是用以前登录界面的例子举例说明,(登录界面请看上节Android 存储学习之在内部存储中读写文件) 先我们显示写的代码: 当点击确定并且自动登录的钩是选中的,则就会在sdcard文件夹写创建一个info.txt文件 public void login(View v) { String name = ed_nam.getText().toString(); String p

Android 存储学习之使用SharedPreference保存文件

上两节我们都是使用文本文件保存用户的信息,这明显是存在漏洞的.同时对文件中的内容不好管理.今天我们学习用SharedPreference保存.sharedPreference是专门保存一些比较零散的数据的. 我们还是用上节的例子分析,将用户的信息使用SharedPreference来保存. 注意:如果不知道是什么例子,请看Android 存储学习之在内部存储中读写文件 当点击确定按钮后,就会保存用户的信息: public void login(View v) { String name = ed

通过adb shell操作android真机的SQLite数据库

要通过命令行直接操作android真机上的SQLite数据库,可以直接通过adb shell来完成,不过,前提是必须获得root权限. 另外,android系统其实就是linux的shell,这个应该大家都知道,不过一般情况下,在/system/xbin/目录下, 没有sqlite3命令,需要手动copy一个进去,通常情况下,需要两个文件 sqlite3.libncurses.so 解压后两个文件都有了,比如解压到:~/Downloads/sqlite3/ 然后就是通过下面的这些个命令,一步一步

Android开发之通过Android的API对sqlite数据库的操作以及数据库事务的练习

一.通过Android的API对sqlite数据库的操作 通过已有的ContentValues类,实例一个对象value来调用其中内部的方法来操作sqlite数据库 代码: package com.example.databasedemo; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sql