排除了网络问题,就要仔细的review一下你的代码了
解决方案 »
- mysql 外键必须设置为空,可是会出现查询错误,该怎么解决啊?
- 已知某点的经纬度如何判断另外一个点是否在此点的方圆50米范围内
- 模拟QQ聊天工具如何发送文件
- 关于秒表的问题
- 问个hibernate级联删除的问题
- The server encountered an unexpected condition which prevented it from fulfilling the request
- servlet规范,有中文版么?
- quartz任务调度中,使每次执行的任务sleep() 30秒如何做到?
- eclipse的新建项目下怎么没有J2EE项目?
- 为什么无法编译呢?
- 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;