android 数据库怎么监听数据变化

android 数据库怎么监听数据变化,第1张

在android中经常会用到改变数据内容后再去使用数据库更新的内容,很多人会重新去query一遍,但是这样的问题就是程序会特别占内存,而且有可能会搂关cursor而导致程序内存未释放等等。其实android内部提供了一种ContentObserver的东西来监听数据库内容的变化。

ContentObserver的构造函数需要一个参数Hanlder,因为ContentObserver内部使用了一个实现Runnable接口的内部类NotificationRunnable,来实现数据库内容的变化。需要使用hanlder去post消息。注册ContentObserver的方法是:getContentResolver()registerContentObserver(uri, notifyForDescendents, observer)

上面3个参数为:uri----Uri类型,是需要监听的数据库的uri

notifyForDescendents---boolean  true的话就会监听所有与此uri相关的uri。false的话则是直接特殊的uri才会监听。一般都设置为true

observer-----ContentObserver  就是需要的contentobserver

初始化一个ContentObserver对象,重载onChange(boolean ),在这个方法里去 *** 作数据库的使用,针对变化后的使用。

写了一个小demo,可以参考下。提示这种监听方式必须是contentprovider才能使用,因为contentprovider有uri简单的那种sqlite数据库没有uri是使用不了的。

下面demo *** 作的是在一个activityA里点击button跳转至另外一个activityB,在B中点击button往数据库中加数据,加完后关闭B回到A。A的button的文字自动变化设置到数据库中的字符串。[code]

package tycomlto;    

02         

03    import androidappActivity;    

04    import androidcontentIntent;    

05    import androiddatabaseContentObserver;    

06    import androidosBundle;    

07    import androidosHandler;    

08    import androidviewView;    

09    import androidwidgetButton;    

10         

11    public class ListenDataTest extends Activity{    

12        private Button testBtn;    

13         

14            @Override    

15            protected void onCreate(Bundle savedInstanceState) {    

16                    superonCreate(savedInstanceState);    

17                    setContentView(Rlayoutlisten_data_test);    

18                   getContentResolver()registerContentObserver(DataChangeProviderCONTENT_URI,    

19                                    true, cob);    

20                         

21                    testBtn = (Button)findViewById(Ridtest_btn);    

22                    testBtnsetOnClickListener(new ViewOnClickListener() {    

23                                 

24                            public void onClick(View v) {    

25                                    Intent in = newIntent(ListenDataTestthis,DataChangeTestclass);    

26                                    startActivity(in);    

27                                         

28                            }    

29                    });    

30                         

31            }    

32                 

33            private ContentObserver cob = new ContentObserver(new Handler()) {    

34         

35                    @Override    

36                    public boolean deliverSelfNotifications() {    

37                            return superdeliverSelfNotifications();    

38                    }    

39         

40                    @Override    

41                    public void onChange(boolean selfChange) {    

42                            superonChange(selfChange);    

43                           testBtnsetText(DataUtilsgetChangeName(getApplicationContext()));    

44                    }    

45                          

46             };    

47         

48            @Override    

49            protected void onDestroy() {    

50                    superonDestroy();    

51                    getContentResolver()unregisterContentObserver(cob);    

52            }    

53              

54                  

55    }    

[code]01    package tycomlto;    

02         

03    import androidappActivity;    

04    import androidcontentContentValues;    

05    import androidcontentIntent;    

06    import androiddatabaseContentObservable;    

07    import androiddatabaseContentObserver;    

08    import androidosBundle;    

09    import androidosHandler;    

10    import androidviewView;    

11    import androidwidgetButton;    

12         

13    public class DataChangeTest extends Activity{    

14         private Button dataBtn;    

15         DataSqlite mDataSqlite;    

16         @Override    

17         protected void onCreate(Bundle savedInstanceState) {    

18            superonCreate(savedInstanceState);    

19            setContentView(Rlayoutdata_change_test);    

20            dataBtn = (Button)findViewById(Riddata_test_btn);    

21            mDataSqlite = new DataSqlite(this);    

22            dataBtnsetOnClickListener(new ViewOnClickListener() {    

23                     

24                public void onClick(View v) {    

25                    ContentValues con = new ContentValues();    

26                    conput("name", "数据变化了");    

27                    getContentResolver()insert(DataChangeProviderCONTENT_URI, con);    

28                    finish();    

29                }    

30            });    

31         }    

32    }    

[code]view sourceprint

001    package tycomlto;    

002          

003          

004    import androidcontentContentProvider;    

005    import androidcontentContentUris;    

006    import androidcontentContentValues;    

007    import androidcontentContext;    

008    import androidcontentUriMatcher;    

009    import androiddatabaseCursor;    

010    import androiddatabaseSQLException;    

011    import androiddatabasesqliteSQLiteDatabase;    

012    import androiddatabasesqliteSQLiteOpenHelper;    

013    import androiddatabasesqliteSQLiteQueryBuilder;    

014    import androiddatabasesqliteSQLiteDatabaseCursorFactory;    

015    import androidnetUri;    

016    import androidtextTextUtils;    

017          

018    public class DataChangeProvider extends ContentProvider{    

019        private SQLiteOpenHelper mOpenHelper;    

020        private static final int ALARMS = 1;    

021        private static final int ALARMS_ID = 2;    

022        private static final UriMatcher sURLMatcher = new UriMatcher(UriMatcherNO_MATCH);    

023        public static final Uri CONTENT_URI = Uriparse("content://tycomlto/test");    

024          

025        static {    

026            sURLMatcheraddURI("tycomlto", "test", ALARMS);    

027            sURLMatcheraddURI("tycomlto", "test/#", ALARMS_ID);    

028        }    

029             

030        private static class DatabaseHelper extends SQLiteOpenHelper{    

031             private static final String TEST_DATABASE = "testdb";    

032             private static final int VERSION = 1;    

033                  

034             public DatabaseHelper(Context context) {    

035                 super(context, TEST_DATABASE, null, VERSION);    

036                 // TODO Auto-generated constructor stub    

037             }    

038                   

039          

040             @Override    

041             public void onCreate(SQLiteDatabase db) {    

042                 String sql = "CREATE TABLE "+"test"+" (" +    

043                         "_id INTEGER PRIMARY KEY," +    

044                         "name TEXT "+    

045                          ");";    

046                 dbexecSQL(sql);    

047             }    

048          

049             @Override    

050             public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    

051                 String sql = "DROP TABLE IF EXIST "+TEST_DATABASE;    

052                 dbexecSQL(sql);    

053                 onCreate(db);    

054             }    

055                  

056        }    

057             

058        public DataChangeProvider() {    

059        }    

060             

061        @Override    

062        public int delete(Uri url, String where, String[] whereArgs) {    

063            SQLiteDatabase db = mOpenHelpergetWritableDatabase();    

064            int count;    

065            long rowId = 0;    

066            switch (sURLMatchermatch(url)) {    

067                case ALARMS:    

068                    count = dbdelete("test", where, whereArgs);    

069                    break;    

070                case ALARMS_ID:    

071                    String segment = urlgetPathSegments()get(1);    

072

Oracle监听器listener是一个重要的数据库服务器组件,在整个Oracle体系结构中,扮演着重要的作用。

Listener主要负责下面方面功能:

1、 监听客户端请求

监听器运行在数据库服务器之上,与Oracle实例(可为多个)相关关联,是一个专门的进程process,在windows的服务项目或者Linux的运行进程列表中,都会看到对应的运行进程。Windows上名为TNSLSNR,Linux/Unix平台上是lsnrctl。

2、 为客户端请求分配Server Process

监听器只负责接听请求,之后将请求转接给Oracle Server Process。在Oracle的服务模式下,客户端进程是不允许直接 *** 作数据库实例和数据,而是通过一个服务进程Server Process(也称为影子进程)作为代理。

扩展资料:

安全审计:

长期以来,在保障业务连续性和性能的前提下,最大限度的保障数据库安全一直是数据库管理人员、安全管理人员孜孜不倦追求的安全目标。本文将主要介绍4种数据库安全审计技术,并建议优选网络监听方式。

数据库系统作为三大基础软件之一并不是在计算机诞生的时候就同时产生的,随着信息技术的发展,传统文件系统已经不能满足人们的需要,1961年,美国通用电气公司成功开发了世界上第一个数据库系统IDS(Integrated Data Store),奠定了数据库的基础。

数据库系统在企业管理等领域已经具有非常广泛的应用,如、账号管理、访问控制、安全审计、防病毒、评估加固等多个方面,常见的安全产品如UTM、入侵检测、漏洞扫描等产品为保障数据库系统的正常运行起到了重要作用。

参考资料来源:Oracle官网-Oracle listener

是的,StreamSets可以监听到MySQL的binlog中的表 *** 作,包括建表、修改表、删除表等。使用StreamSets的MySQL CDC(Change Data Capture)原生源(MySQL CDC Origin)可以从MySQL的binlog中捕获变更数据,并将其转换为数据流,以供下游处理或存储。通过配置MySQL CDC原生源的参数,可以选择需要监听的表和 *** 作类型。具体而言,可以设置要监听的MySQL实例、数据库、表、binlog文件、位置和 *** 作类型,如insert、update、delete等。

一、问题描述:

安装好ORACLE服务器端后,利用PL/SQL连数据,提示无监听程序。

二、解决步骤:

1检查防火墙。

将防火墙关闭。

2查看监听服务。

在管理工具->服务中查看监听服务是否已经启动,如果没有,请启动。

3查看注册表。

在HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->services中查看监听程序是否注册。

1)如果没有ImagePath字段,就手动添加这个字段,将TNSLSNREXE的路径添加进去。

我的是F:\app\Administrator\product\1120\dbhome_1\BIN\TNSLSNR。

2)如果整个监听程序都未注册,那么请重新配置监听服务。步骤如下:

<1>打开网络配置工具(Net Configuration Assistant)

<2>选择监听程序配置,点击下一步

<2>删除原有的监听配置,直接点下一步即可。如果没有删除选项则跳过此步进行第<3>步。

<3>添加监听程序,也是直接点击下一步即可。

<4>监听服务添加后,在管理工具->服务中查看监听服务,并重启该服务。

4查看客户端的tnsnamesora文件。

linux下可以用ipcs查看,windows下可以查看服务,也可以进到数据库里面看数据库当前状态 select status from v$instance,如果status = open 就说明oracle服务正常。

oracle数据库文件结构:

1、控制文件:存储实例、数据文件及日志文件等信息的二进制文件。alter system set control_files=“路径”。V$CONTROLFILE。

2、数据文件:存储数据,以dbf做后缀。一句话:一个表空间对多个数据文件,一个数据文件只对一个表空间。dba_data_files/v$datafile。

3、日志文件:即Redo Log Files和Archivelog Files。记录数据库修改信息。ALTER SYSTEM SWITCH LOGFILE; 。V$LOG。

4、参数文件:记录基本参数。spfile和pfile。

5、警告文件:show parameter background_dump_dest=使用共享服务器连接

6、跟踪文件:show parameter user_dump_dest=使用专用服务器连接

以上就是关于android 数据库怎么监听数据变化全部的内容,包括:android 数据库怎么监听数据变化、oracle 监听程序的作用、StreamSets 能监听到mysql的binlog中的表 *** 作吗(建表、修改表、删除表等)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9755817.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存