java和java 内存数据库库连接问题

7247人阅读
&& 现在的网站挂在网上都不是静态的死板的,都和后台有着或多或少的联系,特别是信息管理系统当然这绝对少不了连接数据库.每个人的编程思想或者说编程的思路不一样当然连接数据库的方式也会不一样.我总结了几个java连接数据库的方式,只是做为参考希望能给你派上用场.
&& JDBC是java数据库连接技术的简称,它提供了连接各种数据库的能力,这便使程序的可维护性和可扩展性大大的提高了.JDBC连接数据库常见的驱动方式有两种,一种是jdbc-odbc即桥连另外一种是纯java驱动.一般在做java开发的时候用第二种.so前一种我就不说了,纯java驱动方式连接步骤如下:
&&&&& 1.先把一个jdbc的jar包导入到项目(用MyEclipse开发)的lib中.
&&&&&&2.代码如下:
&&&&&&&&&&&&&&&& import java.sql.*;
* 连接数据库帮助类
* @author Administrator
public class BaseDao {
private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManageSystem";
private static final String USERNAME="sa";
private static final String PASSWORD="sa";
* 连接数据库
* @return 数据库连接对象
* @throws ClassNotFoundException
* @throws SQLException
public Connection getConn()throws ClassNotFoundException,SQLException{
Class.forName(DRIVER);
Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
* 释放资源
* @param conn
* @param pstmt
* @param rs
* @throws SQLException
public void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs)throws SQLException{
if(rs!=null){
rs.close();
if(pstmt!=null){
pstmt.close();
if(conn!=null){
conn.close();
* 执行SQL语句,可以进行增、删、改的操作
* @param sql
* @return 影响条数
* @throws ClassNotFoundException
* @throws SQLException
public int executeSQL(String sql)throws ClassNotFoundException,SQLException{
Connection conn = this.getConn();
PreparedStatement pstmt = conn.prepareStatement(sql);
int number = pstmt.executeUpdate();
this.closeAll(conn, pstmt, null);
从代码知道首先吧jdbc驱动类装载java虚拟机中,即Class.forName(DRIVER);其次加载驱动并建立于数据库的连接Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);;然后发送SQL语句并的到结果集.之后处理结果,最后要关闭数据库的连接,释放资源.当然我说的这样连接数据库的方式使用的软件是sql和MyEclipse.
&&&&& 使用配置文件来连接数据库,当然这样的连接需要进行一些配置.其实这样的连接用专业术语来说就是连接池,连接池是负责分配管理和释放数据库连接.它允许用用程序重复使用一个现有的数据库连接不再重复建立连接.释放空闲时间超过最大空闲时间的数据库连接以避免因为没有释放数据库而引起的数据库遗漏.
&&&&& 连接池的创建分为以下几个步骤:1.配置context.xml文件& 这个文件是服务器(指tomcat)的一个conf文件夹中,拷贝出来放入项目的lib文件夹中,具体配置如下:
&Resource name="jdbc/book" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="20" maxWait="100" username="sa" password="sa"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;dataBaseName=book"
/&在config.xml文件中加入Resource标签,然后对数据库信息进行配置,当然这个数据库指的也是sqlserver有疑问可以qq联系
&&&&&&& 之后把数据库的驱动包,这里指的是sql2005的包放入服务器的lib中,这样以后如果在你自己的机子上都不用在重新导入这个包了.
&&&&&&& 然后就是从MyEclipse中取得这样的连接从而对数据库进行一些操作具体代码如下:
&&& package web.login.
import java.sql.C
import java.sql.PreparedS
import java.sql.ResultS
import javax.naming.C
import javax.naming.InitialC
import javax.sql.DataS
public class BaseDao {
protected C
protected PreparedS
protected ResultS
protected S
public Connection getConn(){
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/user");
return ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
public void closeAll(Connection conn,PreparedStatement ps,ResultSet rs){
if(rs!=null){
rs.close();
if(ps!=null){
ps.close();
if(conn!=null){
conn.close();
} catch (Exception e) {
e.printStackTrace();
之后便可以建立业务类从而对数据库进行操作.
&&&&&&&&&&& 除此之外当使用java的3大框架技术的时候,使用hibernate就没有这么麻烦了,直接使用它里面的一些封装好的方法就可以了,有些朋友会问那干嘛还要前面说的连接数据库的技术了.我要说的是如果你对数据库连接的基本机制都不清楚又怎么能解决更为复杂的问题了.当然如果你有更加好的意见加qq。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13525次
排名:千里之外讨论:java程序已经释放连接,数据库端连接不立马释放平台:aix 5.3 DB2 9.5 was 7.0AP已经释放了连接,但是在数据库端查看连接并没有立马释放,过了十几分钟,数据库端连接才释放。大家讨论讨论会是什么原因。我后来是通过创建THRESHOLD来限制连接保持空闲状态的时间上限,还有没有其他的办法吗?...平台:aix 5.3 DB2 9.5 was 7.0AP已经释放了连接,但是在数据库端查看连接并没有立马释放,过了十几分钟,数据库端连接才释放。大家讨论讨论会是什么原因。我后来是通过创建THRESHOLD来限制连接保持空闲状态的时间上限,还有没有其他的办法吗?关注问题117回答understanding db2中有一节这样说:& & 当MAX_CONNECTIONS>MAX_COORDAGENTS时,系统启用连接集中器,这意味着每个代理agents为多个connection连接服务。& &&&当连接集中器启用时,空闲的代理总是会放回到空闲代理池,而不管num_poolagents的值怎么...understanding db2中有一节这样说:& & 当MAX_CONNECTIONS>MAX_COORDAGENTS时,系统启用连接集中器,这意味着每个代理agents为多个connection连接服务。& &&&当连接集中器启用时,空闲的代理总是会放回到空闲代理池,而不管num_poolagents的值怎么设置。因此,在某些特定时间,代理池中的代理可能会更多(相对于num_poolagents的设置值)。池中的代理将会基于系统的负载和它在池中空闲的时间来选择结束自己,来使空闲池中的代理数减少到配置的数值。& & 不知道有没有帮到你!赞同数据库管理员
, 拓维信息系统股份有限公司你的应用是使用的was的连接池吗?如果应用是直接连的数据库,那应用释放了连接,数据库肯定会马上释放的。如果是was的连接池那可不一定了,需要看连接池的设置了你的应用是使用的was的连接池吗?如果应用是直接连的数据库,那应用释放了连接,数据库肯定会马上释放的。如果是was的连接池那可不一定了,需要看连接池的设置了赞同技术经理
, 安图特(北京)科技有限公司使用的是连接池,连接池最小值设置的是1,连接超时设置的是120秒使用的是连接池,连接池最小值设置的是1,连接超时设置的是120秒赞同工程师
, CDI晕,这贴发了这么久怎么好像没看见哦。你用了连接池的话,AP释放了连接,等于把连接还给连接池哦。真正的连接怎么处理不是AP该管的事儿呀。晕,这贴发了这么久怎么好像没看见哦。你用了连接池的话,AP释放了连接,等于把连接还给连接池哦。真正的连接怎么处理不是AP该管的事儿呀。赞同技术经理
, 安图特(北京)科技有限公司我是说数据库里的连接还不释放,就是用db2 list applications看到的连接我是说数据库里的连接还不释放,就是用db2 list applications看到的连接赞同工程师
, CDI没明白你是什么意思哦。db2 list applications 列出来的应该是硬连接,这是WAS在启动时候按照你的连接池设定就预先建立了,AP需要连接的时候是从连接池里拿现成的,而不是真的现去建了个连接,用完后con.close(),就把连接还给连接池里来重用,而不是真的去断连了。...没明白你是什么意思哦。db2 list applications 列出来的应该是硬连接,这是WAS在启动时候按照你的连接池设定就预先建立了,AP需要连接的时候是从连接池里拿现成的,而不是真的现去建了个连接,用完后con.close(),就把连接还给连接池里来重用,而不是真的去断连了。赞同技术经理
, 安图特(北京)科技有限公司AP用的是was连接池里的连接,用完之后就释放,这个没有问题。就是我发现,数据库里的session一直还在,这个session明明已经处理完了。换句话说,就是空闲代理数大于NUM_POOLAGENTS。AP用的是was连接池里的连接,用完之后就释放,这个没有问题。就是我发现,数据库里的session一直还在,这个session明明已经处理完了。换句话说,就是空闲代理数大于NUM_POOLAGENTS。赞同工程师
, CDI楼主的这两个参数是多少哦MAX_CONNECTIONSMAX_COORDAGENTS是不是启用了Connection Concentrator?楼主的这两个参数是多少哦MAX_CONNECTIONSMAX_COORDAGENTS是不是启用了Connection Concentrator?赞同工程师
, CDI我想可能也是这个原因,所以让楼主核实一下参数的设定。我想可能也是这个原因,所以让楼主核实一下参数的设定。赞同其它
, 未知这个可能和AIX系统的内存机制有关,我们之前咨询过was方面的问题,IBM工程师的答复是为了应用在下次能快速建立连接,因此它不肯释放。我估计DB2也应该差不多吧这个可能和AIX系统的内存机制有关,我们之前咨询过was方面的问题,IBM工程师的答复是为了应用在下次能快速建立连接,因此它不肯释放。我估计DB2也应该差不多吧赞同
撰写回答技术经理, 安图特(北京)科技有限公司关注1发布1177回答725请稍候...备忘录:Java连接SqlServer2008数据库中遇到的各种问题以及解决方法
首先下载JDBC:下载地址:/zh-cn/download/details.aspx?id=21599
下载 完成后,是个exe文件,点击运行,会提示你选择解压目录:如下图:
点击Browse,随便选择一个文件夹就好
解压完成后,进入 &你解压到得目录&\sqljdbc_3.0\chs,里边有两个我们需要的东东
一个是:sqljdbc.jar,另外一个是sqljdbc4.jar
这两个有什么区别我也没研究,当我在eclipse中新建了一个项目,适用第一个包时,报错了,说是什么该包不支持jre1.7,让我用带4的那个,我用了就没报错了。
接下来是在java代码中用两种方式连接sqlserver2008数据库,一种是sa身份验证模式,另外一种是混合身份验证模式:
第一种:sa身份验证模式,用下边java代码的url
Java代码:
import java.sql.C
import java.sql.DriverM
import java.sql.ResultS
import java.sql.S
public class Test {
public static void main(String args[]) {
// Create a variable for the connection string.
String connectionUrl = &jdbc:sqlserver://localhost:1433;&
+ &databaseName=AdventureWintegratedSecurity=&;
String url = &jdbc:sqlserver://127.0.0.1:1368;databaseName=user=password=qiaoning&;//sa身份连接
String url2 = &jdbc:sqlserver://127.0.0.1:1368;databaseName=integratedSecurity=&;//windows集成模式连接
// Declare the JDBC objects.
Connection con =
Statement stmt =
ResultSet rs =
// Establish the connection.
System.out.println(&begin.&);
Class.forName(&com.microsoft.sqlserver.jdbc.SQLServerDriver&);
con = DriverManager.getConnection(url2);
System.out.println(&end.&);
// Create and execute an SQL statement that returns some data.
String SQL = &SELECT TOP 10 * FROM aud_t_basis&;
stmt = con.createStatement();
rs = stmt.executeQuery(SQL);
// Iterate through the data in the result set and display it.
while (rs.next()) {
System.out.println(rs.getString(4) + & & + rs.getString(6));
// Handle any errors that may have occurred.
catch (Exception e) {
e.printStackTrace();
if (rs != null)
rs.close();
} catch (Exception e) {
if (stmt != null)
stmt.close();
} catch (Exception e) {
if (con != null)
con.close();
} catch (Exception e) {
第二种:混合身份验证模式,用上边java代码的url2
代码很简单我就不多说了,这个代码的来源是刚才你解压的文件的 &sqljdbc_3.0\chs\help\samples\connections 目录下connectURL.java文件,整体基本没动,就是改了改url和表名。
如果用集成模式可能会出现的问题:
警告: Failed to load the sqljdbc_auth.dll cause :- no sqljdbc_auth in java.library.path
com.microsoft.sqlserver.jdbc.SQLServerException: 没有为集成身份验证配置驱动程序。
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1352)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2329)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1905)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1893)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1045)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:817)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:700)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:842)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Test.main(Test.java:26)
Caused by: java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at com.microsoft.sqlserver.jdbc.AuthenticationJNI.&clinit&(AuthenticationJNI.java:32)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1902)
... 11 more
解决方法:
找到你刚才的解压目录:进入sqljdbc_3.0\chs\auth\x64,我的是64位系统,如果是32位就x86,将一个名为sqljdbc_auth.dll的文件拷贝到:C:\Windows\System32下,就好了
还有另外一个很恶心的问题就是sqlserver2008用的是动态端口,需要你配置一下:如下图:
选择 SQL Server 配置管理器
进入如下界面:
把TCP动态端口中的0都删掉,留空;然后把列表拉到最下边,配置一个固定端口,以后你连接数据库就用这个端口就可以了:如下图:
我用的是1368,可以随便改,只要不用系统预留的端口就行。
好了,我遇到的问题大概就这么多了。希望可以帮助大家。也自己做一个备忘录。
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
Java连接SqlServer2008数据库 首先下载JDBC:下载地址:/zh-cn/download/details.aspx?id=21599 下载 完成后,是个exe文件,点击运行,会提示你选择解压目录. 解压完成后,进入 &你解压到得目录&\sqljdbc_3.0\chs,里边有两个我们需 ...
Java连接SqlServer2008数据库 首先下载JDBC:下载地址:/zh-cn/download/details.aspx?id=21599 下载 完成后,是个exe文件,点击运行,会提示你选择解压目录. 解压完成后,进入 &你解压到得目录&\sqljdbc_3.0\chs,里边有两个我们需 ...
将另一台服务器上的数据库备份文件,在现在用的这台服务器上还原之后,再创建相同的用户名,提示用户已存在 想将之前的用户先删除掉,却提示“数据库主体在该数据库中拥有架构,无法删除解决方法” 在网上找到方法,试了一下,还真管用. --执行如下SQL语句 ALTER AUTHORIZATION ON SCHEMA::db_owner TO --然后手动删除 ...
Microsoft SQL Server错误: 15138删除对于用户失败,数据库主体在该数据库中拥有架构,无法删除.解决方法 删除 对于 用户&*&失败.
(Microsoft.SqlServer.Smo) 有关帮助信息,请单击: /fwlink?ProdName=Microsoft+SQ ...
这篇文章主要介绍了Oracle数据库中对死锁的查询及解决方法,文中用两个表创造死锁的简单例子来说明对死锁的撤销方法,需要的朋友可以参考下死锁的原理当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态, 此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错.
本篇文章给大家分享java连接sql server2008数据库配置的相关资料,需要的朋友可以参考下1.首先要去Microsoft官网下载sqljdbc2.0驱动--Microsoft SQL Server JDBC Driver 2.0.exe,很小大概就4M,解压后里面有2个Jar包,sqljdbc4.jar和sqljdbc.jar,这两个都一样,只是针 ...
Java的学习,很重要的一点是对数据库进行操作.Java连接SQLServer 2008数据库的步骤: 1.到微软官方下载jdbc 并解压,得到sqljdbc.jar和sqljdbc4.jar,由于使用的是JDK1.7,所以使用sqljdbc4.jar, 2.复制文件sqljdbc4.jar到jdk目录\jdk1.7.0\jre\lib\ext下. 配置系统 ...
在实际的项目开发中,碰到从数据库中取数据的应用比较多,一般的处理方法为: 写一个取数据的.sql脚本,然后在SHELL程序中调用取得,其实这两步可以合并为一步处理.
例如:我现在要将从表AA中查询到的所有数据赋给变量a, 代码如下:(pw为已经定义的数据库连接)
a=`sqlplus -S $pw &&EOF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&关于java连接数据库关闭连接的问题
[问题点数:40分,结帖人akunainiannian]
关于java连接数据库关闭连接的问题
[问题点数:40分,结帖人akunainiannian]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 java 内存数据库 的文章

 

随机推荐