Android学习开发笔记之SQLite数据库操作

前言

这几天朋友让帮忙写个Android数据库操作的demo,花了点时间重新学习了一下SQLite的操作然后写了这个demo,写的比较简单,主要是一些入门级的操作。正好自己记录一下这次学习的过程。

关于SQLite数据库

在Android系统中,Google集成了一个轻量级的数据库:SQLite,SQLite不像我们做PC端的web开发时用的Oracle、MySQL等数据库,它支持的数据量比较小,从名字上也可以看出来是一个轻量级(lite)的数据库。SQLite支持SQL语句,但是并不需要安装、启动服务器进程等操作,连接技术也没那么复杂。SQLite数据库在Android系统中就是一个文件,比较类似于Access。

关于Android数据库的操作主要用到的两个类是SQLiteDatabase和SQLiteOpenHelper。其中SQLiteDatabase继承自SQLiteClosable,它的主要功能在Google的官方文档中的解释是:Exposes methods to manage a SQLite database,也就是提供管理SQLite数据库的方法;SQLiteOpenHelper直接继承自Object,官方解释是: A helperclass to manage database creation and version management,可见其主要功能是创建数据库和版本控制。在实际的使用中,通常会定义子类继承使用SQLiteOpenHelper,然后使用该子类的getReadableDatabase方法和getWriteableDatabase方法来打开数据库。

具体实现

程序中我主要使用了两个类:继承自SQLiteOpenHelper的子类DatabaseHelper和继承的Activity子类。首先来看一下DatabaseHelper的实现:

final String CREATE_TABLE_SQL =
			"create table user(id integer primary "
			+ "key autoincrement ,"
			+ "username varchar(50), "
			+ "password varchar(50) )";
//在DatabaseHelper的onCreat方法中执行建表语句
public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL(CREATE_TABLE_SQL);
}
然后在MainActivity中的具体实现如下:

public class MainActivity extends Activity {

	//两个输入框、登陆和注册按钮
	private EditText editUser;
	private EditText editPwd;
	private Button login;
	private Button register;
	//显示注册与查询结果的TextView
	private TextView show;
	//存储用户名密码的查询结果
	private String userName;
	private String passWord;
	
	//继承于SQLiteHelper,用来对数据库进行操作
	DatabaseHelper db;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		editUser = (EditText) findViewById(R.id.edit_user);
		editPwd = (EditText) findViewById(R.id.edit_pwd);
		login = (Button) findViewById(R.id.login);
		register = (Button) findViewById(R.id.register);
		show = (TextView)findViewById(R.id.show);
		
		//创建数据库,数据库的名称为test.db3,数据库文件在程序安装目录的databases目录下
		db = new DatabaseHelper(this, "test.db3", null, 1);
		//登录按钮点击事件监听器
		login.setOnClickListener(new OnClickListener() {
		
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//获取输入的文本框中的内容
				String username = editUser.getText().toString();
				String password = editPwd.getText().toString();
				
//				login方法是自己定义的,具体实现在下面,有两个功能:
//				一是执行查询语句,返回的结果存在cursor中
//			            二是当满足查询条件时,通过cursor的一些方法提取出数据库中用户名和密码的信息放到userName与passWord中
//				注意参数中的getReadableDatabase()方法,这是SQLiteHelper提供的打开数据库的方法
//				getReadableDatabase()是以读写的方式打开数据库对应的SQLiteDatabase对象
//				getWritableDatabase()是以写的方式打开数据库对应的SQLiteDatabase对象
				if(login(db.getReadableDatabase(), username, password)){
					//在TextView中显示相关信息
					show.setText("登陸成功\n用户名:" + userName + "\n密    码:" + passWord);
				}
				else{
					show.setText("用户名或密码错误");
				}
//				关闭数据库连接
				db.close();
			}
		});
		register.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

				//获取输入的文本框中的内容
				String username = editUser.getText().toString();
				String password = editPwd.getText().toString();

				//注册方法
				insert(db.getReadableDatabase(), username, password);
				show.setText("用户名:" + username + "\n密    码:" + password);
				
				db.close();
			}
		});
	}


	private void insert(SQLiteDatabase db, String username, String password) {

		//执行insert语句execSQL是SQLiteDatabase提供的执行SQL语句的方法,没有返回值,所以一般不用做查询
		db.execSQL("insert into user values(null,?,?)", new String[] {
				username, password });
	}

	public boolean login(SQLiteDatabase db, String username, String password) {
		
		String sql = "select * from user where username=? and password=?";
		//执行SQL查询语句,返回一个Cursor对象,类似于JDBC中的ResultSet
		Cursor cursor = db.rawQuery(sql, new String[] { username, password });
		
		if (cursor.moveToFirst() == true) {
			//如果cursor中有记录,提取cursor中用户名密码信息然后关闭cursor并返回true
			userName = cursor.getString(cursor.getColumnIndex("username"));
			passWord = cursor.getString(cursor.getColumnIndex("password"));
			
			cursor.close();
			return true;
		}
		return false;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

程序代码请移步: 程序源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值