`

深入android数据库操作

阅读更多
一 android的数据库访问命令:    
      > sqlite3 jefry   --jefry 为数据库名
sqlite> .schema         --查看数据库中的表,显示建表语句


二 Java操作数据库主要有两种方法
第1种:execSQL()和rawQuery()方法

package com.sqllite;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DataBaseHelper extends SQLiteOpenHelper{
	private static final String name = "jefry"; //数据库名称
    private static final int version = 4; //数据库版本
	public DataBaseHelper(Context context) {
		super(context, name,null,version);  // 数据库名称决定是否执行onCreate()方法,数据库的版本决定是否执行onUpgrade()方法
    }

  @Override
  public void onCreate(SQLiteDatabase db) {
		
		 Log.i("DataBaseHelper", "db create...");
		 db.execSQL("CREATE TABLE IF NOT EXISTS " +
		 		"person (personid integer primary key autoincrement, name varchar(20), age INTEGER)");  
		 for(int i=0;i<20;i++) {
	      db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"emily"+ i, 22});
		 }
	 }

	@Override 
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         db.execSQL("DROP TABLE IF EXISTS person");
         onCreate(db);
    }

	public void queryPersons(SQLiteDatabase db){
		Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"emily%", "22"});
	    while (cursor.moveToNext()) {
	    	int personid = cursor.getInt(0);
	    	String personname = cursor.getString(1);
	    	int personage = cursor.getInt(2);
	    	if(personid<10) {
	    	 Log.i("DataBaseHelper", "[id= "+personid+",name="+personname+" ,age="+personage +"]");
	    	} else {
	    		Log.i("DataBaseHelper", "[id="+personid+",name="+personname+",age="+personage +"]");
	    	}
	    }
	   }
	}

第2种  insert()、delete()、update()和query()方法
package com.sqllite;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBase2Helper extends SQLiteOpenHelper{
	private static final String name = "jefry"; //数据库名称
    private static final int version = 4; //数据库版本
	public DataBase2Helper(Context context) {
		super(context, name,null,version);
    }

	@Override
	public void onCreate(SQLiteDatabase db) {
		
		 Log.i("DataBaseHelper", "db create...");
		 db.execSQL("CREATE TABLE IF NOT EXISTS " +
		 		"person (personid integer primary key autoincrement, name varchar(20), age INTEGER)");  
		 for(int i=0;i<20;i++) {
	      db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"emily"+ i, 22});
		 }
	 }

	@Override 
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         db.execSQL("DROP TABLE IF EXISTS person");
         onCreate(db);
       
	}

	public long insert(SQLiteDatabase db){
		ContentValues values = new ContentValues();
		values.put("age", 4);
		
		return db.insert("person", null, values); //第二个参数为空值字段,这里的name=null;select * from person where name is null;
	   }
   

 /** delete()方法的使用:
     SQLiteDatabase db = databaseHelper.getWritableDatabase();
     db.delete("person", "personid<?", new String[]{"2"});
     db.close();
 **/

 public long delete(SQLiteDatabase db){

    return db.delete("person", "personid<?", new String[]{"2"});
 }

 public long update(SQLiteDatabase db){
	 ContentValues values = new ContentValues();
	 values.put("name", "jefry");//key为字段名,value为值
	 return db.update("person", values, "personid=?", new String[]{"1"}); 
 } 
 /**
    query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
    table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
    columns:要查询出来的列名。相当于select语句select关键字后面的部分。
    selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
    selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
    groupBy:相当于select语句group by关键字后面的部分
    having:相当于select语句having关键字后面的部分
    orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
    limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。
  */
 
 public void query(SQLiteDatabase db){
	 Cursor cursor = db.query("person", new String[]{"personid,name,age"}, "name like ?", new String[]{"%jefry%"}, null, null, "personid desc", "1,2");
	 while (cursor.moveToNext()) {
	          int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
	         String name = cursor.getString(1);//获取第二列的值
	         int age = cursor.getInt(2);//获取第三列的值
	 }
	 cursor.close();
 }
 
}


三 事务与注意:
getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。

第一次调用getWritableDatabase()或getReadableDatabase()方法后,SQLiteOpenHelper会缓存当前的SQLiteDatabase实例,SQLiteDatabase实例正常情况下会维持数据库的打开状态,所以在你不再需要SQLiteDatabase实例时,请及时调用close()方法释放资源。一旦SQLiteDatabase实例被缓存,多次调用getWritableDatabase()或getReadableDatabase()方法得到的都是同一实例。


使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。使用例子如下: SQLiteDatabase db = ....;
db.beginTransaction();//开始事务
try {
    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"jefry", 4});
    db.execSQL("update person set name=? where personid=?", new Object[]{"jefry", 1});
    db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
} finally {
    db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
}
db.close();
上面两条SQL语句在同一个事务中执行。
分享到:
评论

相关推荐

    Android 数据库操作 以及命令行上操作sqlite

    本文将深入探讨Android中的SQLite数据库操作以及如何在命令行上操作SQLite。 首先,让我们了解Android如何与SQLite交互。在Android中,我们通常通过SQLiteOpenHelper类来创建、升级和访问数据库。这个类提供了方法...

    你想要Android数据库操作精华(安全、并发、单例等)

    本Demo——"你想要的Android数据库操作精华(安全、并发、单例等)",旨在深入探讨如何在Android Studio环境下进行高效且安全的数据库操作,包括使用数据库框架、数据库加密、并发控制以及单例模式的应用。...

    android数据库操作Demo

    本示例"android数据库操作Demo"提供了一个基础的教程,涵盖了数据库的基本操作,包括添加数据(增)、删除数据(删)、查询数据(查)和更新数据(改)。我们将深入探讨这些核心概念。 首先,Android使用SQLite作为...

    Android 数据库操作

    在这个"Android 数据库操作"主题中,我们将深入探讨如何在Android应用中使用SQLite3进行数据库的创建、查询、插入、更新和删除等操作。 首先,让我们了解Android中的SQLite数据库的基本概念。每个Android应用都有一...

    android数据库应用实例

    下面我们将深入讨论Android数据库应用的相关知识点。 1. SQLite数据库介绍 SQLite是一个开源的数据库系统,它被集成到Android操作系统中,无需额外安装任何软件。它的优点包括小巧、快速、可靠,以及支持SQL标准,...

    Android数据库完美框架和示例

    在Android开发中,数据库是应用数据持久化的重要方式。Android提供了SQLite数据库系统...在`DemoDateBase`压缩包中,应该包含了这个框架的实现代码,你可以下载并参考其中的细节,进一步学习和实践Android数据库操作。

    Android数据库SQLite详解

    本文将深入探讨SQLite在Android中的使用,包括基本概念、数据库操作以及实际应用示例。 ### 1. SQLite基本概念 - **数据库**: 数据库是存储和组织数据的结构化系统,SQLite在Android中表现为一个数据库文件,扩展...

    Android数据库框架GreenDAO的基本操作

    在应用启动时,使用DaoMaster.DevOpenHelper创建并升级数据库,然后通过DaoSession管理数据库操作。 基本操作包括: 1. 插入数据:使用 DaoSession 的 insert() 方法可以将实体对象插入到数据库中。 2. 查询数据:...

    android 数据库代码和资料

    本资源包提供了完整的Android数据库代码示例和详细的讲解资料,非常适合开发者深入学习和理解Android数据库的使用。 首先,我们来了解一下Android中主要使用的数据库系统——SQLite。SQLite是一个轻量级、嵌入式的...

    Android SQLite数据库操作

    在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、开源的、嵌入式的...总之,Android的SQLite数据库操作是一个关键技能,理解和熟练掌握这些基本操作将有助于构建高效、稳定的数据驱动型应用程序。

    演示Android操作数据库例子

    在这个"演示Android操作数据库例子"中,我们将探讨如何使用Android的SQLite数据库以及DBHelper类来实现常见的数据库操作。 首先,Android中的SQLite数据库操作通常通过SQLiteOpenHelper这个辅助类进行。...

    Android SQLite数据库操作Demo

    在这个"Android SQLite数据库操作Demo"中,我们将探讨如何在Android应用中创建、查询、更新和删除SQLite数据库的数据。 1. **数据库初始化** 在Android中,我们通常通过扩展SQLiteOpenHelper类来初始化SQLite...

    android 数据库操作demo

    在这个"android 数据库操作demo"中,我们将深入探讨如何在Android环境下使用SQLite进行数据库操作,包括创建数据库、创建表、插入数据、查询数据、更新数据以及删除数据等核心概念。 1. **创建数据库**: 在...

    Android数据库SQLite基本操作工程

    在这个"Android数据库SQLite基本操作工程"中,我们将深入探讨如何在Android应用中进行最基础的数据库操作:增、删、改、查。 1. **创建SQLite数据库** - 在Android中,我们通常通过继承`SQLiteOpenHelper`类来创建...

    Android数据库查看APP.zip

    "Android数据库查看APP.zip" 提供了一个工具,即"aSQLiteManager_数据库查看.apk",用于帮助开发者和用户方便地查看和管理Android设备上的SQLite数据库。这款应用能够协助我们深入理解Android应用的数据存储机制,对...

    Android数据库应用编程

    本文将深入探讨Android数据库应用编程的相关知识点,帮助开发者掌握如何有效地在Android应用中管理和操作数据。 ### SQLite数据库介绍 SQLite是一个开源、嵌入式、自包含的SQL数据库引擎,无需单独的服务器进程,...

    Android数据库基本操作源码

    在`MySqliteActivity`中,我们可以调用上述方法来执行实际的数据库操作。这些示例展示了如何在Android应用中使用SQLite进行基本的数据库交互。理解并熟练掌握这些操作对于开发任何需要存储和检索数据的Android应用至...

    Android GreenDao 数据库框架的使用

    它允许开发者以Java对象的方式操作SQLite数据库,极大地简化了数据库操作。接下来,我们将深入探讨GreenDao的使用方法及其核心特性。 1. **GreenDao简介** GreenDao是由德国的greenrobot团队开发的,它的主要特点...

    android数据库框架

    在给定的“android数据库框架”主题中,我们将深入探讨如何使用ORM技术,特别是针对SQLite的Android ORM库。 首先,SQLite是Android系统内置的一个轻量级数据库,它不需要单独的服务器进程,可以嵌入到应用程序中。...

    Android数据库操作示例

    在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、开源的、关系型数据库,被广泛用于存储和管理应用程序中的数据。...通过学习和实践这些示例,开发者能够熟练掌握Android中的SQLite数据库操作。

Global site tag (gtag.js) - Google Analytics