android Mms 数据库5

2024-03-31 09:38
文章标签 android 数据库 mms

本文主要是介绍android Mms 数据库5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mms数据库的triggers


1. threads表将SMS、MMS的信息组织成一个conversation,所以当MMS、SMS信息发生改变时也需要更新threads表

2. 维护pending_msgs表格,其中包含pending_msgs表用于存储待发送或下载的SMS/MMS

3. 维护错误标志位

    /*** the name of the table that is used to store the queue of* messages(both MMS and SMS) to be sent/downloaded.*/public static final String TABLE_PENDING_MSG = "pending_msgs";

    private void createCommonTriggers(SQLiteDatabase db) {// Updates threads table whenever a message is added to pdu.db.execSQL("CREATE TRIGGER pdu_update_thread_on_insert AFTER INSERT ON " +MmsProvider.TABLE_PDU + " " +PDU_UPDATE_THREAD_CONSTRAINTS +PDU_UPDATE_THREAD_DATE_SNIPPET_COUNT_ON_UPDATE);// Updates threads table whenever a message is added to sms.db.execSQL("CREATE TRIGGER sms_update_thread_on_insert AFTER INSERT ON sms " +SMS_UPDATE_THREAD_DATE_SNIPPET_COUNT_ON_UPDATE);// Updates threads table whenever a message in pdu is updated.db.execSQL("CREATE TRIGGER pdu_update_thread_date_subject_on_update AFTER" +"  UPDATE OF " + Mms.DATE + ", " + Mms.SUBJECT + ", " + Mms.MESSAGE_BOX +"  ON " + MmsProvider.TABLE_PDU + " " +PDU_UPDATE_THREAD_CONSTRAINTS +PDU_UPDATE_THREAD_DATE_SNIPPET_COUNT_ON_UPDATE);// Updates threads table whenever a message in sms is updated.db.execSQL("CREATE TRIGGER sms_update_thread_date_subject_on_update AFTER" +"  UPDATE OF " + Sms.DATE + ", " + Sms.BODY + ", " + Sms.TYPE +"  ON sms " +SMS_UPDATE_THREAD_DATE_SNIPPET_COUNT_ON_UPDATE);// Updates threads table whenever a message in pdu is updated.db.execSQL("CREATE TRIGGER pdu_update_thread_read_on_update AFTER" +"  UPDATE OF " + Mms.READ +"  ON " + MmsProvider.TABLE_PDU + " " +PDU_UPDATE_THREAD_CONSTRAINTS +"BEGIN " +PDU_UPDATE_THREAD_READ_BODY +"END;");// Updates threads table whenever a message in sms is updated.db.execSQL("CREATE TRIGGER sms_update_thread_read_on_update AFTER" +"  UPDATE OF " + Sms.READ +"  ON sms " +"BEGIN " +SMS_UPDATE_THREAD_READ_BODY +"END;");// Update threads table whenever a message in pdu is deleteddb.execSQL("CREATE TRIGGER pdu_update_thread_on_delete " +"AFTER DELETE ON pdu " +"BEGIN " +"  UPDATE threads SET " +"     date = (strftime('%s','now') * 1000)" +"  WHERE threads._id = old." + Mms.THREAD_ID + "; " +UPDATE_THREAD_COUNT_ON_OLD +UPDATE_THREAD_SNIPPET_SNIPPET_CS_ON_DELETE +"END;");// As of DATABASE_VERSION 55, we've removed these triggers that delete empty threads.// These triggers interfere with saving drafts on brand new threads. Instead of// triggers cleaning up empty threads, the empty threads should be cleaned up by// an explicit call to delete with Threads.OBSOLETE_THREADS_URI.//        // When the last message in a thread is deleted, these
//        // triggers ensure that the entry for its thread ID is removed
//        // from the threads table.
//        db.execSQL("CREATE TRIGGER delete_obsolete_threads_pdu " +
//                   "AFTER DELETE ON pdu " +
//                   "BEGIN " +
//                   "  DELETE FROM threads " +
//                   "  WHERE " +
//                   "    _id = old.thread_id " +
//                   "    AND _id NOT IN " +
//                   "    (SELECT thread_id FROM sms " +
//                   "     UNION SELECT thread_id from pdu); " +
//                   "END;");
//
//        db.execSQL("CREATE TRIGGER delete_obsolete_threads_when_update_pdu " +
//                   "AFTER UPDATE OF " + Mms.THREAD_ID + " ON pdu " +
//                   "WHEN old." + Mms.THREAD_ID + " != new." + Mms.THREAD_ID + " " +
//                   "BEGIN " +
//                   "  DELETE FROM threads " +
//                   "  WHERE " +
//                   "    _id = old.thread_id " +
//                   "    AND _id NOT IN " +
//                   "    (SELECT thread_id FROM sms " +
//                   "     UNION SELECT thread_id from pdu); " +
//                   "END;");// Insert pending status for M-Notification.ind or M-ReadRec.ind// when they are inserted into Inbox/Outbox.db.execSQL("CREATE TRIGGER insert_mms_pending_on_insert " +"AFTER INSERT ON pdu " +"WHEN new." + Mms.MESSAGE_TYPE + "=" + PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND +"  OR new." + Mms.MESSAGE_TYPE + "=" + PduHeaders.MESSAGE_TYPE_READ_REC_IND +" " +"BEGIN " +"  INSERT INTO " + MmsSmsProvider.TABLE_PENDING_MSG +"    (" + PendingMessages.PROTO_TYPE + "," +"     " + PendingMessages.MSG_ID + "," +"     " + PendingMessages.MSG_TYPE + "," +"     " + PendingMessages.ERROR_TYPE + "," +"     " + PendingMessages.ERROR_CODE + "," +"     " + PendingMessages.RETRY_INDEX + "," +"     " + PendingMessages.DUE_TIME + ") " +"  VALUES " +"    (" + MmsSms.MMS_PROTO + "," +"      new." + BaseColumns._ID + "," +"      new." + Mms.MESSAGE_TYPE + ",0,0,0,0);" +"END;");// Insert pending status for M-Send.req when it is moved into Outbox.db.execSQL("CREATE TRIGGER insert_mms_pending_on_update " +"AFTER UPDATE ON pdu " +"WHEN new." + Mms.MESSAGE_TYPE + "=" + PduHeaders.MESSAGE_TYPE_SEND_REQ +"  AND new." + Mms.MESSAGE_BOX + "=" + Mms.MESSAGE_BOX_OUTBOX +"  AND old." + Mms.MESSAGE_BOX + "!=" + Mms.MESSAGE_BOX_OUTBOX + " " +"BEGIN " +"  INSERT INTO " + MmsSmsProvider.TABLE_PENDING_MSG +"    (" + PendingMessages.PROTO_TYPE + "," +"     " + PendingMessages.MSG_ID + "," +"     " + PendingMessages.MSG_TYPE + "," +"     " + PendingMessages.ERROR_TYPE + "," +"     " + PendingMessages.ERROR_CODE + "," +"     " + PendingMessages.RETRY_INDEX + "," +"     " + PendingMessages.DUE_TIME + ") " +"  VALUES " +"    (" + MmsSms.MMS_PROTO + "," +"      new." + BaseColumns._ID + "," +"      new." + Mms.MESSAGE_TYPE + ",0,0,0,0);" +"END;");// When a message is moved out of Outbox, delete its pending status.db.execSQL("CREATE TRIGGER delete_mms_pending_on_update " +"AFTER UPDATE ON " + MmsProvider.TABLE_PDU + " " +"WHEN old." + Mms.MESSAGE_BOX + "=" + Mms.MESSAGE_BOX_OUTBOX +"  AND new." + Mms.MESSAGE_BOX + "!=" + Mms.MESSAGE_BOX_OUTBOX + " " +"BEGIN " +"  DELETE FROM " + MmsSmsProvider.TABLE_PENDING_MSG +"  WHERE " + PendingMessages.MSG_ID + "=new._id; " +"END;");// Delete pending status for a message when it is deleted.db.execSQL("CREATE TRIGGER delete_mms_pending_on_delete " +"AFTER DELETE ON " + MmsProvider.TABLE_PDU + " " +"BEGIN " +"  DELETE FROM " + MmsSmsProvider.TABLE_PENDING_MSG +"  WHERE " + PendingMessages.MSG_ID + "=old._id; " +"END;");// TODO Add triggers for SMS retry-status management.// Update the error flag of threads when the error type of// a pending MM is updated.db.execSQL("CREATE TRIGGER update_threads_error_on_update_mms " +"  AFTER UPDATE OF err_type ON pending_msgs " +"  WHEN (OLD.err_type < 10 AND NEW.err_type >= 10)" +"    OR (OLD.err_type >= 10 AND NEW.err_type < 10) " +"BEGIN" +"  UPDATE threads SET error = " +"    CASE" +"      WHEN NEW.err_type >= 10 THEN error + 1" +"      ELSE error - 1" +"    END " +"  WHERE _id =" +"   (SELECT DISTINCT thread_id" +"    FROM pdu" +"    WHERE _id = NEW.msg_id); " +"END;");// Update the error flag of threads when delete pending message.db.execSQL("CREATE TRIGGER update_threads_error_on_delete_mms " +"  BEFORE DELETE ON pdu" +"  WHEN OLD._id IN (SELECT DISTINCT msg_id" +"                   FROM pending_msgs" +"                   WHERE err_type >= 10) " +"BEGIN " +"  UPDATE threads SET error = error - 1" +"  WHERE _id = OLD.thread_id; " +"END;");// Update the error flag of threads while moving an MM out of Outbox,// which was failed to be sent permanently.db.execSQL("CREATE TRIGGER update_threads_error_on_move_mms " +"  BEFORE UPDATE OF msg_box ON pdu " +"  WHEN (OLD.msg_box = 4 AND NEW.msg_box != 4) " +"  AND (OLD._id IN (SELECT DISTINCT msg_id" +"                   FROM pending_msgs" +"                   WHERE err_type >= 10)) " +"BEGIN " +"  UPDATE threads SET error = error - 1" +"  WHERE _id = OLD.thread_id; " +"END;");// Update the error flag of threads after a text message was// failed to send/receive.db.execSQL("CREATE TRIGGER update_threads_error_on_update_sms " +"  AFTER UPDATE OF type ON sms" +"  WHEN (OLD.type != 5 AND NEW.type = 5)" +"    OR (OLD.type = 5 AND NEW.type != 5) " +"BEGIN " +"  UPDATE threads SET error = " +"    CASE" +"      WHEN NEW.type = 5 THEN error + 1" +"      ELSE error - 1" +"    END " +"  WHERE _id = NEW.thread_id; " +"END;");}


4. 特别为Mms设计的triggers

从中可以得知对于Mms delivery report/read report信息是分别作为一条数据项放在pdu表中的。


        // Cleans up parts when a MM is deleted.db.execSQL("CREATE TRIGGER part_cleanup DELETE ON " + MmsProvider.TABLE_PDU + " " +"BEGIN " +"  DELETE FROM " + MmsProvider.TABLE_PART +"  WHERE " + Part.MSG_ID + "=old._id;" +"END;");// Cleans up address info when a MM is deleted.db.execSQL("CREATE TRIGGER addr_cleanup DELETE ON " + MmsProvider.TABLE_PDU + " " +"BEGIN " +"  DELETE FROM " + MmsProvider.TABLE_ADDR +"  WHERE " + Addr.MSG_ID + "=old._id;" +"END;");// Delete obsolete delivery-report, read-report while deleting their// associated Send.req.db.execSQL("CREATE TRIGGER cleanup_delivery_and_read_report " +"AFTER DELETE ON " + MmsProvider.TABLE_PDU + " " +"WHEN old." + Mms.MESSAGE_TYPE + "=" + PduHeaders.MESSAGE_TYPE_SEND_REQ + " " +"BEGIN " +"  DELETE FROM " + MmsProvider.TABLE_PDU +"  WHERE (" + Mms.MESSAGE_TYPE + "=" + PduHeaders.MESSAGE_TYPE_DELIVERY_IND +"    OR " + Mms.MESSAGE_TYPE + "=" + PduHeaders.MESSAGE_TYPE_READ_ORIG_IND +")" +"    AND " + Mms.MESSAGE_ID + "=old." + Mms.MESSAGE_ID + "; " +"END;");// Update threads table to indicate whether attachments exist when// parts are inserted or deleted.db.execSQL(PART_UPDATE_THREADS_ON_INSERT_TRIGGER);db.execSQL(PART_UPDATE_THREADS_ON_UPDATE_TRIGGER);db.execSQL(PART_UPDATE_THREADS_ON_DELETE_TRIGGER);db.execSQL(PDU_UPDATE_THREADS_ON_UPDATE_TRIGGER);




这篇关于android Mms 数据库5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/864024

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp