用JDBC直接连接数据库最多支持多少个连接?

BPScofield 2007-08-23 11:40:25
最近遇到一个问题,用JDBC直接连接数据库,没用连接池,当网站访问量增大时(网上报名),出现下面错误:
root cause

java.lang.NullPointerException
org.septet.website.newtags.db.DbUtils.getExcuteQuery(DbUtils.java:32)
org.septet.website.struts.action.UserSignUpInfoAction.execute(UserSignUpInfoAction.java:65)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.7 logs.


我想可能是获得的连接为空,报的这个错,但每次操作完成后,我都关了连接的。
数据库为ORACLE。
请问数据库是不是有限制连接数目?怎样解决上面的错误?
...全文
917 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
boy 2007-08-24
  • 打赏
  • 举报
回复
conn.close();
APOLLO_TS 2007-08-24
  • 打赏
  • 举报
回复
public List selectTanCde(TanCdeEntDAOData data) throws DAOException{
if (log.isTraceEnabled()) {
log.trace("entering TanCdeEntDAO.selectTanCde()");
}
String readSql = getSelectTanCdeSql(data);
List ret = new ArrayList();
PreparedStatement stmt = null;
ResultSet rs = null;
try {
String realSql = rdbmsStrategy.convertSelectSql(readSql, TanCdeEntDAO.class, "selectTanCde");
if (log.isDebugEnabled()) {
log.debug(realSql);
}
stmt = getConnection().prepareStatement(realSql);
JDBCUtil.setString(stmt, 1, data.getTAN_CDE(), rdbmsStrategy);
JDBCUtil.setString(stmt, 2, data.getCOR_CDE(), rdbmsStrategy);
long startTime = 0;
if (log.isInfoEnabled()) {
startTime = System.currentTimeMillis();
}
rs = stmt.executeQuery();
if (log.isInfoEnabled()) {
long finishTime = System.currentTimeMillis();
log.info("elapsed time: " + (finishTime - startTime) + "ms");
}

while (rs.next()) {
TanCdeEntDAOData listElement = new TanCdeEntDAOData();
listElement.setTAN_NAM(JDBCUtil.getString(rs, 1, rdbmsStrategy));
ret.add(listElement);
}
if (log.isDebugEnabled()) {
log.debug("selectTanCde: result count: " + ret.size());
}
} catch (SQLException ex) {
throw new DAOException("SQLException occured. ", ex);
} finally{
JDBCUtil.closeAll(stmt, rs);
}
if (log.isTraceEnabled()) {
log.trace("exiting TanCdeEntDAO.selectTanCde()");
}
return ret;
}
*********************************************************************************
好像少了这个
finally{
JDBCUtil.closeAll(stmt, rs);
}
cchaha 2007-08-24
  • 打赏
  • 举报
回复
UP
BPScofield 2007-08-24
  • 打赏
  • 举报
回复
连接在另一个方法里关闭了的
BPScofield 2007-08-24
  • 打赏
  • 举报
回复
上面我发那段代码只是获得连接
操作数据库的代码DbUtils.java有关闭连接的方法
public void releaseConnection(){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
liw2007 2007-08-24
  • 打赏
  • 举报
回复
可能是你资源占用太多,在finally里把它关掉。
langke93 2007-08-24
  • 打赏
  • 举报
回复
Oracle 默认最大连接数是150,可以通过修改init.ora

###########################################
processes=150
yijie1206688 2007-08-23
  • 打赏
  • 举报
回复
把你获得Connection的代码贴出来
gougou8180 2007-08-23
  • 打赏
  • 举报
回复
没用连接池 那用的就是数据库的连接数
配置数据库 肯定有配这个的
一个工程用两个连接池没问题
BPScofield 2007-08-23
  • 打赏
  • 举报
回复
对了
一个工程能不能连接两个连接池?
BPScofield 2007-08-23
  • 打赏
  • 举报
回复
不能用连接池,因为后台操作是用的TOMCAT的连接池,他是写死在一个标签里,我不能引用。如果我自己使用一个连接池,就会跟后台那个冲突,具体报的什么错我现在不知道了,反正会出错,所以才改成直接连接的
Rachael1001 2007-08-23
  • 打赏
  • 举报
回复
还是换个连接池吧
huang19830516 2007-08-23
  • 打赏
  • 举报
回复
基本不用JDBC连接数据库~
lindazch 2007-08-23
  • 打赏
  • 举报
回复
友情支持
lemonyu 2007-08-23
  • 打赏
  • 举报
回复
连完就关,应该还好
schumiXsuse 2007-08-23
  • 打赏
  • 举报
回复
最近遇到一个问题,用JDBC直接连接数据库,没用连接池,当网站访问量增大时(网上报名),出现下面错误:
-------------------------------------
修改连接数可以直接修改oracle下的dbs目录下init.ora文件,但是不建议这样做,最好使用连接池.
kyokk2005 2007-08-23
  • 打赏
  • 举报
回复
估计可以支持很多个吧。。。
BPScofield 2007-08-23
  • 打赏
  • 举报
回复
对了,以前这句
Class.forName(className).newInstance();
没有加newInstance();我刚加上去的
BPScofield 2007-08-23
  • 打赏
  • 举报
回复
public Connection useXmlConnection(){
String className="";
String url="";
String username="";
String password="";
File file=new File(this.getClass().getResource(xmlPath).getPath());
SAXReader reader=new SAXReader();
Document document=null;
try {
document = reader.read(file);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
Element root=document.getRootElement();
Iterator iter=root.elementIterator();
Element foo;
while(iter.hasNext()){
foo=(Element)iter.next();
String name=foo.elementText("name");
String value=foo.elementText("value");
if("url".equalsIgnoreCase(name)){
url=value;
}else if("DriverClassName".equalsIgnoreCase(name)){
className=value;
}
else if("userName".equalsIgnoreCase(name)){
username=value;
}
else if("passWord".equalsIgnoreCase(name)){
password=value;
}
}
try {
Class.forName(className).newInstance();
conn=DriverManager.getConnection(url, username, password);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
tdy1234 2007-08-23
  • 打赏
  • 举报
回复
把代码贴上来看看

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧