`
mimang2007110
  • 浏览: 237164 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Android数据库操作的两种方式

 
阅读更多

Android操作数据库分文两种方式,一种是自己写sql脚本,另外一种是调用Android提供的系统函数,下面做详细说明:

第一种:自己写SQL语句,分为以下几步:

1、先建立一个数据访问帮助类

package com.dt.sphone.dao.helper;

import com.dt.sphone.util.Constant;

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

/**
 * <短信数据库操作类>
 * <功能详细描述>
 */
public class MessageSQLiteOpenHelper extends SQLiteOpenHelper
{
    /**
     * 构造数据库对象
     * 定义了数据库的名称、查询的结果集游标、数据库版本
     * @param context 上下文对象
     * <默认构造函数>
     */
    public MessageSQLiteOpenHelper(Context context)
    {
        super(context, Constant.MESSAGE_DATABASE_NAME, null, Constant.DATABASE_VERSION);
    }
    
    /**
     * 数据库第一次被创建时调用的方法
     * @param db 被创建的数据库对象
     * {@inheritDoc}
     */
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        String createSql =
            "create table message (id integer primary key autoincrement, sessionId varchar(50), msgContent text) ";
        db.execSQL(createSql);
    }
    
    /**
     * {@inheritDoc}
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        
    }
}

 2、建立一个Dao,里面包含增删改查操作:

package com.dt.sphone.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.dt.sphone.dao.helper.MessageSQLiteOpenHelper;
import com.dt.sphone.model.MessageModel;


public class MessageDao
{
    /**
     * 数据库访问帮助类
     */
    private MessageSQLiteOpenHelper helper;
    
    /**
     * 构造数据库访问帮助类
     * @param context 上下文对象
     * <默认构造函数>
     */
    public MessageDao(Context context)
    {
        helper = new MessageSQLiteOpenHelper(context);
    }
    
    /**
     * <添加或修改操作>
     * <功能详细描述>
     * @param sql 操作的SQL语句
     * @see [类、类#方法、类#成员]
     */
    public void insertOrUpdate(String sql)
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL(sql);
        db.close();
    }
    
    /**
     * <添加或修改操作>
     * <功能详细描述>
     * @param sql 操作的SQL语句
     * @param params 参数值数组
     * @see [类、类#方法、类#成员]
     */
    public void insertOrUpdate(String sql, Object[] params)
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL(sql, params);
        db.close();
    }
    
    /**
     * <删除操作>
     * <功能详细描述>
     * @param sql 操作的SQL语句
     * @see [类、类#方法、类#成员]
     */
    public void delete(String sql)
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL(sql);
        db.close();
    }
    
    /**
     * <删除操作>
     * <功能详细描述>
     * @param sql 操作的SQL语句
     * @see [类、类#方法、类#成员]
     */
    public void delete(String sql, Object[] params)
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL(sql, params);
        db.close();
    }
    
    /**
     * <获取所有短信列表>
     * <功能详细描述>
     * @param sql 查询SQL语句
     * @param params 查询参数数组,如果没有则填null
     * @return
     * @see [类、类#方法、类#成员]
     */
    public List<MessageModel> getAllMessageForParams(String sql, Object[] params)
    {
        // 存储查询结果的列表对象
        List<MessageModel> msgList = new ArrayList<MessageModel>();
        
        // 获取数据库对象
        SQLiteDatabase db = helper.getReadableDatabase();
        
        // 查询数据库
        Cursor cursor = db.rawQuery(sql, null);
        
        // 遍历查询结果
        MessageModel msg = null;
        while (cursor.moveToNext())
        {
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String sessionID = cursor.getString(cursor.getColumnIndex("sessionId"));
            String msgContent = cursor.getString(cursor.getColumnIndex("msgContent"));
            msg = new MessageModel();
            msg.setMessageId(String.valueOf(id));
            msg.setSessionId(sessionID);
            msg.setMsgContent(msgContent);
            msgList.add(msg);
        }
        
        // 关闭资源
        cursor.close();
        db.close();
        
        // 返回结果集
        return msgList;
    }

 3、调用方法:

MessageDao msgDao = new MessageDao(this);
        String sql = "insert into message (sessionId, msgContent) values ('111111', '续航来看老卡上的')";
        msgDao.insertOrUpdate(sql);
        
        String sql1 = "update message set msgContent = '是;浪蝶狂蜂品味oil卡死地方' where id = 1";
        msgDao.insertOrUpdate(sql1);
        
        String sql2 = "delete from message where id = 2";
        msgDao.delete(sql2);

 

第二种:调用系统函数操作数据库:

1、定义数据库帮助类,参照第一种的方法

2、建立一个Dao

package com.dt.sphone.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.dt.sphone.dao.helper.MessageSQLiteOpenHelper;
import com.dt.sphone.model.MessageModel;


public class MessageDao
{
    /**
     * 数据库访问帮助类
     */
    private MessageSQLiteOpenHelper helper;
    
    /**
     * 构造数据库访问帮助类
     * @param context 上下文对象
     * <默认构造函数>
     */
    public MessageDao(Context context)
    {
        helper = new MessageSQLiteOpenHelper(context);
    }
    
   
    /**
     * <使用系统函数执行增加操作>
     * <功能详细描述>
     * @param msg 短信对象
     * @return
     * @see [类、类#方法、类#成员]
     */
    public long insertUseSys(MessageModel msg)
    {
        // 获取数据库对象
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("sessionId", "234");
        values.put("msgContent", "算了的风景我饿减肥呢阿里斯顿减肥");
        long count = db.insert("message", null, values);
        db.close();
        return count;
    }
    
    /**
     * <使用系统函数执行修改操作>
     * <功能详细描述>
     * @return
     * @see [类、类#方法、类#成员]
     */
    public int updateUseSys(MessageModel msg)
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("msgContent", "啊老师的看法就我陪U人");
        int count = db.update("message", values, "sessionId=?", new String[] {"234"});
        db.close();
        return count;
    }
    
    /**
     * <使用系统函数执行删除操作>
     * <功能详细描述>
     * @return
     * @see [类、类#方法、类#成员]
     */
    public int deleteUseSys(MessageModel msg)
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        int count = db.delete("message", "sessionId=?", new String[] {"234"});
        db.close();
        return count;
    }
    
    /**
     * <使用系统函数执行查询操作>
     * <功能详细描述>
     * @return
     * @see [类、类#方法、类#成员]
     */
    public List<MessageModel> getAllMessageUseSys()
    {
        // 存储查询结果的列表对象
        List<MessageModel> msgList = new ArrayList<MessageModel>();
        
        // 获取数据库对象
        SQLiteDatabase db = helper.getReadableDatabase();
        
        // 查询数据库
        Cursor cursor = db.query("message", null, null, null, null, null, null);
        
        // 遍历查询结果
        MessageModel msg = null;
        while (cursor.moveToNext())
        {
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String sessionID = cursor.getString(cursor.getColumnIndex("sessionId"));
            String msgContent = cursor.getString(cursor.getColumnIndex("msgContent"));
            msg = new MessageModel();
            msg.setMessageId(String.valueOf(id));
            msg.setSessionId(sessionID);
            msg.setMsgContent(msgContent);
            msgList.add(msg);
        }
        
        // 关闭资源
        cursor.close();
        db.close();
        
        // 返回结果集
        return msgList;
    }
}

 3、调用方法

MessageModel msg = new MessageModel();
        long count = msgDao.insertUseSys(msg);
        long count1 = msgDao.updateUseSys(msg);
        long count2 = msgDao.deleteUseSys(msg);
        List<MessageModel> msgList1 = msgDao.getAllMessageUseSys();

 

注:MessageModel是一个实体类,包含三个字段id(int,自增长的),sessionId(String),msgContent(String) 

 

分享到:
评论

相关推荐

    Android异步操作数据库

    因此,"Android异步操作数据库"是一个至关重要的知识点,它涉及到如何在后台线程中安全、高效地处理数据库事务,避免阻塞UI。 1. **AsyncTask** Android提供了一个内置的异步任务类`AsyncTask`,适用于短时间的...

    Android数据库内容变化的监听

    Android 系统中有多种方式可以监听数据库中的内容变化,例如使用 CursorAdapter 对象,这些对象可以自动注册到 Uri 上,并在 Uri 的内容发生变化时自动刷新。 Android 数据库内容变化的监听机制是 Android 系统中...

    android 数据库代码和资料

    此外,Android还提供了ContentProvider和CursorLoader组件,它们是实现数据访问的另一种方式,特别是在处理数据跨应用共享时。ContentProvider作为数据的统一入口,可以封装对数据库的操作,而CursorLoader则负责...

    android 数据库表结构更新步骤

    它提供了一种标准的方式来访问和操作数据,同时支持跨应用的数据共享。 8. **备份与恢复策略** - 在进行重大更新时,为了防止数据丢失,可以考虑提供备份和恢复策略,让用户在更新前备份数据,并在更新后提供恢复...

    android 数据库学习

    文件存储有两种主要的操作模式:`Context.MODE_PRIVATE`和`Context.MODE_APPEND`,前者默认覆盖原有内容,后者则是在文件末尾追加内容。此外,还有`Context.MODE_WORLD_READABLE`和`Context.MODE_WORLD_WRITEABLE`,...

    android数据库框架

    尽管这里的框架未明确指出是LiveData和Room,但理解这两个概念有助于提升Android数据库开发的现代实践。 8. **异步操作**: 在Android中,直接在主线程执行数据库操作可能导致应用卡顿。框架应提供异步API,如使用`...

    Android-一个用于调试android数据库和sharedpreferences的库

    在Android应用开发中,数据库和SharedPreferences是两种常用的数据存储机制。`Android-Debug-Database`是一个专门为Android开发者设计的库,旨在简化调试过程,帮助开发者更有效地检查和修改应用程序中的数据库和...

    AndroidSQLite数据库操作程序

    在本AndroidSQLite数据库操作程序中,我们将探讨如何在Android应用中有效地利用SQLite。 首先,我们需要了解SQLite数据库的基本概念。SQLite数据库由一个或多个数据库文件组成,每个文件包含一个或多个表。在...

    Android 数据库加密

    SQLite是Android系统默认的轻量级数据库,它为开发者提供了便捷的数据存储方式。然而,SQLite数据库文件是明文存储的,这可能导致敏感数据泄露。为了解决这个问题,"sqlite-encrypt"应运而生,它是一种专门针对...

    android 数据库同步

    数据库同步是指在两个或多个数据库之间保持数据一致性的一种方法,这通常涉及到网络连接,如在服务器和客户端之间或者在多设备间同步数据。在Android中,这可能涉及到将远程服务器上的数据下载到本地SQLite数据库,...

    database-lock.zip_Android 数据库_Android数据库_android_database-lock_安

    综上所述,Android数据库管理是一个多方面的任务,涉及数据库创建、操作、加密以及安全性增强。开发者应根据应用需求选择合适的加密方案,并遵循最佳实践以确保数据安全。NativeDemo项目提供了一个很好的起点,可以...

    Android 数据库 SQlite 范例 SQLiteOpenHelper

    SQLiteOpenHelper是Android SDK提供的一种管理SQLite数据库的工具类,它可以帮助我们完成数据库的创建、升级以及版本管理。这篇教程将深入探讨如何使用SQLiteOpenHelper进行数据库操作,并结合ListView展示数据,...

    Android操作sqlite数据库

    SQLite数据库集成在Android系统中,为开发者提供了方便的数据持久化方式。以下是对Android操作SQLite数据库进行详细讲解的知识点: 1. **SQLiteOpenHelper**: - `SQLiteOpenHelper`是Android提供的一种帮助类,...

    android的数据库操作和列表展示方法源码

    在Android开发中,数据库操作和列表展示是两个重要的技术领域,它们对于构建功能丰富的应用程序至关重要。本源码可能包含了一套完整的实现方案,用于演示如何在Android应用中管理数据库并展示数据到用户界面。 首先...

    android数据库使用demo(原生版+androidAPI版)

    总结,这个"android数据库使用demo(原生版+androidAPI版)"涵盖了Android开发中数据库基础操作的关键知识,包括创建数据库、操作表以及使用DAO模式,同时展示了如何在Android Studio中进行模块化开发。通过学习和实践...

    Android内置数据库SQLite[参考].pdf

    SQLiteOpenHelper提供了两种方法来获取SQLiteDatabase对象:getReadableDatabase()和getWritableDatabase()。这两个方法都可以用来操作数据库,但是getReadableDatabase()方法只能读取数据库,而getWritableDatabase...

    android 数据库处理及操作

    本文将深入探讨Android中的SQLite数据库操作,包括基本概念、创建数据库、表的操作、数据的增删改查以及一些实用工具。 1. SQLite基础 SQLite是一个嵌入式数据库,无需单独的服务器进程,它直接与应用程序一起运行...

    android对于数据库操作的demo

    在Android开发中,SQLite数据库是一种常用的轻量级数据库,它被广泛用于存储应用程序的数据。本资源的"android对于数据库操作的demo"旨在演示如何在Android应用中有效地进行SQLite数据库的操作,包括基本的创建、...

    Android-实验报告-Sqlite-数据库操作.docx

    XML和JSON都是常用的数据交换格式,可以将数据库中的数据转换成这两种格式保存到文件中。在Android中,可以使用`java.io`包下的类如`FileWriter`,`BufferedWriter`等写入文件,而序列化可以借助`Gson`库或`org.json...

    android activity互相调用 操作数据库

    - **ContentProvider**:虽然不是直接操作数据库,但ContentProvider是Android提供的一种统一访问数据的方式,包括数据库中的数据。它允许不同应用间共享数据,并提供了URI来访问数据。 - **SQLiteCursor**:执行...

Global site tag (gtag.js) - Google Analytics