跨进程获取数据库(跨线程访问数据)

品牌设计 28
本篇文章给大家谈谈跨进程获取数据库,以及跨线程访问数据对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 MFC hook钩子学习 先用spy++(VC自带工具)看看各个窗口控件属性和序号,有利于明确目标和提供参考。表格,在MFC里面很大可能是CListCtrl,还有可能是CListBox、Chat。至于你猜的那个概率很低,具体可以SPY++参考。用钩子跨进程获取数据效率是很低的,如果数据量很大,不建议这么搞。

本篇文章给大家谈谈跨进程获取数据库,以及跨线程访问数据对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

MFC hook钩子学习

先用spy++(VC自带工具)看看各个窗口控件属性和序号,有利于明确目标和提供参考。

表格,在MFC里面很大可能是CListCtrl,还有可能是CListBox、Chat。至于你猜的那个概率很低,具体可以SPY++参考。

用钩子跨进程获取数据效率是很低的,如果数据量很大,不建议这么搞。

一般数据都是在数据库文件或者资源中,这两种不用钩子效率更高些。

如果只是为了学习钩子,先从编辑框、窗口标题之类的开始。要进行钩子拦截,首先还是要知道目标窗口属性和信息比较方便。

android sqlite可跨进程吗

android除了sqlite数据库,还是可以使用mysql数据库,使用步骤如下:

1. 关闭mysql服务器的防火墙。

2. 加入MySQL的jdbc包,添加到libs文件夹内。

3.ADT和SDK为16及16以下,17以上的不能访问。

4.手机和mysq服务器l互相ping通。

5.添加网络权限 : uses-permission Android:name="android.permission.INTERNET" /

6.在Thread中连接访问mysql,防止ANR。

7.设置mysql允许远程连接。

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

package com.mayi.mysql_test;

import java.sql.DriverManager;

import java.sql.ResultSet;

import com.mysql.jdbc.Connection;

import com.mysql.jdbc.Statement;

import android.os.Bundle;

import android.app.Activity;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.select).setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

select();

}

});

}

public void select(){

try{

//调用Class.forName()方法加载驱动程序

Class.forName("org.gjt.mm.mysql.Driver");

System.out.println("成功加载MySQL驱动!");

String url="jdbc:mysql://192.168.1.113:3306/test"; //JDBC的URL

Connection conn;

conn = (Connection) DriverManager.getConnection(url,"mayi","123456");

Statement stmt = (Statement) conn.createStatement(); //创建Statement对象

System.out.println("成功连接到数据库!");

String sql = "select * from person"; //要执行的SQL

ResultSet rs = stmt.executeQuery(sql);//创建数据对象

System.out.println("编号"+"t"+"姓名"+"t"+"年龄");

while (rs.next()){

System.out.print(rs.getInt(1) + "t");

System.out.print(rs.getString(2) + "t");

System.out.print(rs.getString(3) + "t");

System.out.print(rs.getString(4) + "t");

System.out.println();

}

rs.close();

stmt.close();

conn.close();

}catch(Exception e)

{

Log.e(TAG, e.getMessage());

e.printStackTrace();

}

}

}

在Android中两个进程之间传输大数据,可以使用什么方式实现

Android提供ContentProvider程序通实现Content provider抽象接口自数据完全暴露且Content providers类似数据库表式数据暴露Content providers存储检索数据通让所应用程序访问应用程序间唯共享数据要想使应用程序数据公化通2种:创建属于自Content provider或者数据添加已经存Content provider前提相同数据类型并且写入Content provider权限

具体:

sqlserver数据库多程序同时读取问题

这点负载对sqlserver来说都不是个事,放宽心了

sqlserver做大型应用时每秒都有几十上百个请求完全没问题,当然硬件配置也高,只要你sql服务器不出硬件问题,并注意备份,sql就只有性能问题,不需要担心其他

■■多个进程间如何共享数据库连接池?■■求答案

当连接打开时,SqlConnection对象的ConnectString属性将根据一种精确的匹配算法来创建连接池,该算法会使连接池与连接中的字符串相关联。每个连接池都与一个不同的连接字符串相关联。当新连接打开时,如果连接字符串不精确匹配现有池,则将创建一个新池。

连接池一旦创建,直到活动进程终止时才会被毁坏。维护不活动的池或空池占用的系统资源非常少。

连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到最大池大小。

在请求 SqlConnection对象时,如果存在可用的连接,则将从池中获取该对象。要成为可用连接,该连接当前必须未被使用,具有匹配的事务上下文或者不与任何事务上下文相关联,并且具有与服务器的有效链接。

如果已达到最大池大小且不存在可用的连接,则该请求将会排队。当连接被释放回池中时,连接池管理程序通过重新分配连接来满足这些请求。连接在关闭或断开时释放回池中。

------解决方案--------------------------------------------------------

数据库连接池不是.NET去控制的,由數據庫本身控制的.

你可以在WebConfig /App.Config中設定 ConnectionString時加上 MultipleActiveResultSets = True

这样设定来启动多活动结果集来优化连接.

不过这个设定仅适合SQL Server 2005(含)以上版本.

------解决方案--------------------------------------------------------

你这就是拿锅铲躲雨-总会有地方照顾不到.

如果你是CS,不论你DB是Oracle还是SQL Server,客户端是瘦客户端.

那么访问数据,获取资料,再返回资料这部分就应该抽取由WebService或者WCF来完成

你在每个CS客户端以不同用户远程同一台服务器,启动的是同一个程序,现在每启动一个实例

你觉得不同用户进程之间的通讯容易一下还是直接统一访问数据,获取资料容易一些?探讨先说明一下我访问的是Oracle,并且是CS程序,如果一个进程内部,当然可以自动启用连接池,一个程序我只占了一个连接,查询数据库也的确如此,当如果我启动两个进程,那数据库那边连接就变成了二个,如果我同时打开三个进程,则连接一定是三个,连接池是跟进程与作用域相关联的,不知道有没有办法让多个进程共享同一连接池。

------解决方案--------------------------------------------------------

------解决方案--------------------------------------------------------

webservice还不就是干这类的事

------解决方案--------------------------------------------------------

用完了就放回去,就这么简单。

android开发中跨进程通信有几种方式

Android进程间通信的几种方式 定义多进程

第一:Android应用中使用多进程只有一个办法(用NDK的fork来做除外),就是在AndroidManifest.xml中声明组件时,用android:process属性来指定。

不知定process属性,则默认运行在主进程中,主进程名字为包名。

android:process = package:remote,将运行在package:remote进程中,属于全局进程,其他具有相同shareUID与签名的APP可以跑在这个进程中。

android:process = :remote ,将运行在默认包名:remote进程中,而且是APP的私有进程,不允许其他APP的组件来访问。

第二:多进程引发的问题

静态成员和单例失效:每个进程保持各自的静态成员和单例,相互独立。

线程同步机制失效:每个进程有自己的线程锁。

SharedPreferences可靠性下降:不支持并发写,会出现脏数据。

Application多次创建:不同进程跑在不同虚拟机,每个虚拟机启动会创建自己的Application,自定义Application时生命周期会混乱。

综上,不同进程拥有各自独立的虚拟机,Application,内存空间,由此引发一系列问题。

第三: 进程间通信

Bundle/Intent传递数据:

可传递基本类型,String,实现了Serializable或Parcellable接口的数据结构。Serializable是Java的序列化方法,Parcellable是Android的序列化方法,前者代码量少(仅一句),但I/O开销较大,一般用于输出到磁盘或网卡;后者实现代码多,效率高,一般用户内存间序列化和反序列化传输。

文件共享:

对同一个文件先后写读,从而实现传输,Linux机制下,可以对文件并发写,所以要注意同步。顺便一提,Windows下不支持并发读或写。

Messenger:

Messenger是基于AIDL实现的,服务端(被动方)提供一个Service来处理客户端(主动方)连接,维护一个Handler来创建Messenger,在onBind时返回Messenger的binder。

双方用Messenger来发送数据,用Handler来处理数据。Messenger处理数据依靠Handler,所以是串行的,也就是说,Handler接到多个message时,就要排队依次处理。

AIDL:

AIDL通过定义服务端暴露的接口,以提供给客户端来调用,AIDL使服务器可以并行处理,而Messenger封装了AIDL之后只能串行运行,所以Messenger一般用作消息传递。

通过编写aidl文件来设计想要暴露的接口,编译后会自动生成响应的java文件,服务器将接口的具体实现写在Stub中,用iBinder对象传递给客户端,客户端bindService的时候,用asInterface的形式将iBinder还原成接口,再调用其中的方法。

ContentProvider:

系统四大组件之一,底层也是Binder实现,主要用来为其他APP提供数据,可以说天生就是为进程通信而生的。自己实现一个ContentProvider需要实现6个方法,其中onCreate是主线程中回调的,其他方法是运行在Binder之中的。自定义的ContentProvider注册时要提供authorities属性,应用需要访问的时候将属性包装成Uri.parse("content://authorities")。还可以设置permission,readPermission,writePermission来设置权限。 ContentProvider有query,delete,insert等方法,看起来貌似是一个数据库管理类,但其实可以用文件,内存数据等等一切来充当数据源,query返回的是一个Cursor,可以自定义继承AbstractCursor的类来实现。

Socket:

学过计算机网络的对Socket不陌生,所以不需要详细讲述。只需要注意,Android不允许在主线程中请求网络,而且请求网络必须要注意声明相应的permission。然后,在服务器中定义ServerSocket来监听端口,客户端使用Socket来请求端口,连通后就可以进行通信。

跨进程获取数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于跨线程访问数据、跨进程获取数据库的信息别忘了在本站进行查找喔。

跨进程获取数据库 修改数据库最大进程数查看数据库进程数据库杀进程kill数据库进程oracle查看数据库进程pg数据库杀进程oracle数据库杀进程pg数据库查看进程数据库杀进程命令linux查看数据库进程
扫码二维码