排除了网络问题,就要仔细的review一下你的代码了
解决方案 »
- 收藏 struts2_hibernate3.3小例子 不报错 但数据库没反应 我怀疑是不是jarb包弄错了,求大神们看看代码有没有问题
- “将 float 转换为数据类型 numeric 时出现算术溢出错误。”疑问?请教各位高手们
- hibernate中怎么样解决日期类的持久化
- 大数据如何进行转储
- EJB发布的初级问题
- 要用bean:write标签输出一个非bean的类的方法能行吗
- [SQLServer 2000 Driver for JDBC]Invald parameter binding(s)的问题,很急!!
- tomcat 有这样的bug吗?不能在一个页面或者函数内实现对数据库(sqlserver2000)的两次以上的操作。
- 为什么要对entity bean进行分类?
- Controller 怎么接收 Json数据啊!!急!!!在线等!!
- java门外汉提问
- 为何不能讲数据库中读出的被容赋值给JavaBean?
*
* @author zhuyang
* 从PDM数据库中取数据,得到一个ArrayList集合
*/
public class DateFromDB { static Logger log = Logger.getLogger(DateFromDB.class.getName());
public ArrayList getDateSource(String sqlStr) { Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList resultList = new ArrayList();
HashMap resultMap = new HashMap();
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/plmdb");
log.debug("================JNDI连接成功=====================");
//为什么开始总是到获取连接处程序停止且不抛出异常
conn = ds.getConnection();
log.debug("================获取连接成功=====================");
stmt = conn.createStatement();
rs = stmt.executeQuery(sqlStr);
while (rs.next()) {
resultMap = new HashMap();
int columnCount = 1;
// 用HashMap封装查询出的一条记录
while (columnCount <= rs.getMetaData().getColumnCount()) {
if (rs.getObject(columnCount) instanceof java.sql.Date
|| rs.getObject(columnCount) instanceof java.sql.Timestamp
|| rs.getObject(columnCount) instanceof java.util.Date
|| rs.getObject(columnCount) instanceof java.sql.Time) {
rs.getMetaData().getColumnType(columnCount);
resultMap.put(rs.getMetaData().getColumnName(
columnCount), rs.getTimestamp(columnCount));
} else if (rs.getObject(columnCount) instanceof java.lang.String) {
resultMap.put(rs.getMetaData().getColumnName(
columnCount), rs.getString(columnCount).trim());
} else {
resultMap.put(rs.getMetaData().getColumnName(
columnCount), rs.getObject(columnCount));
}
columnCount++;
}
// 用ArrayList数组封装查询出的多条记录
resultList.add(resultMap);
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭ps 和conn 对象
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return resultList; }
}
<Resource name="jdbc/plmdb"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
username="system"
password="manager"
maxIdle="5"
maxWait="5000"
url="jdbc:oracle:thin:@10.3.3.137:9081:plmdb"
maxActive="10"/>
web.xml
<resource-ref>
<description>DB pool Connection</description>
<res-ref-name>jdbc/plmdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
用jndi连数据库第一次比较耗费时间.
从代码看不出问题...
这个能够打印出来肯定说明已经找到数据源了啊。
下面就停了,有时候会报异常,有时候什么异常都没有程序就中断了。
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Io 异常: Bad packet type)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:855)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)最郁闷得是,这里是应用定时取数据。我设置时间规则是每30秒取一次(时间短便于测试)。
WEB容器启动后最开始几次都是在getConnction那里中断,但是并不抛出任何异常,
在连续对数据库6-7次访问后,才会在getConnection那里抛出以上异常。
异常得抛出为什么有时候有时候没有呢!
不明白
log.debug("================JNDI连接成功=====================");
//为什么开始总是到获取连接处程序停止且不抛出异常
conn = ds.getConnection();
这两行都可以执行的。如果说楼主是这个地方执行通过不了建议查一下数据库吧。代码应该没问题。配置好像也没有错。
lsnrctl status;
lsnrctl start listenerName;