搜档网
当前位置:搜档网 › 数据库连接字符串详解

数据库连接字符串详解

数据库连接字符串详解
数据库连接字符串详解

SQLserver:

命名空间应用:using System.Data;

using System.Data.SqlClient;

字符串:@"Server=服务器名;Database=数据库名;User ID=用户名;Password=密码;" window身份验证字符串写法:@"Data Source=.;Initial Catalog=数据库名;Integrated Security=True"

SQL身份验证:字符串写法 @"server=.;database=ReportServer;uid=sa;pwd=sa"

access:

命名空间应用:using System.Data;

using System.Data.OleDb;

字符串:@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库的物理路径;User ID=用户名;Password=你的密码;"

无密码字符串:@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库的物理路径;"

注解:1. “@”符号用于防止将后面字符串中的“\”解析为转义字符。也就是回车“\n”

2. (local)表示本地

3. Application.StartupPath相对路径

可添加属性:(在字符串中可以添加的属性,用";"符号分开即可)

1. Persist Security Info=false/true 在数据库连接成功后是否保存密码信息,True表示保存,False表示不保存

https://www.sodocs.net/doc/372792400.html,中默认情况下为false

2. Connect Timeout=分钟数设定多少分钟之后过期

附录:

1关键字

其中一些关键字及其值的说明:(关键字不区分大小写)

1.Connect Timeout

表示连接超时的意思,即在终止尝试并产生错误之前,等待与服务器的连接的时间长度(以秒为单位),默认值为15.

2.Data Source 或 Server

两个关键字都代表同一个意义,即要连接的SQL Server实例的名称或网络地址。

3.Initial Catalog 或 Database

两个关键字都代表同一个意义,即数据库的名称。如果连接的是本地的服务器,既可以写本地服务器的名字,也可写"localhost"或"(local)"。

4.Integrated Security 或Trusted_Connection

两个关键字都代表同一个意义,即是否使用Windows集成安全身份认证。当其值为False

时,将在连接中指定用户ID和密码。当为True时,将使用当前的Windows帐户凭据进行身份验证。可识别的值为True、False、Yes、No以及与True等效的sspi,默认值为False,推荐使用True或者sspi。

https://www.sodocs.net/doc/372792400.html,er Id

SQL Server登录帐户。为了维护最高级别的安全性,强烈建议改用Integrated Security 或Trusted_Connection关键字。

6.Password 或 Pwd

SQL Server帐户登录的密码。为了维护最高级别的安全性,强烈建议改用Integrated Security 或Trusted_Connection关键字。

7.WorkStation Id

连接到SQL Server的工作站的名称,默认值为本地计算机名称

关于DBCP数据库连接池配置整理

1.简介 DBCP(DataBase Connection Pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是tomcat 使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。 dbcp提供了数据库连接池可以在spring,iBatis,hibernate中调用dbcp完成数据库连接,框架一般都提供了dbcp连接的方法; tomcat中也提供了dbcp的jndi设置方法,也可以不在框架中使用dbcp,单独使用dbcp 需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar 2.参数说明 翻译自https://www.sodocs.net/doc/372792400.html,

这里可以开启PreparedStatements池. 当开启时, 将为每个连接创建一个statement 池,并且被下面方法创建的PreparedStatements将被缓存起来: ●public PreparedStatement prepareStatement(String sql) ●public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) 如果容许则可以使用下面的方式来获取底层连接: Connection conn = ds.getConnection(); Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate(); ... conn.close() 默认false不开启, 这是一个有潜在危险的功能, 不适当的编码会造成伤害.(关闭底层 连接或者在守护连接已经关闭的情况下继续使用它).请谨慎使用,并且仅当需要直接访问驱动的特定功能时使用. 注意: 不要关闭底层连接, 只能关闭前面的那个 如果开启"removeAbandoned",那么连接在被认为泄露时可能被池回收. 这个机制在(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时被触发。 举例当maxActive=20, 活动连接为18,空闲连接为1时可以触发"removeAbandoned".但是活动连接只有在没有被使用的时间超过"removeAbandonedTimeout"时才被删除,默认300秒.在resultset中游历不被计算为被使用。 3.使用注意点

数据库连接池的好处

数据库连接池的好处.txt-//自私,让我们只看见自己却容不下别人。如果发短信给你喜欢的人,他不回,不要再发。看着你的相片,我就特冲动的想P成黑白挂墙上!有时,不是世界太虚伪,只是,我们太天真。数据库连接池的好处 对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。 连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。 对于共享资源,有一个很著名的设计模式:资源池。该模式正是为了解决资源频繁分配、释放所造成的问题的。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,提供一套高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。 数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。如: 外部使用者可通过getConnection 方法获取连接,使用完毕后再通过releaseConnection 方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。 数据库连接池技术带来的优势: 1.资源重用 由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。 2.更快的系统响应速度 数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。 3.新的资源分配手段 对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。

01关于数据库连接池和动态数据源的实现课案

关于数据库连接池和动态数据源的实现、使用 对于一个简单的数据库应用,由于数据库的访问不是很频繁。这时可以很简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样就不会带来更多的性能上的开销。但是对于复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。这就意味我们需要去考虑怎样把一个连接多次使用。 连接复用,通过建立数据库的连接池以及一套连接使用的管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭给系统带来的开销。外部使用者可以通过getConnection方法获取连接,使用完毕之后再通过releaseConnection 方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。 一般的数据库连接池,是使用配置文件在项目启动的使用加载配置文件,根据文件中描述,生成对应的数据库连接池。连接池有许多的属性比如:连接池的初始化连接处、连接池的最大连接数、每次的自增连接数、最大空闲连接数等等 数据库连接池技术带来的优势: 1.资源重用 由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减 少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以 及数据库临时进程/线程的数量) 2.更快的系统响应速度 数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用,此 时连接的初始化工作均已完成,对于业务处理而言,直接利用现有的可以连接,避 免了数据库连接初始化和释放过程的时间开销,从而缩短了系统整体的响应时间。 3. 统一的连接管理,避免数据库连接泄露 在较为完备的数据库连接池实现中可以根据预先的连接占用超时设定,强制回收被 占用的连接。从而避免常规数据库连接操作中可能出现的资源泄露。 一个数据库连接池的实现 1.前言 数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游标(ResultSet)、Statement、连接(Connection)等资源),往往会直接导致系统的稳定。这类不稳定因素,不单单由数据库或者系统本身一方引起,只有系统正式使用后,随着流量、用户的增加,才会逐步显露。 在基于Java开发的系统中,JDBC是程序员和数据库打交道的主要途径,提供了完备的数据库操作方法接口。但考虑到规范的适用性,JDBC只提供了最直接的数据库操作规范,对数据库资源管理,如:对物理连接的管理及缓冲,期望第三方应用服务器(Application Server)的提供。下面以JDBC规范为基础,介绍相关的数据库连接池机制,并就如果以简单的方式,实现有效地管理数据库资源介绍相关实现技术。

JDBC—数据库的连接字符串及连接方法(各类数据库)

JDBC数据库连接字符串及连接方法 1、连接mysql 第一步: 从mysql-connector-java目录下面将mysql-connector的jar包导入到lomboz_eclipse中 第二步: Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/mydata?"+"user=root&password=root"); 注:“?”前的“mydata”是具体的数据库名称,根据需要连接的具体数据库名称填入。 2、Oracle8/8i/9i数据库(thin模式) 第一步: 将Oracle提供的jar包导入到编程环境中(如lomboz_eclipse)。 第二步: Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); Connection conn= DriverManager.getConnection(url, user, password); url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID user="test"; password="test"; 3、连接SQLServer2005 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=mydata","sa","root"); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from users"); while(rs.next()) { System.out.println(rs.getString(2)); } 4、连接access 首先建立数据库和数据源lxhdb,当数据库没密码时: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:lxhdb"); 如果有密码conn = DriverManager.getConnection("jdbc:odbc:数据源","用户名","密码"); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from user"); 5、SQL Server7.0/2000数据库 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; //mydb为数据库 String user="sa";

数据库连不上

不允许交叉联接问题 错误原因:没有建立连接 RQP-DEF-0103错误 对于具有以下身份的用户而言,不允许使用交叉联接(查询主题之间:[测试].[test_li], [测试.[test_lj]):{所有经过验证的用户, 任何人, 创建者, 查询用户, 客户, 度量标准创建者, 度量标准用户, 这个方法好极了: 方法1:在报表端处理一下,就是选中你交叉表所用的查询,设置属性“允许向量乘积”设置为允许就可以了 (查看->查询) 方法2:在FM界面的project菜单中,选中Edit Governors,在弹出的页面中把Cross-Product joins设为Allow 在与SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server 已配置为允许远程连接。(provider: 命名管道提供程序, error: 40 - 无法打开到SQL 1.开启sql2005远程连接功能,开启办法如下: 配置工具->Sql Server外围应用配置器->服务和连接的外围应用配置器->打开MSSQLSERVER节点下的Database Engine节点,先择“远程连接”,接下建议选择“同时使用TCP/IP和named pipes”,确定后重启数据库服务就可以了。 2.登陆设置改为:Sql Server 和Windows 身份验证模式,具体设置如下: SQL Server Management Studio管理器->Windows 身份验证连接服务器->对象资源管理器中选择你的数据服务器->右键->属性->安全性->Sql Server 和Windows 身份验证模式选中。 3.设置一个Sql Server方式的用户名和密码,具体设置如下: (1)SQL Server Management Studio管理器->Windows 身份验证连接服务器->对象资源管理器中选择你的数据服务器->展开服务器上的“安全性”->登陆名->在sa帐号上点右键->“选择页”选择常规->更改sa登陆帐号的密码。这样就设置了一个用户名为sa,密码为:sa123456的用户。 (2)“选择页”选择状态->登陆修改为启用 4.数据库连接字符串 数据库连接字符串有好几种,相信你自己也见过,都被搞晕了 Data Server=./SQLEXPRESS;Initial Catalog=Northwind;User ID=sa;Password=sa123456 Data Server=服务器名/SQLEXPRESS;Initial Catalog=Northwind;User ID=sa;Password=sa123456 Data Server=localhost/SQLEXPRESS;Initial Catalog=Northwind;User

数据库连接池原理

一、连接池的基本工作原理 1、基本概念及原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量和使用情况,为系统开发、测试及性能调整提供依据。 2、服务器自带的连接池 JDBC的API中没有提供连接池的方法。一些大型的WEB应用服务器如BEA的WebLogic 和IBM的WebSphere等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。 二、连接池关键问题分析 1、并发问题 为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为Java语言自身提供了对并发管理的支持,使用synchronized关键字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized关键字,如:public synchronized Connection getConnection () 2、多数据库服务器和多用户 对于大型的企业级应用,常常需要同时连接不同的数据库(如连接Oracle和Sybase)。如何连接不同的数据库呢?我们采用的策略是:设计一个符合单例模式的连接池管理类,在连接池管理类的唯一实例被创建时读取一个资源文件,其中资源文件中存放着多个数据库的地址、用户名、密码等信息。根据资源文件提供的信息,创建多个连接池类的实例,每一个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个名字,通过不同的名字来管理不同的连接池。 对于同一个数据库有多个用户使用不同的名称和密码访问的情况,也可以通过资源文件处理,即在资源文件中设置多个具有相同url地址,但具有不同用户名和密码的数据库连接信息。 3、事务处理 我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-ALL-NOTHING”原则,即对于一组SQL语句要么全做,要么全不做。 在Java语言中,Connection类本身提供了对事务的支持,可以通过设置Connection的AutoCommit属性为false,然后显式的调用commit或rollback方法来实现。但要高效的进行Connection复用,就必须提供相应的事务支持机制。可采用每一个事务独占一个连接来实现,这种方法可以大大降低事务管理的复杂性。 4、连接池的分配与释放 连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。 对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给它(实际是先做连接是否有效的判断,如果可用就分配给用户,如果不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接),如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间

通过ADO连接各种数据库的字符串

通过ADO连接各种数据库的字符串 在网络编程过程中,ADO(Activex Data Object)编程往往是不可少的工作,特别是开发电子商务网站。既然讲到ADO数据对象,那么就顺便简单地介绍一下ADO数据对象及其功能。ADO数据对象共有七种独立的对象,他们分别是连接对象(Connection)、记录集对象(RecordSet)、域对象(Field)、命令对象(Command)、参数对象(Parameter)、属性对象(Property)和错误对象(Error)。功能请参见附录1。 ADO数据对象用来连接数据库的方式有两种,分别是ODBC和OLE DB方式,下面就分别介绍用这两种方式连接数据库的例子。 第一种:ODBC DSN-Less Connections ODBC Driver for Access ODBC Driver for dBASE ODBC Driver for Excel ODBC Driver for MySQL ODBC Driver for Oracle ODBC Driver for Paradox ODBC Driver for SQL Server ODBC Driver for Sybase ODBC Driver for Sybase SQL Anywhere ODBC Driver for Text ODBC Driver for Teradata ODBC Driver for Visual FoxPro 第二种:OLE DB Data Provider Connections OLE DB Provider for Active Directory Service OLE DB Provider for DB2 OLD DB Provider for Internet Publishing OLE DB Provider for Index Server OLE DB Provider for Microsoft Jet OLE DB Provider for ODBC Databases OLE DB Provider for Oracle (From Microsoft) OLE DB Provider for Oracle (From Oracle)

ODBC和OleDb访问数据库的连接字符串

C# 中ODBC和OleDb访问数据库的连接字符串 因为工作需要自学数据库的访问,查看相关书籍时,都是以OleDb类进行.Net开发为例,虽然也提到ODBC和OleDb在原理上是一样,但是没有实际的例子,而我恰恰需要通过ODBC来访问数据库,这就碰到连接字符串问题,下面介绍一种简单的查找连接字符串的方法,前提是你用的是VisualStudio开发工具。 步骤一:先在控制面板的数据源ODBC中设定好系统DSN,方法如下; 打开“控制面板”—>“管理工具”—>“数据源(ODBC)”,打开“ODBC 数据源管理器”,设置系统DSN或用户DSN。 单击“添加”按钮进入创建新数据源,选择数据源的驱动程序,因为我要演示的是通过ODBC访问本地Access数据库,所以此处选择“Microsoft for Access Driver(*mdb,*accdb)”,其中mdb文件的Access是Access2003数据库文件的后缀,accdb文件Access2007和以上版本数据库文件的后缀,accdb文件转换为mdb需要在Office2007中打开accdb文件然后另存为Access2003数据库,后缀名自动变为mdb,这两种格式的文件数据库连接组件不一样。 当然你也可以通过ODBC访问SQL Serve等其他数据库,虽然使用ODBC能以统一的方式处理所有的数据库,但是使用ODBC来进行.NET开发的时候,其速度要比OleDB、SQL Server慢很多。

选择数据源的驱动程序后自动跳入下面界面,“数据源名”自己设定,此处命名为DataBase,在“数据库”中点击“选择”,选择需要通过ODBC连接的数据库,选择好后在“数据库:”右侧会显示数据库的路径如图。 单击“确定”后返回“ODBC数据源管理器”,此时在系统数据源中已经添加了一个名称为“DataBase”的“Microsoft for Access Driver(*mdb,*accdb)”的驱动程序。点击“确定”关闭该界面。

https://www.sodocs.net/doc/372792400.html,连接各类数据库

1.C#连接连接Access 程序代码: ------------------------------------------------------------------------------- using System.Data; using System.Data.OleDb; .. string strConnection="Provider=Microsoft.Jet.OleDb.4.0;"; strConnection+=@"Data Source=C:BegASPNETNorthwind.mdb"; OleDbConnection objConnection=new OleDbConnection(strConnection); .. objConnection.Open(); objConnection.Close(); -------------------------------------------------------------------------------- 解释: 连接Access数据库需要导入额外的命名空间,所以有了最前面的两条using命令,这是必不可少的! strConnection这个变量里存放的是连接数据库所需要的连接字符串,他指定了要使用的数据提供者和要使用的数据源. "Provider=Microsoft.Jet.OleDb.4.0;"是指数据提供者,这里使用的是Microsoft Jet引擎,也就是Access中的数据引擎,https://www.sodocs.net/doc/372792400.html,就是靠这个和Access的数据库连接的.

"Data Source=C:\BegASPNET\Northwind.mdb"是指明数据源的位置,他的标准形式是"Data Source=MyDrive:MyPath\MyFile.MDB". PS: 1."+="后面的"@"符号是防止将后面字符串中的"\"解析为转义字符. 2.如果要连接的数据库文件和当前文件在同一个目录下,还可以使用如下的方法连接: strConnection+="Data Source="; strConnection+=MapPath("Northwind.mdb"); 这样就可以省得你写一大堆东西了! 3.要注意连接字符串中的参数之间要用分号来分隔. "OleDbConnection objConnection=new OleDbConnection(strConnection);"这一句是利用定义好的连接字符串来建立了一个链接对象,以后对数据库的操作我们都要和这个对象打交道. "objConnection.Open();"这用来打开连接.至此,与Access数据库的连接完成. -------------------------------------------------------------------------------- 2.C#连接SQL Server 程序代码: -------------------------------------------------------------------------------- using System.Data; using System.Data.SqlClient; .. string strConnection="user id=sa;password=;"; strConnection+="initial catalog=Northwind;Server=YourSQLServer;"; strConnection+="Connect Timeout=30";

数据库连接字符串

/数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. public static string connectionString = System.Configuration.ConfigurationManager.C onnectionStrings["ConnectionString"].ConnectionString; ///

///执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) /// ///存储过程名 ///存储过程参数 ///SqlDataReader public static SqlDataReader RunProcedure(string storedProcName, IDataParamet er[] parameters) { SqlConnection connection = new SqlConnection(connectionString); SqlDataReader returnReader; connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); https://www.sodocs.net/doc/372792400.html,mandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(CommandBehavior.CloseConnection ); return returnReader; } /// ///执行存储过程 /// ///存储过程名 ///存储过程参数 ///DataSet结果中的表名 ///DataSet public static DataSet RunProcedure(string storedProcName, IDataParameter[] pa rameters, string tableName) {

Java中数据库连接池原理机制

连接池的基本工作原理 基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效治理。我们知道,对于共享资源,有一个很闻名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的治理机制监视数据库的连接的数量?使用情况,为系统开发?测试及性能调整提供依据。 服务器自带的连接池 JDBC的API中没有提供连接池的方法。一些大型的WEB应用服务器如BEA的WebLogic 和IBM的WebSphere等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。 连接池要害问题分析

1、并发问题 为了使连接治理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为java语言自身提供了对并发治理的支持,使用synchronized要害字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized要害字,如:public synchronized Connection getConnection() 2、多数据库服务器和多用户 对于大型的企业级应用,经常需要同时连接不同的数据库(如连接Oracle和Sybase)。如何连接不同的数据库呢?我们采用的策略是:设计一个符合单例模式的连接池治理类,在连接池治理类的唯一实例被创建时读取一个资源文件,其中资源文件中存放着多个数据库的url地址()?用户名()?密码()等信息。如tx.url=172.21.15.123:5000/tx_it,https://www.sodocs.net/doc/372792400.html,er=yang,tx.passWord=yang321。根据资源文件提供的信息,创建多个连接池类的实例,每一个实例都是一个特定数据库的连接池。连接池治理类实例为每个连接池实例取一个名字,通过不同的名字来治理不同的连接池。 对于同一个数据库有多个用户使用不同的名称和密码访问的情况,也可以通过资源文件处理,即在资源文件中设置多个具有相同url地址,但具有不同用户名和密码的数据库连接信息。 3、事务处理 我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-ALL-NOTHING”原则,即对于一组SQL语句要么全做,要么全不做。

数据库连接字符串详解

SQLserver: 命名空间应用:using System.Data; using System.Data.SqlClient; 字符串:@"Server=服务器名;Database=数据库名;User ID=用户名;Password=密码;" window身份验证字符串写法:@"Data Source=.;Initial Catalog=数据库名;Integrated Security=True" SQL身份验证:字符串写法 @"server=.;database=ReportServer;uid=sa;pwd=sa" access: 命名空间应用:using System.Data; using System.Data.OleDb; 字符串:@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库的物理路径;User ID=用户名;Password=你的密码;" 无密码字符串:@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库的物理路径;" 注解:1. “@”符号用于防止将后面字符串中的“\”解析为转义字符。也就是回车“\n” 2. (local)表示本地 3. Application.StartupPath相对路径 可添加属性:(在字符串中可以添加的属性,用";"符号分开即可) 1. Persist Security Info=false/true 在数据库连接成功后是否保存密码信息,True表示保存,False表示不保存 https://www.sodocs.net/doc/372792400.html,中默认情况下为false 2. Connect Timeout=分钟数设定多少分钟之后过期 附录: 1关键字 其中一些关键字及其值的说明:(关键字不区分大小写) 1.Connect Timeout 表示连接超时的意思,即在终止尝试并产生错误之前,等待与服务器的连接的时间长度(以秒为单位),默认值为15. 2.Data Source 或 Server 两个关键字都代表同一个意义,即要连接的SQL Server实例的名称或网络地址。 3.Initial Catalog 或 Database 两个关键字都代表同一个意义,即数据库的名称。如果连接的是本地的服务器,既可以写本地服务器的名字,也可写"localhost"或"(local)"。 4.Integrated Security 或Trusted_Connection 两个关键字都代表同一个意义,即是否使用Windows集成安全身份认证。当其值为False

连接池优缺点

数据库连接池的好处 对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数 据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但 是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统 的性能,因为对于连接的使用成了系统性能的瓶颈。 连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以 得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。 对于共享资源,有一个很著名的设计模式:资源池。该模式正是为了解决资源频繁分配、释放 所造成的问题的。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,提供一套 高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。 数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接 获取和返回方法。如: 外部使用者可通过getConnection方法获取连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。 数据库连接池技术带来的优势: 1.资源重用 由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的 基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。 2.更快的系统响应速度 数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。此时连接的初始 化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和 释放过程的时间开销,从而缩减了系统整体响应时间。 3.新的资源分配手段 对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池 技术,几年钱也许还是个新鲜话题,对于目前的业务系统而言,如果设计中还没有考虑到连接池 的应用,那么…….快在设计文档中加上这部分的内容吧。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 4.统一的连接管理,避免数据库连接泄漏 在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从 而避免了常规数据库连接操作中可能出现的资源泄漏。一个最小化的数据库连接池实现: 连接池的优缺点 优点 使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主要取决于网络的速 度以及应用程序和数据库服务器的(网络)距离,而且这个过程通常是一个很耗时的过程。而采用 数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到 数据库服务器,这样就节省了时间。 缺点 数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味着资源的浪费)。

用编程方式实现数据库连接

使用SqlConnection类的对象实现与SQLServer数据库连接 步骤如下: 第一步:设置连接字符串 string connectionString=”Data Source=localhost\SQLEXPRESS;Initial Catalog=WebShop;Integrated Security=True”; 例如: string connectionString=”workstation id=XYZ;packet size=4096;user id=sa;data source=xyz;persist security info=False;initial catalog=pubs”; 第二步:建立连接对象(SqlConnection的函数) SqlConnection myConnection=new sqlConnection(connectionString); (可以提前插入第八步) 第三步:建立数据库操作命令(SqlCommand对象) (1)使用连接类对象CreateCommand()方法 SqlCommand myCommand=myConnection.CreateCommand(); (2)使用SqlCommand类函数来设置Connection属性 Sqlcommand myCommand=new sqlCommand(); myCommand.Connection=myConnection; 第四步:设置SqlCommand的命令(CommandText属性)

https://www.sodocs.net/doc/372792400.html,mandText=”Select * From authors”; 第五步:建立sqlDataAdapter数据适配器(sqlDataAdapter类) sqlDataAdapter myDataAdapter=new SqlDataAdaper(); 第六步:指定数据适配器所对应的命令 myDataAdapter.SelectCommand=myCommand; 第七步:建立数据集对象(DataSet类) DataSet myDataSet=new DataSet(); 第八步:打开链接(使用SqlConnection的open方法) myConnection.Open(); 第九步:实施对数据库的操作(使用数据适配器的fill或updata方法) myDataAdapter.Fill(myDataSet,”authors”); 注意:并没有把数据传给指定的页面元素,若要指定还得需要对应元素的绑定(Bind)方法。 第十步:关闭连接(使用SqlConnection的Close方法) myConnection.Close(); 实例:33页下部要求:将pubs数据库中的authors表的记录绑定到DataGird控件(在DataGird控件中显示pubs数据库中的authors 表的记录)

04. 数据库连接池(DataSource)

数据库连接池(DataSource) 1、概念 在三层架构中,DAO层直接与数据库交互,首先要建立与数据库的连接,如果采用下图(a)所示,则用户每次的请求都要创建连接,用完又关闭,而数据库连接的创建和关闭需要消耗较大的资源,因此实际开发中常采用图(b)所示,在应用程序启动时创建一个包含多个Connection对象的连接池,DAO层使用时直接从池子里取一个Connection对象,用完后放回池子,避免了重复创建关闭数据库连接造成的开销。 2、数据库连接池原理 下面的代码模拟了数据库连接池的原理(代码中的JDBCUtil工具类见《MySQL(JDBC)》),池子里保持了10个Connection对象,并提供了getConnection和release方法: public class ConnectionPoolDemo { //连接池实际上就是一个List private static List pool = new LinkedList();

static{//加载连接池类时在池子中放入10个连接 for(int i = 0;i < 10;i ++){ Connection conn; try { conn = JDBCUtil.getConnection(); pool.add(conn); } catch (Exception e) { e.printStackTrace(); } } } //从池子中取出一个连接 public synchronized Connection getConnection(){ return pool.remove(0); } //把连接还回池子中 public static void release(Connection conn){ pool.add(conn); } } 3、编写一个符合规范的连接池 上节模拟数据库连接池原理的代码也实现了一个简单连接池,但是不符合规范(Sun公司制定)。编写一个符合规范的连接池需要实现javax.sql.DataSource接口。(DataSource接口中定义了两个重载的getConnection方法) 编程难点☆:当用户使用完Connection,执行conn.close()时,Connection对象应保证将自己还给连接池,而不要把conn关闭。之所由Connection对象保证将自己返回到LinkedList 中,是因为DataSource接口中并未定义上节例子中类似release的方法。所以必须改写Connection中的close方法,使得用户执行conn.close()时,将Connection对象还给连接池。解决方案☆:改写驱动程序中Connection类的close方法。对已知类的某些方法进行功能上的改变,有以下几种编码方案(☆): 1)编写子类,覆写需要改变的方法。此处行不通,原因有:①程序中不知道继承哪个驱动的Connection实现类②数据库驱动对Connection接口的实现类是final的,不允许被继承。 2)装饰(包装)设计模式(静态代理) ①定义包装类:MyConnection,该类完成了对com.mysql.jdbc.Connection类的包装。 关键词:保持被包装对象的原有信息、对某个/某些方法进行改写。包装类的编写过程如下:/**

Java实现数据库连接池的代码.

1 package com.kyo.connection; 2 3 import java.sql.Connection; 4 import java.sql.DatabaseMetaData; 5 import java.sql.Driver; 6 import java.sql.DriverManager; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 import java.util.Enumeration; 10 import java.util.Vector; 11 12 public class ConnectionPool { 13 14 private ConnectionParam param; 15 16 private String testTable = ""; // 测试连接是否可用的测试表名,默认没 有测试表 17 18 private Vector connections = null; // 存放连接池中数据库连接的向量 , 初始时为 19 // null,它中存放的对象为PooledConnection 型 20 21 public void setParam(ConnectionParam param { 22 this.param = param; 23 } 24 25 public ConnectionParam getParam( { 26 return param;

27 } 28 29 /** 30 * 构造函数 31 * 32 * @param param 33 */ 34 public ConnectionPool(ConnectionParam param { 35 this.param = param; 36 } 37 38 /** 39 * 40 * 获取测试数据库表的名字 41 * 42 * @return 测试数据库表的名字 43 */ 44 45 public String getTestTable( { 46 return this.testTable; 47 } 48 49 /** 50 * 51 * 设置测试表的名字 52 * 53 * @param testTable

相关主题