GUI应用程序该以何种方式访问数据库?

一个GUI应用程序该以何种方式访问数据库更加合理呢?我想了几种方式,还请大家发表自己的意见!
1. 象Jive一样使用数据库连接池,GUI程序初始化时创建一个数据库连接池,以后GUI程序的所有的数据库连接均从该连接池中得到。存在的问题:
(1) Client 数过多时,每个客户端都维持几个数据库连接的话,会造成数据库负担过重。而且数据库可用的连接数有一定的限制。当客户端过多时会造成后来者无法取得连接。
(2) 连接池在初始化时需要数据库用户的username , password。这容易泄漏数据库用户的用户名和密码。不怀好意的人利用该数据库用户的身份破坏数据库怎么办!
(3) 对数据库的访问不能进行统一的控制。
2. 在一台服务器上开启一个数据库访问的服务器端程序。GUI客户端所有的数据库访问请求均发往此服务器端程序,由该程序负责访问数据库,并将查询结果返回给GUI客户端。优点是便于对数据库的访问进行集中控制,日志记录等。存在的问题:
(1) 得不到Connection对象,只能传送SQL语句。
(2) 书写一个高效的,并发的, robust的服务器端程序不是一件简单的事。(原先写过一个基于Socket 的服务器端程序完成类似的功能,总感觉不太稳定,是否使用rmi会稳定点,而且rmi可以返回对象。我知道rmi也是基于socket的,但他的API经过了严格的测试,做了优化,应该稳定的多)。

你这两种方案都没有很强的可伸缩性和可扩展性,是一种传统方案。

其实GUI客户端属于一种肥客户端Rich Client,和浏览器这样的瘦客户端类似,采用多层结构的方案是比较好的。如下图: