一 android的数据库访问命令:
二 Java操作数据库主要有两种方法
第1种:execSQL()和rawQuery()方法
第2种 insert()、delete()、update()和query()方法
三 事务与注意:
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语句在同一个事务中执行。
> 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语句在同一个事务中执行。
发表评论
-
创建SurfaceView的最佳位置
2012-04-07 18:53 8558我在网上看了许多大牛创建SurfaceView的位置都是在Ac ... -
主题与样式详解
2012-01-09 11:02 1236一、系统自带的主题与样式 android:theme=&qu ... -
Android照相机竖屏研究引导
2012-01-08 10:47 4466我在做Android照相机研究 ... -
Android中sqlite死锁问题解决
2011-12-29 17:45 2282http://stackoverflow.com/questi ... -
多线程中的JNIEnv
2011-12-10 09:47 2792在一个线程中,通过C++回调Java时,通过一个全局的env来 ... -
NDK Makefile文件中LOCAL_LDLIBS和LOCAL_CFLAGS介绍
2011-11-16 10:38 28481LOCAL_CFLAGS := -DHHH 这个等价于头文件 ... -
【转载】Android面试系列-目录
2011-10-20 12:45 1168整理了一些面试题。大 ... -
避免Menu键被屏蔽
2011-10-16 18:56 1367大学毕业一年多了,最近忙于Android集群对讲项目开 ... -
Android HOME键屏蔽
2011-10-08 16:05 1252Android的HOME键屏蔽需要在activity中重写 @ ... -
Activity之间的跳转
2011-05-04 17:41 2236第一步:新建一个继承Activity的类,如:NewActiv ... -
为什么要引入ContentProvider
2011-05-04 15:01 2454为什么要引入ContentProvider? An ... -
android访问本地web(不是127.0.0.1而是10.0.2.2)
2011-04-21 13:39 1487模拟机访问127.0.0.1来访问,都是访问模拟器本身。你想在 ...
相关推荐
本文将深入探讨Android中的SQLite数据库操作以及如何在命令行上操作SQLite。 首先,让我们了解Android如何与SQLite交互。在Android中,我们通常通过SQLiteOpenHelper类来创建、升级和访问数据库。这个类提供了方法...
本Demo——"你想要的Android数据库操作精华(安全、并发、单例等)",旨在深入探讨如何在Android Studio环境下进行高效且安全的数据库操作,包括使用数据库框架、数据库加密、并发控制以及单例模式的应用。...
本示例"android数据库操作Demo"提供了一个基础的教程,涵盖了数据库的基本操作,包括添加数据(增)、删除数据(删)、查询数据(查)和更新数据(改)。我们将深入探讨这些核心概念。 首先,Android使用SQLite作为...
在这个"Android 数据库操作"主题中,我们将深入探讨如何在Android应用中使用SQLite3进行数据库的创建、查询、插入、更新和删除等操作。 首先,让我们了解Android中的SQLite数据库的基本概念。每个Android应用都有一...
下面我们将深入讨论Android数据库应用的相关知识点。 1. SQLite数据库介绍 SQLite是一个开源的数据库系统,它被集成到Android操作系统中,无需额外安装任何软件。它的优点包括小巧、快速、可靠,以及支持SQL标准,...
在Android开发中,数据库是应用数据持久化的重要方式。Android提供了SQLite数据库系统...在`DemoDateBase`压缩包中,应该包含了这个框架的实现代码,你可以下载并参考其中的细节,进一步学习和实践Android数据库操作。
本文将深入探讨SQLite在Android中的使用,包括基本概念、数据库操作以及实际应用示例。 ### 1. SQLite基本概念 - **数据库**: 数据库是存储和组织数据的结构化系统,SQLite在Android中表现为一个数据库文件,扩展...
在应用启动时,使用DaoMaster.DevOpenHelper创建并升级数据库,然后通过DaoSession管理数据库操作。 基本操作包括: 1. 插入数据:使用 DaoSession 的 insert() 方法可以将实体对象插入到数据库中。 2. 查询数据:...
本资源包提供了完整的Android数据库代码示例和详细的讲解资料,非常适合开发者深入学习和理解Android数据库的使用。 首先,我们来了解一下Android中主要使用的数据库系统——SQLite。SQLite是一个轻量级、嵌入式的...
在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、开源的、嵌入式的...总之,Android的SQLite数据库操作是一个关键技能,理解和熟练掌握这些基本操作将有助于构建高效、稳定的数据驱动型应用程序。
在这个"演示Android操作数据库例子"中,我们将探讨如何使用Android的SQLite数据库以及DBHelper类来实现常见的数据库操作。 首先,Android中的SQLite数据库操作通常通过SQLiteOpenHelper这个辅助类进行。...
在这个"Android SQLite数据库操作Demo"中,我们将探讨如何在Android应用中创建、查询、更新和删除SQLite数据库的数据。 1. **数据库初始化** 在Android中,我们通常通过扩展SQLiteOpenHelper类来初始化SQLite...
在这个"android 数据库操作demo"中,我们将深入探讨如何在Android环境下使用SQLite进行数据库操作,包括创建数据库、创建表、插入数据、查询数据、更新数据以及删除数据等核心概念。 1. **创建数据库**: 在...
在这个"Android数据库SQLite基本操作工程"中,我们将深入探讨如何在Android应用中进行最基础的数据库操作:增、删、改、查。 1. **创建SQLite数据库** - 在Android中,我们通常通过继承`SQLiteOpenHelper`类来创建...
"Android数据库查看APP.zip" 提供了一个工具,即"aSQLiteManager_数据库查看.apk",用于帮助开发者和用户方便地查看和管理Android设备上的SQLite数据库。这款应用能够协助我们深入理解Android应用的数据存储机制,对...
本文将深入探讨Android数据库应用编程的相关知识点,帮助开发者掌握如何有效地在Android应用中管理和操作数据。 ### SQLite数据库介绍 SQLite是一个开源、嵌入式、自包含的SQL数据库引擎,无需单独的服务器进程,...
在`MySqliteActivity`中,我们可以调用上述方法来执行实际的数据库操作。这些示例展示了如何在Android应用中使用SQLite进行基本的数据库交互。理解并熟练掌握这些操作对于开发任何需要存储和检索数据的Android应用至...
它允许开发者以Java对象的方式操作SQLite数据库,极大地简化了数据库操作。接下来,我们将深入探讨GreenDao的使用方法及其核心特性。 1. **GreenDao简介** GreenDao是由德国的greenrobot团队开发的,它的主要特点...
在给定的“android数据库框架”主题中,我们将深入探讨如何使用ORM技术,特别是针对SQLite的Android ORM库。 首先,SQLite是Android系统内置的一个轻量级数据库,它不需要单独的服务器进程,可以嵌入到应用程序中。...
在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、开源的、关系型数据库,被广泛用于存储和管理应用程序中的数据。...通过学习和实践这些示例,开发者能够熟练掌握Android中的SQLite数据库操作。