Android-操作SQLite数据库

方法一:

用SQLiteDatabase的execSQL来执行传统的sql语句

package com.example.android_db.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.example.android_db.db.DbOpenHelper;
import com.example.android_db.service.PersonService;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
 * 用SQLiteDatabase的execSQL来执行sql语句
 * @author 连波
 *
 */
public class PersonDao implements PersonService {

	private DbOpenHelper helper = null;
	
	public PersonDao(Context context) {
		// TODO Auto-generated constructor stub
		helper = new DbOpenHelper(context);
	}

	@Override
	public boolean addPerson(Object[] params) {
		// TODO Auto-generated method stub
		boolean flag = false;
		//实现对数据库的添加删除和修改查询功能
		SQLiteDatabase database = null;
		try {
			String sql = "insert into person(name,address,sex) values(?,?,?)";
			database = helper.getWritableDatabase();//实现打开对写的操作
			database.execSQL(sql,params);
			flag = true;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally
		{
			if(database!=null)
				database.close();
		}
		return flag;
	}

	@Override
	public boolean deletePerson(Object[] params) {
		// TODO Auto-generated method stub
		boolean flag = false;
		SQLiteDatabase database = null;
		try {
			String sql = "delete from person where id = ?";
			database = helper.getWritableDatabase();
			database.execSQL(sql,params);
			flag = true;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally
		{
			if(database!=null)
			{
				database.close();
			}
		}
		return flag;
	}

	@Override
	public boolean updatePerson(Object[] params) {
		// TODO Auto-generated method stub
		boolean flag = false;
		SQLiteDatabase database = null;
		try {
			String sql = "update person set name=?, address=?,sex=? where id=? ";
			database = helper.getWritableDatabase();
			database.execSQL(sql,params);
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		}finally
		{
			if(database!=null)
				database.close();
		}
		return flag;
	}

	@Override
	public Map<String, String> viewPerson(String[] selectionArgs) 
	{
		Map<String,String> map = new HashMap<String,String>();
		SQLiteDatabase database = null;
		try {
			String sql = "select * from person where id=?";
			database = helper.getReadableDatabase();
			Cursor cursor = database.rawQuery(sql, selectionArgs);
			//获得数据库的列的个数
			int colums = cursor.getColumnCount();
			while (cursor.moveToNext()) 
			{
				for (int i = 0; i < colums; i++)
				{
					String cols_name = cursor.getColumnName(i);
					String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));
					if(cols_value==null)
					{
						cols_value = "";
					}
					map.put(cols_name, cols_value);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally
		{
			if(database!=null)
				database.close();
		}
		return map;
	}

	@Override
	public List<Map<String, String>> listPersonMaps(String[] selectionArgs) {
		// TODO Auto-generated method stub
		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
		SQLiteDatabase database = null;
		try {
			String sql = "select * from person ";
			database = helper.getReadableDatabase();
			Cursor cursor = database.rawQuery(sql, selectionArgs);
			int colums= cursor.getColumnCount();
			while (cursor.moveToNext())
			{
				Map<String,String> map = new HashMap<String,String>();
				for (int i = 0; i <colums; i++) 
				{
					String cols_name = cursor.getColumnName(i);
					String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));
					if(cols_value==null)
					{
						cols_value = "";
					}
					map.put(cols_name, cols_value);
				}
				list.add(map);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally
		{
			if(database!=null)
				database.close();
		}
		return list;
	}
}

package com.example.android_db.test;

import java.util.List;
import java.util.Map;
import com.example.android_db.dao.PersonDao;
import com.example.android_db.db.DbOpenHelper;
import com.example.android_db.service.PersonService;
import android.content.Context;
import android.test.AndroidTestCase;
import android.util.Log;

public class MyTest extends AndroidTestCase {

	private final String TAG = "MyTest";
	public MyTest() {
		// TODO Auto-generated constructor stub
	}
	
	public void createDb()
	{
		Context context = getContext();
		DbOpenHelper dbOpenHelper = new DbOpenHelper(context);
		//只有调用getReadableDatabase或者getWritableDatabase时候数据库才被创建
		dbOpenHelper.getReadableDatabase();
		Log.i(TAG, "createDb");
	}
	
	public void insertDB()
	{
		PersonService personService = new PersonDao(getContext());
		Object[] params = new String[]{"李四","江苏","男"};
		boolean flag = personService.addPerson(params);
		Log.i(TAG, "insertDB "+flag+"");
	}
	
	public void deleteDB()
	{
		PersonService personService = new PersonDao(getContext());
		Object[] params = {1};
		boolean flag = personService.deletePerson(params);
		Log.i(TAG, "deleteDB "+flag+"");
	}
	
	public void  updataDB()
	{
		PersonService personService = new PersonDao(getContext());
		Object[] params = {"张三","杭州","女",3};
		boolean flag = personService.updatePerson(params);
		Log.i(TAG, "updataDB "+flag+"");
	}
	
	public void querySingleDB()
	{
		PersonService personService = new PersonDao(getContext());
		String[] params = {"3"};
		Map<String, String> map = personService.viewPerson(params);
		Log.i(TAG, "querySingleDB name:"+map.get("name")+" address:"+map.get("address")+" sex:"+map.get("sex"));
	}
	
	public void queryManyDB()
	{
		PersonService personService = new PersonDao(getContext());
		List<Map<String, String>> list = personService.listPersonMaps(null);
		for (Map<String, String> map : list) 
		{
			Log.i(TAG, "queryManyDB name:"+map.get("name")+" address:"+map.get("address")+" sex:"+map.get("sex"));
		}
	}
}


方法二:

用SQLiteDatabase的insert delete update来操作数据库

<pre name="code" class="html">package com.example.android_db.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.example.android_db.db.DbOpenHelper;
import com.example.android_db.service.PersonService2;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
 * 用SQLiteDatabase的insert delete update来操作数据库
 * @author 连波
 *
 */
public class PersonDao2 implements PersonService2 {

	private DbOpenHelper helper = null;
	public PersonDao2(Context context) {
		// TODO Auto-generated constructor stub
		helper = new DbOpenHelper(context);
	}
	@Override
	public boolean addPerson(ContentValues values) {
		// TODO Auto-generated method stub
		boolean flag = false;
		SQLiteDatabase database = null;
		try {
			database = helper.getWritableDatabase();
			//如果第二个参数nullColumnHack,当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),
			//为了防止这种情况,我们要在这里指定一个 列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。
			long rowid = database.insert("person", null, values);
			//返回新添记录的行号,该行号是一个内部直,与主键id无关,发生错误返回-1
			if(rowid!=-1)
			{
				flag = true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally
		{
			if(database!=null)
				database.close();
		}
		return flag;
	}

	@Override
	public boolean deletePerson(String[] whereArgs) {
		// TODO Auto-generated method stub
		boolean flag = false;
		SQLiteDatabase database = null;
		try {
			database = helper.getWritableDatabase();
			int num = database.delete("person", "name=?", whereArgs);
			System.out.println(num);
			if(num!=0)
				flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(database!=null)
				database.close();
		}
		return flag;
	}

	@Override
	public boolean updatePerson(ContentValues values,String[] whereArgs) {
		// TODO Auto-generated method stub
		boolean flag = false;
		SQLiteDatabase database = null;
		try {
			database = helper.getWritableDatabase();
			int num = database.update("person", values, "id=?", whereArgs);
			if(num>0)
				flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(database!=null)
				database.close();
		}
		return flag;
	}

	@Override
	public Map<String, String> viewPerson(String selection,String[] selectionArgs) {
		// TODO Auto-generated method stub
		SQLiteDatabase database = null;
		Map<String,String> map = new HashMap<String,String>();
		try {
			database = helper.getWritableDatabase();
			Cursor cursor = database.query(true, "person", null, selection, selectionArgs, null, null, null, null);
			int cols_len = cursor.getColumnCount();
			while (cursor.moveToNext()) {
				for (int i = 0; i < cols_len; i++) 
				{
					String cols_name = cursor.getColumnName(i);
					String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));
					map.put(cols_name, cols_value);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(database!=null)
				database.close();
		}
		return map;
	}

	@Override
	public List<Map<String, String>> listPersonMaps(String selection,String[] selectionArgs) {
		// TODO Auto-generated method stub
		SQLiteDatabase database = null;
		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
		try {
			database = helper.getWritableDatabase();
			Cursor cursor = database.query(true, "person", null, selection, selectionArgs, null, null, null, null);
			int cols_len = cursor.getColumnCount();
			while (cursor.moveToNext()) {
				Map<String,String> map = new HashMap<String,String>();
				for (int i = 0; i < cols_len; i++) 
				{
					String cols_name = cursor.getColumnName(i);
					String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));
					map.put(cols_name, cols_value);
				}
				list.add(map);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(database!=null)
				database.close();
		}
		return list;
	}


}

 

package com.example.android_db.test;

import java.util.List;
import java.util.Map;
import com.example.android_db.dao.PersonDao2;
import com.example.android_db.service.PersonService2;
import android.content.ContentValues;
import android.test.AndroidTestCase;
import android.util.Log;

public class MyTest2 extends AndroidTestCase {

	private final String TAG = "MyTest";
	public MyTest2() {
		// TODO Auto-generated constructor stub
		
	}
	
	public void insertDB()
	{
		PersonService2 personService = new PersonDao2(getContext());
		ContentValues values = new ContentValues();//类似map的属性
		values.put("name", "赵五");
		values.put("address", "连云港");
		values.put("sex", "女");
		boolean flag = personService.addPerson(values);
		Log.i(TAG, "insertDB "+flag+"");
	}

	public void deleteDB()
	{
		PersonService2 personService = new PersonDao2(getContext());
		String[] whereArgs = {"张三"};
		boolean flag = personService.deletePerson(whereArgs);
		Log.i(TAG, "deleteDB "+flag+"");
	}
	
	public void upDateDB()
	{
		PersonService2 personService = new PersonDao2(getContext());
		ContentValues values = new ContentValues();//类似map的属性
		values.put("name", "许连波");
		values.put("address", "连云港");
		values.put("sex", "男");
		String[] whereArgs = {"2"};
		boolean flag = personService.updatePerson(values, whereArgs);
		Log.i(TAG, "upDateDB "+flag+"");
	}
	
	public void querySingleDB()
	{
		PersonService2 personService = new PersonDao2(getContext());
		String selection = "name=? and sex=?";
		String[] selectionArgs = {"李四","男"};
		Map<String, String> map = personService.viewPerson(selection, selectionArgs);
		Log.i(TAG, "querySingleDB name:"+map.get("name")+" address:"+map.get("address")+" sex:"+map.get("sex"));
	}
	
	public void queryManyDB()
	{
		PersonService2 personService = new PersonDao2(getContext());
		String selection = "name=? and sex=?";
		String[] selectionArgs = {"李四","男"};
		List<Map<String, String>> list = personService.listPersonMaps(selection, selectionArgs);
		for (Map<String, String> map : list) 
		{
			Log.i(TAG, "querySingleDB name:"+map.get("name")+" address:"+map.get("address")+" sex:"+map.get("sex"));
		}
		
	}
}




### 回答1: Android中的SQLite数据库是一种轻量级的数据库,它可以在Android应用程序中存储和检索数据。SQLite数据库使用SQL语言来管理数据,可以在Android应用程序中创建、读取、更新和删除数据。使用SQLite数据库可以使应用程序更加高效和可靠,因为它可以在本地存储数据,而不需要访问网络。在Android中使用SQLite数据库需要使用SQLiteOpenHelper类来创建和管理数据库SQLiteOpenHelper类提供了一些方法来创建和升级数据库,以及插入、查询、更新和删除数据。在使用SQLite数据库时,需要注意数据类型、表结构、SQL语句等方面的问题,以确保数据的正确性和完整性。 ### 回答2: Android平台经常使用SQLite数据库来存储和管理本地数据。在本文中,我们将讨论如何在Android中使用SQLite数据库。 首先,在Android中使用SQLite数据库,我们需要创建一个SQLiteOpenHelper类。这个类用于创建和升级数据库。它包含了两个重要的方法:onCreate()和onUpgrade()。onCreate()方法将在首次创建数据库时被调用。onUpgrade()方法将在升级数据库时被调用。我们可以在这个类中定义表名,列名,数据库版本号和其他数据库相关信息。 接下来,在我们使用数据库前,需要实例化一个SQLiteOpenHelper类对象。这个对象用于打开或创建数据库。我们可以使用getReadableDatabase()和getWritableDatabase()方法来获取一个可读/写的数据库对象。 在获取数据库对象后,我们可以执行SQL命令来操作数据库。我们可以使用execSQL()方法来执行SQL命令。我们可以使用insert()、update()和delete()方法来执行增、删、改操作。我们可以使用rawQuery()方法来执行查询操作SQLiteOpenHelper类和SQLiteDatabase类并不是线程安全的。因此我们需要确保在使用时进行同步操作。我们可以使用synchronized关键字来达到同步效果。 在Android中,许多第三方的开源框架,如OrmLite、GreenDao和Realm等,提供了ORM(对象关系映射)的功能,使得数据库操作更加简单和便捷。 总的来说,在Android中使用SQLite数据库可以轻松地存储和管理本地数据。SQLiteOpenHelper和SQLiteDatabase提供了丰富的API来操作数据库。ORM框架为我们提供了更加简便的数据库操作方式。因此,掌握AndroidSQLite数据库的使用非常重要。 ### 回答3: Android SQLite数据库Android开发中最常用的数据库之一,它是一个基于文件的嵌入式关系数据库管理系统。SQLite在设计时考虑到了资源占用和运行效率,所以非常适合在移动设备上使用。下面将详细介绍如何使用Android SQLite数据库。 1. 创建数据库 首先需要创建一个SQLite数据库,通过SQLiteOpenHelper类来创建,传入的参数主要是数据库版本号和数据库名称。在SQLiteOpenHelper的子类中重写onCreate方法来创建表格和一些初始化操作。 2. 执行SQL语句 在SQLiteOpenHelper的子类中重写onUpgrade方法来执行升级操作,可以通过执行ALTER TABLE语句来修改表格结构,并通过DROP TABLE语句删除表格。除此之外,在应用中也可以通过SQLiteDataBase对象的execSQL方法来执行SQL语句,如插入、删除或修改数据等。 3. 增删改查操作 增加(insert):通过SQLiteDataBase对象的insert方法来实现,在方法中传入表名和map对象,map对象中存储数据的键值对。 删除(delete):同样通过SQLiteDataBase对象的delete方法来实现,传入表名和删除条件。 修改(update):也是通过SQLiteDataBase对象的update方法来实现,同时传入修改的数据及条件。 查询(query):同样通过SQLiteDataBase对象的query方法来实现,传入要查询的表名、查询的列、查询条件等参数即可。 4. 事务操作 SQlite数据库支持事务操作,可以在一组操作中,只要有一个操作出现问题,就可以将之前的操作全部回滚,以保证数据的完整性和一致性。 以上就是android-sqlite数据库的使用方法,当然还有很多细节需要注意,例如:表格的设计、SQL语句的优化等。熟练掌握SQLite的使用,可以帮助开发者更好地管理应用数据,提高应用性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值