`
Bauble
  • 浏览: 67715 次
  • 性别: Icon_minigender_1
  • 来自: Mercury
社区版块
存档分类
最新评论

Android15_SQLite使用方法

阅读更多

一、SQLite介绍

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


  

二、SQLiteOpenHelper使用方法

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

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

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

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

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

onOpen(SQLiteDatabase db):回调函数,当数据库被打开的时候就会被调用。

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

close():关闭数据库。

 

三、使用adb访问SQLite

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

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

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

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

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

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

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

 

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

 

 

 输入adb shell就进入Linux命令,以Linux命令来操作Android模拟器了,因为Android是以Linux内核开发的。

 

   

 

如果此时提示device not found:

 

   

 

 则是因为模拟器没有启动,需要先启动模拟器,启动模拟器可以从Eclipse上的Opens Android SDK and AVD Manageer上选择需要启动的模拟器进行启动,也可以从命令行进行启动:

 

   

 

另:如果不知道自己的模拟器名称可以使用list AVD命令查看

 

   

 

SQLite数据库放在./data/data/当前虚拟机运行的应用程序的包名/databases/目录里。当没有创建数据库的时候,是没有databases目录的,只有当数据库创建成功时才有。(我的程序包名均为com.android.activity)


   

 

 此时只有lib目录,没有databases目录。当运行创建程序之后,就会创建databases目录,且该目录下有数据库。

部分创建代码:

 

//创建一个DatabaseHelper对象
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db");
//只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
SQLiteDatabase db = dbHelper.getReadableDatabase();

 

 执行之后:


   

databases中的test_sqlite_db就是我们创建的数据库文件。要想使用这个文件必须使用sqlite的命令:


   
 .schema用于查看当前有哪些表,以及建表语句。

在sqlite>下具体的操作和在其他数据库中基本一致,该不赘述。

 

四、SQLite增删改查

我们自己创建SQLite数据库的操作类DatabaseHelper需要继承SQLiteOpenHelper类。

DatabaseHelper.java

 

package com.android.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
	//设置数据库默认版本为1
	private static final int VERSION = 1;

	//在SQLiteOpenHelper的子类中,必须有该构造函数
	//参数说明:一个Activity对象,表名,,当前数据库版本
	public DatabaseHelper(Context context, String name, CursorFactory factory,int version) {
		super(context, name, factory, version);
	}
	
	public DatabaseHelper(Context context, String name) {
		this(context, name, VERSION);
	}
	
	public DatabaseHelper(Context context, String name,int version) {
		super(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("upgreate a database");
	}

}

   DatabaseHelper作为一个访问SQLite的帮助类,提供了两个方面的功能:

  1) getReadableDatabase(),getWriteableDatabase()可以获得SQLiteDatabase对象,并将那些相关 的数据库操作
  2) 提供了onCreate和onUpgrade两个回调函数,运行在创建和升级数据库的时候,进行自己的操作

 

在SQLiteOpenHelper的子类中,必须有构造函数

 

DatabaseHelper(Context context, String name, CursorFactory factory,int version)

可以重载多个构造方法。

   main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<Button
	android:id="@+id/createDatabase"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="createDatabase"
    />
    
<Button
	android:id="@+id/updateDatabase"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="updateDatabase"
    />

<Button
	android:id="@+id/insert"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="insert"/>
<Button
	android:id="@+id/update"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="update"/>
<Button
	android:id="@+id/query"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="query"/>
	
</LinearLayout>

  SQLiteActivity.java

 

package com.android.activity;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.android.db.DatabaseHelper;

public class SQLiteActivity extends Activity {
	private Button createButton;
	private Button insertButton;
	private Button updateButton;
	private Button updateRecordButton;
	private Button queryButton;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //得到对象
        createButton = (Button)findViewById(R.id.createDatabase);
        updateButton = (Button)findViewById(R.id.updateDatabase);
        insertButton = (Button)findViewById(R.id.insert);
        updateRecordButton = (Button)findViewById(R.id.update);
        queryButton = (Button)findViewById(R.id.query);
        
        //添加监听器
        createButton.setOnClickListener(new CreateListener());
        updateButton.setOnClickListener(new UpdateListener());
        insertButton.setOnClickListener(new InsertListener());
        updateRecordButton.setOnClickListener(new UpdateRecordListener());
        queryButton.setOnClickListener(new QueryListener());
    }
    
    class CreateListener implements OnClickListener{
		public void onClick(View v) {
			//创建一个DatabaseHelper对象
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db");
			//只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
			SQLiteDatabase db = dbHelper.getReadableDatabase();
		}
    }
    
    class UpdateListener implements OnClickListener{
		public void onClick(View v) {
			//更新“数据库”,调用了第三个构造方法,由于默认版本为1,此处设置为2,则android会自动调用onUpgrade方法。
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db",2);
			SQLiteDatabase db = dbHelper.getReadableDatabase();
		}
    }
    
    class InsertListener implements OnClickListener{
		public void onClick(View v) {
			//生成ContentValues对象,和map对象差不多,存放的都是键值对
			ContentValues values = new ContentValues();
			//想在该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
			values.put("id", 1);
			values.put("name","bauble");
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db",2);
			SQLiteDatabase db = dbHelper.getWritableDatabase();
			//调用insert方法,就可以将数据插入到数据库当中,三个参数:表名、默认空值,ContentValues对象
			db.insert("user", null, values);
		}
    }
    
    //更新数据操作就相当于执行SQL语句当中的update语句
    class UpdateRecordListener implements OnClickListener{
		public void onClick(View v) {
			//得到一个可写的SQLiteDatabase对象
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db");
			SQLiteDatabase db = dbHelper.getWritableDatabase();
			ContentValues values = new ContentValues();
			values.put("name", "allorry");
			//第一个参数是要更新的表名
			//第二个参数是一个ContentValeus对象
			//第三个参数是where子句
			db.update("user", values, "id=?", new String[]{"1"});
		}
    }
    
    class QueryListener implements OnClickListener{
		public void onClick(View v) {
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_sqlite_db");
			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("query--->" + name);
			}
		}
    }
}

例子解释:

  1) 在CreateListener这个监听器中是用来创建数据库的,创建数据库必须要先创建一个DatabaseHelper对象,同时调用的是DatabaseHelper两个参数的构造方法,分别为当前Activity的对象,以及要创建的数据库的名字。并且只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库。

2) UpdateListener是用来更新数据库的,不是更新数据的。由于默认数据库版本为1,此处设置为2,则android会自动调用onUpgrade方法。

3) 插入数据必须使用ContentValues对象进行数据的存储、传递。contentValue对象和Map差不多,存放的都是键值对。想在该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致。由于插入数据,相对于修改,所以版本号为2。最后调用insert方法就可以将数据插入到数据库当中,三个参数:表名、如果ContentValues对象为空时的默认值,ContentValues对象。

  4) 更新数据操作需要使用ContentValues对象存储需要更新的列名以及更新后的值。最后调用DatabaseHelper的update方法,参数分别为表名、contentValues对象,where子句,此时相当于JDBC的PrepareStatement的方法使用?作为占位符,在后面的String数组中设置占位符的值。

5) 数据查询是调用query方法,该方法参数众多,一般的参数为:表名、存储要查询列的String型数组、where子句、占位符数组、groupby、having、orderby。返回值为Cursor类型,循环调用cursor的moveToNext方法即可。

 

运行界面:


   

 

  • 大小: 5.3 KB
  • 大小: 28.3 KB
  • 大小: 887 Bytes
  • 大小: 1 KB
  • 大小: 946 Bytes
  • 大小: 5.7 KB
  • 大小: 2.6 KB
  • 大小: 4.7 KB
  • 大小: 3.9 KB
  • 大小: 29.7 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    AndroidSQLite.zip_android sqlite_androidsqlite _sqlite_sqlite3 a

    Android系统内置了SQLite库,使得开发者可以方便地在应用中使用SQLite数据库。 二、创建SQLite数据库 在Android中,SQLite数据库通常通过SQLiteOpenHelper类来创建和管理。这个类提供了onCreate()和onUpgrade()两个...

    android-SQLITE.rar_android_android sqlite_sqlite

    本实例将详细探讨如何在Android中使用SQLite数据库,以实现数据的持久化存储。 SQLite数据库的核心优势在于它的本地存储特性,无需服务器支持,数据直接存储在设备上,这使得数据访问快速且节省网络资源。Android ...

    mars老师 android 01_16_SQLite使用方法 源码

    "mars老师 android 01_16_SQLite使用方法 源码"这个资源是火星(mars)老师分享的一份关于如何在Android应用中使用SQLite的源代码教程。这份教程可能包含了从创建数据库到执行查询、更新、插入和删除操作等一系列...

    android_simple_sqlite框架

    在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、嵌入式的数据库引擎,可以在设备上本地存储数据。本项目“android_simple_sqlite”是一个手写的SQLite数据库框架,旨在简化Android应用中的...

    Sqlite.zip_fiftyldm_sqlite android_sqlite开发_安卓注册登录_注册登录

    在Android开发中,SQLite是首选的本地数据存储方式,因为它无需服务器支持,占用资源少,易于使用,且能够满足大部分小型应用的数据管理需求。 在"Sqlite.zip_fiftyldm_sqlite android_sqlite开发_安卓注册登录_...

    使用谷歌封装好的api增删改查.zip_android_android sqlite_android增删查改_sqlite_sq

    在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,用于在本地存储数据。本教程将详细讲解如何利用谷歌提供的API对SQLite数据库进行增删查改操作,适用于Android...

    android_SQLite.rar_ android database_Android数据库_android webview

    本教程将详细讲解如何在Android应用中使用SQLite数据库,以及如何结合WebView进行数据展示。 首先,让我们了解SQLite在Android中的基础概念。SQLite数据库是本地存储的,每个Android应用程序都有自己的SQLite数据库...

    android_simple_sqlite

    本篇文章将深入探讨Android中的SQLite数据库框架,包括其基本概念、使用方法以及最佳实践。 一、SQLite概述 SQLite作为一款关系型数据库,支持SQL标准,可以提供事务处理、备份和恢复等功能。在Android中,SQLite...

    SQL.rar_SQL android_android_android sql_android sqlite

    标题中的"SQL android"指的是在Android应用中使用SQL语言,而"android_sqlite"则特别提到了SQLite数据库。在Android开发中,SQLite通常用于存储用户数据、设置或其他需要持久化的信息。由于内存和性能限制,相比于...

    Android_sqlite_demo

    "Android_sqlite_demo" 这个项目提供了一个实际的案例,展示了如何在 Android 应用中创建和使用 SQLite 数据库。下面将详细探讨这个演示应用中的关键知识点。 首先,SQLite 是一个轻量级的数据库管理系统,它被集成...

    android _sqlite_test

    "android_sqlite_test"这个项目很可能是用来演示或测试在Android环境中如何使用SQLite进行数据库操作的实例。 一、SQLite在Android中的应用 1. 数据库创建:在Android中,我们首先需要创建一个SQLiteOpenHelper的...

    sqlite_arm.rar_C SQLITE_SQLITE LINUX_sqlite_sqlite arm_sqlite fo

    SQLite是一款轻量级的开源关系型数据库管理系统,它在许多嵌入式系统和移动设备上广泛应用,包括Android和iOS。SQLite支持SQL标准,并且能够提供事务处理、索引和多种数据类型。在这个“sqlite_arm.rar”压缩包中,...

    android_SQLite.rar_android_android sql

    在这个"android_SQLite.rar"项目中,我们可以看到开发者选择了不通过ContentProvider而是直接使用SQL语句与SQLite数据库进行交互。下面我们将深入探讨这种直接操作SQLite数据库的方式以及相关知识点。 1. **...

    android_SQLite.rar_android

    总之,对于Android开发者来说,深入理解SQLite的工作原理并掌握其在Android环境下的使用是非常有价值的。这份源代码资料可以帮助开发者提高数据库操作的效率,优化应用程序性能,并解决可能遇到的兼容性问题。

    SQLite3_CCPP.rar_sqlite3_sqlite3 c++_sqlite3使用

    SQLite3被广泛应用于各种操作系统和设备,包括Windows、Linux、iOS和Android等。由于其小巧、高效且易于使用,它特别适合于小型应用程序或那些需要在本地存储数据的应用。 在C++中使用SQLite3,你需要首先下载...

    Android_SQLite数据库使用范例

    本篇文章将详细探讨如何在Android中使用SQLite数据库,通过具体的使用范例进行讲解。 一、SQLite数据库的创建与初始化 在Android中,SQLite数据库通常是通过`SQLiteOpenHelper`类来创建和管理的。首先,我们需要...

    access_to_sqlite_e

    1. 移动应用:在Android或iOS平台上,"access_to_sqlite_e"可以帮助开发者快速实现本地数据存储。 2. 嵌入式系统:在资源有限的设备上,SQLite与"access_to_sqlite_e"结合可以提供稳定可靠的数据库服务。 3. 后端...

    db.zip_android_sqlite

    本资料包“db.zip_android_sqlite”显然包含了关于如何在Android应用中使用SQLite进行基础操作的教程或示例。 首先,让我们深入了解SQLite在Android中的基本使用: 1. **创建SQLite数据库**:在Android中,你需要...

    Android_开发中使用_SQLite

    在 Android 系统中,SQLite 已经被集成到运行时环境中,使得每个 Android 应用都能方便地使用数据库服务。 SQLite 的特性包括对 SQL 语言的良好支持,以及其高效的内存管理。尽管它不完全符合 SQL-92 标准,但提供...

    daima.zip_android_android sqlite

    总结一下,"**android_android_sqlite**"这个标签表明,这个资源包将涵盖Android应用开发的两大关键主题:基本的Android UI组件交互和SQLite数据库的使用。无论你是初学者还是有经验的开发者,这些示例代码都能帮助...

Global site tag (gtag.js) - Google Analytics