Android_SQLite使用方法

一、SQLite介绍     

        SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。 

二、SQLiteOpenHelper使用方法 

JAVA中使用JDBC来访问数据库,而Android则设计使用一套自己的API来访问数据库,必须要是用到SQLiteOpenHelper方法来访问数据库,不使用也可以,但会很麻烦。SQLiteOpenHelper是一个管理数据库的创建、版本等操作的帮助类。可以创建一个子类去实现一些方法。SQLiteOpenHelper是一个抽象类,用户需要继承这个类,并实现该类中的一些方法。

使用SQLiteOpenHelper来访问数据库必须要使用一些方法:

getReadableDatabase():创建或者打开一个可读的数据库,会返回一个SQLiteDatabase对象,基于这个对象可以进行增删改查等操作

getWritableDatabase():创建或者打开一个(可读)可写的数据库,会返回一个SQLiteDatabase对象,基于这个对象可以进行增删改查等操作

onCreate(SQLiteDatabase db):回调函数,当数据库被第一次创建时调用

onOpen(SQLiteDatabase db):回调函数,当数据库被打开时调用

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):回调函数,当数据库被更新时调用

close():关闭数据库 

三、使用abd访问SQLite

adb的全称为Android Debug Bridge,起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS调试Android程序,其实就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDEQemu通讯,默认情况下adbdaemon相关的网络端口,所以当我们运行Eclipseadb进程就会自动运行。

adbandroid sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备(G1手机).它的主要功能有:  

1)     运行设备的shell(命令行)  

2)     管理模拟器或设备的端口映射  

3)     计算机和设备之间上传/下载文件  

4)     将本地apk软件安装至模拟器或android设备  

ADB是一个客户端-服务器端,其中客户端是你用来操作的电脑, 服务器端是android设备

打开命令行,输入adb,就会看到adb的相关命令。如果看到的是adb不是内部或外部命令这个提示,说明环境变量没有配置好,以前path只配置了sdk目录下的tools,对于旧版本中adb.exe就在该目录下,可以正常启动。但是对于新版本sdkadb.exe被移动到了platform- tools目录下,这一点需要注意。

如果此时提示Device not found,则是因为模拟器没有启动,需要先启动模拟器,启动模拟器可以从Eclipse上的Opens Android SDK and AVD Manageer上选择需要启动的模拟器进行启动,也可以从命令行进行启动。

SQLite数据库放在./data/data/当前虚拟机运行的应用程序的包名/databases/目录里。当没有创建数据库的时候,是没有databases目录的,只有当数据库创建成功时才有。此时只有lib目录,没有databases目录。当运行创建程序之后,就会创建databases目录,且该目录下有数据库。

四、增、删、改、查操作

/**
 * SQLiteDataBaseHelper作为一个访问SQLite的助手类,提供了两个方面的功能
 * 第一:getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
 * 第二:提供onCreate(),onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作
 */
public class DataBaseHelper extends SQLiteOpenHelper {
	private static final int VERSION = 1;
	//在SQLiteOpenHelper子类当中,必须有该构造函数
	public DataBaseHelper(Context context, String name, CursorFactory factory,
			int version) {
		//必须通过super调用父类当中的构造函数
		super(context, name, factory, version);
	}
	
	public DataBaseHelper(Context context,String name){
		this(context,name,VERSION);
	}
	
	public DataBaseHelper(Context context,String name,int version){
		this(context, name,null,VERSION);
	}	
	
	//当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行,也就是第一次得到SQLiteDatabase对象的时候,才会调用这个方法
	@Override
	public void onCreate(SQLiteDatabase db) {
		System.out.println("create a DataBase");
		db.execSQL("create table user(id int,name varchar(20))");
	}

	//当打开数据库时传入的版本号与当前的版本号不同时调用该方法
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		System.out.println("update a DataBase");
	}	
}
public class SQLiteActivity extends Activity {
	private Button createDataBaseButton = null;
	private Button updateDataBaseButton = null;
	private Button insertButton = null;
	private Button updateButton = null;
	private Button queryButton = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sqlite);		
		createDataBaseButton = (Button) findViewById(R.id.createDataBaseButton);
		updateDataBaseButton = (Button) findViewById(R.id.updateDataBaseButton);
		insertButton = (Button) findViewById(R.id.insertBaseButton);
		updateButton = (Button) findViewById(R.id.updateButton);
		queryButton = (Button) findViewById(R.id.queryButton);		
		createDataBaseButton.setOnClickListener(new CreateDataBaseListener());		
		updateDataBaseButton.setOnClickListener(new UpdateDataBaseListener());
		insertButton.setOnClickListener(new InsertButtonListener());
		updateButton.setOnClickListener(new UpdateButtonListener());
		queryButton.setOnClickListener(new QueryButtonListener());
	}
	
	class CreateDataBaseListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			//创建一个SQLiteDataBaseHelper对象
			DataBaseHelper dbHelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
			//只有调用了DataBaseHelper对象的getReadableDatabase()或者getWritableDatabase()方法之后,才会创建或者打开一个数据库
			SQLiteDatabase db = dbHelper.getReadableDatabase();
		}
	}
	
	class UpdateDataBaseListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			DataBaseHelper dbHelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
			SQLiteDatabase db = dbHelper.getReadableDatabase();
		}
	}
	
	class InsertButtonListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			//生成ContentValues对象,和map对象差不多,存放的都是键值对
			ContentValues values = new  ContentValues();
			//向该对象中插入键值对,其中键是列名,值是和列类型一致的值
			values.put("id",1);
			values.put("name", "zhangsan");
			DataBaseHelper dbhelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
			SQLiteDatabase db = dbhelper.getWritableDatabase();
			//调用insert方法,就可以将数据库插入到数据库中,参数:表明、默认空值、ContentValues对象
			db.insert("user", null, values);
		}
	}
	
	class UpdateButtonListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			DataBaseHelper dbHelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
			SQLiteDatabase db = dbHelper.getWritableDatabase();
			ContentValues values = new ContentValues();
			values.put("name","zhangsanfeng");
			//(1):要更新的表明;(2):ContentValues对象;(3):where子句;(4):对占位符进行赋值,第一个元素赋值给第一个占位符;
			db.update("user", values, "id=?", new String[]{"1"});
		}
	}
	
	class QueryButtonListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			DataBaseHelper dbHelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
			SQLiteDatabase db = dbHelper.getReadableDatabase();
			Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, 
					null, null, null);
			while(cursor.moveToNext()){
				String name = cursor.getString(cursor.getColumnIndex("name"));
				System.out.println("Name is ---> " + name);
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值