小弟第一次发帖,请多多指教。希望大家耐心听我说。由于服务器不在边上,
管理人员说是内存溢出,有一张图片信息
我想我的的jdbc是我自己封装的,会不会有问题。
这里是连接类:
/**
* 数据源.
* @time 2012-12-31 09:19:33
*/
package com.DataSource;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.Exceptions.DB_Exception;/**
* @author Administrator
*
*/
public final class DataSource {
/**
* . 构造函数.
*/
private DataSource() {
} /**
* . 静态数据库连接.
*/
private static Connection conn = null; /**
* @return conn.
* @throws DB_Exception
* Exception.
*/
public static Connection getConnection() throws DB_Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager
.getConnection(
"jdbc:mysql://192.168.1.104:3306/itao?characterEncoding=gbk",
"qqq", "");
} catch (ClassNotFoundException e) {
// 抛异常
throw new DB_Exception(e);
} catch (SQLException e) {
// 抛异常
throw new DB_Exception(e);
}
if (conn == null) {
throw new DB_Exception("conn为空!!!");
}
return conn;
} /**
* @throws DB_Exception
* Exception
*/
public static void close(ResultSet rs, Statement stat, Connection conn)
throws DB_Exception {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
throw new DB_Exception(e);
} finally {
try {
if (stat != null)
stat.close();
} catch (SQLException e) {
throw new DB_Exception(e);
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
throw new DB_Exception(e);
}
}
}
}
}还有就是小弟用jrockit内存检测工具(因为服务器上不好装,所以这个工具只装在了本地自己测,可能测得不准),工具指出以下这个类的这个方法67行和75行有问题(看我注释上有标行数)。
这个方法写在dao层里的,方法大致的作用是通过传过来的用户返回一个经过筛选后拼接的集合,用的struts2框架
:
public List<Task> taskListWithUser(User u) throws DB_Exception, EarnDao_Exception {
String sb = "";
String sb2 = "";
List<Task> taskList = new ArrayList<Task>();
Connection conn = DataSource.getConnection();//第67行
//sql1:获得任务对象,赛选条件:①指定的用户ID②任务类型为一个用户只能做一次的类型③此任务已完成
String stringsql = "select t.* from task t left join users_task ut on t.id=ut.tid where ut.uid=? and t.tasktype=0";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(stringsql);
ps.setInt(1, u.getId());
rs = ps.executeQuery();//有问题 第75行
while (rs.next()) {
Task t = new Task();
sb += ","+rs.getInt("id");
//sb.append(","+rs.getInt("id"));
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务已完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
//sql3:获得对象,赛选条件:①指定用户ID②任务类型:一个用户一天只能做一次③此任务已完成
String stringsql3 = "select t.* from task t left join users_task ut on t.id=ut.tid where ut.uid=? and t.tasktype=1 and CURDATE()=date_format(ut.tasktime,'%Y-%m-%d')";
ps = conn.prepareStatement(stringsql3);
ps.setInt(1, u.getId());
rs = ps.executeQuery();
while (rs.next()) {
Task t = new Task();
sb2 += ","+rs.getInt("id");
//sb2.append(","+rs.getInt("id"));
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务已完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
//sql2:获得任务对象,赛选条件:①指定的用户ID②任务类型:一个用户只能做一次③此任务未完成
String stringsql2 = null;
if("".equals(sb)) {
stringsql2 = "select * from task where tasktype=0";
} else {
stringsql2 = "select * from task where tasktype=0 and id not in (" + sb.substring(1) + ")";
}
ps = conn.prepareStatement(stringsql2);
rs = ps.executeQuery();
while (rs.next()) {
Task t = new Task();
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务未完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
//sql4:获得对象,赛选条件:①指定用户ID②任务类型:一个用户一天只能做一次③此任务未完成
String stringsql4 = null;
// String stringsql4 = "select DISTINCT(t.id) as ok,t.* from task t left join users_task ut on t.id=ut.tid where t.tasktype=1 and (ut.uid!=? or ut.uid is null) and (ut.tasktime!=CURDATE() or ut.taskname is null )";
if("".equals(sb2)) {
stringsql4 = "select * from task where tasktype=1";
} else {
stringsql4 = "select * from task where tasktype=1 and id not in (" + sb2.substring(1) + ")";
}
ps = conn.prepareStatement(stringsql4);
rs = ps.executeQuery();
while (rs.next()) {
Task t = new Task();
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务未完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
} catch (SQLException e) {
throw new EarnDao_Exception(e);
} finally {
DataSource.close(rs, ps, conn);
}
return taskList;
}
jdbc代码内存溢出了嘛
管理人员说是内存溢出,有一张图片信息
我想我的的jdbc是我自己封装的,会不会有问题。
这里是连接类:
/**
* 数据源.
* @time 2012-12-31 09:19:33
*/
package com.DataSource;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.Exceptions.DB_Exception;/**
* @author Administrator
*
*/
public final class DataSource {
/**
* . 构造函数.
*/
private DataSource() {
} /**
* . 静态数据库连接.
*/
private static Connection conn = null; /**
* @return conn.
* @throws DB_Exception
* Exception.
*/
public static Connection getConnection() throws DB_Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager
.getConnection(
"jdbc:mysql://192.168.1.104:3306/itao?characterEncoding=gbk",
"qqq", "");
} catch (ClassNotFoundException e) {
// 抛异常
throw new DB_Exception(e);
} catch (SQLException e) {
// 抛异常
throw new DB_Exception(e);
}
if (conn == null) {
throw new DB_Exception("conn为空!!!");
}
return conn;
} /**
* @throws DB_Exception
* Exception
*/
public static void close(ResultSet rs, Statement stat, Connection conn)
throws DB_Exception {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
throw new DB_Exception(e);
} finally {
try {
if (stat != null)
stat.close();
} catch (SQLException e) {
throw new DB_Exception(e);
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
throw new DB_Exception(e);
}
}
}
}
}还有就是小弟用jrockit内存检测工具(因为服务器上不好装,所以这个工具只装在了本地自己测,可能测得不准),工具指出以下这个类的这个方法67行和75行有问题(看我注释上有标行数)。
这个方法写在dao层里的,方法大致的作用是通过传过来的用户返回一个经过筛选后拼接的集合,用的struts2框架
:
public List<Task> taskListWithUser(User u) throws DB_Exception, EarnDao_Exception {
String sb = "";
String sb2 = "";
List<Task> taskList = new ArrayList<Task>();
Connection conn = DataSource.getConnection();//第67行
//sql1:获得任务对象,赛选条件:①指定的用户ID②任务类型为一个用户只能做一次的类型③此任务已完成
String stringsql = "select t.* from task t left join users_task ut on t.id=ut.tid where ut.uid=? and t.tasktype=0";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(stringsql);
ps.setInt(1, u.getId());
rs = ps.executeQuery();//有问题 第75行
while (rs.next()) {
Task t = new Task();
sb += ","+rs.getInt("id");
//sb.append(","+rs.getInt("id"));
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务已完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
//sql3:获得对象,赛选条件:①指定用户ID②任务类型:一个用户一天只能做一次③此任务已完成
String stringsql3 = "select t.* from task t left join users_task ut on t.id=ut.tid where ut.uid=? and t.tasktype=1 and CURDATE()=date_format(ut.tasktime,'%Y-%m-%d')";
ps = conn.prepareStatement(stringsql3);
ps.setInt(1, u.getId());
rs = ps.executeQuery();
while (rs.next()) {
Task t = new Task();
sb2 += ","+rs.getInt("id");
//sb2.append(","+rs.getInt("id"));
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务已完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
//sql2:获得任务对象,赛选条件:①指定的用户ID②任务类型:一个用户只能做一次③此任务未完成
String stringsql2 = null;
if("".equals(sb)) {
stringsql2 = "select * from task where tasktype=0";
} else {
stringsql2 = "select * from task where tasktype=0 and id not in (" + sb.substring(1) + ")";
}
ps = conn.prepareStatement(stringsql2);
rs = ps.executeQuery();
while (rs.next()) {
Task t = new Task();
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务未完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
//sql4:获得对象,赛选条件:①指定用户ID②任务类型:一个用户一天只能做一次③此任务未完成
String stringsql4 = null;
// String stringsql4 = "select DISTINCT(t.id) as ok,t.* from task t left join users_task ut on t.id=ut.tid where t.tasktype=1 and (ut.uid!=? or ut.uid is null) and (ut.tasktime!=CURDATE() or ut.taskname is null )";
if("".equals(sb2)) {
stringsql4 = "select * from task where tasktype=1";
} else {
stringsql4 = "select * from task where tasktype=1 and id not in (" + sb2.substring(1) + ")";
}
ps = conn.prepareStatement(stringsql4);
rs = ps.executeQuery();
while (rs.next()) {
Task t = new Task();
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务未完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
} catch (SQLException e) {
throw new EarnDao_Exception(e);
} finally {
DataSource.close(rs, ps, conn);
}
return taskList;
}
jdbc代码内存溢出了嘛
解决方案 »
- http实现上传和下载,使用servlet接受和发送文件
- 如何在我的网站上放一些像校内那样的小游戏之类的应用呢?
- 请问ssh连接有什么好的api
- jsp中如何不跳转读取表单内容??
- 学完java,javabean需要特意学吗??我怎么学习才能从测试转为开发?
- 这句SQL语句哪里有问题?请帮忙指出一下。
- 从HTTP接口接收过来的数据,内容中有字符也有图片,如何处理!详情请看内容!分不够可以另开再送!在线等。
- 求生成得CSV的文件的乱码问题!
- 求助!!!
- 我如何在SERVLET中取得SESSION中的内容
- jsp编写的上传文件,文件上传后如果不刷新eclipse视图中的images文件夹 图片就无法显示 ,求解答! 如题 谢谢各位!
- struts2中 super,super.execute();是什么意思,怎么理解?
Task t = null;
while (rs.next()) {
t = new Task();
t.setBeans(rs.getInt("beans"));
t.setHref(rs.getString("href"));
t.setId(rs.getInt("id"));
t.setImgsrc(rs.getString("imgsrc"));
t.setTaskname(rs.getString("taskname"));
t.setTaskType(rs.getBoolean("tasktype"));
t.setVisit(rs.getString("visit"));
t.setTaskstate("任务未完成");
t.setHreftype(rs.getString("hreftype"));
taskList.add(t);
}
你这代码让我看了想哭 我大致看懂了点 你是需要根据一个用户然后对一个表进行四种不同条件的查询 之后将结果连接到一起是吧 最好想办法使用一条SQL语句将四个查询合并到一起 或者将结果合并到一起也行 Oracle可以合并查询结果 你瞅瞅吧
Task t = new Task();
}
和
Task t=null
while (rs.next()) {
t = new Task();
}
区别在哪里呢?呵呵!不明白
http://bbs.csdn.net/topics/350052222#post-351357361第一次用c3p0 请大家帮我分析一下这个日志吧
http://bbs.csdn.net/topics/360136023#post-370438696JDBC connection 讨论
http://bbs.csdn.net/topics/360027520#post-361821072jdbc 单例的问题
http://bbs.csdn.net/topics/340196656#post-342500259KO众多高手的jdbc问题--请谨慎模仿
http://bbs.csdn.net/topics/330258692#post-340441341并发时出现的 java.sql.SQLException: 关闭的 Resultset: next
http://bbs.csdn.net/topics/340259805#post-350662127老是连接不到数据库
http://bbs.csdn.net/topics/350013301#post-350939754tomcat连接池,重复多次调用方法出错: Connection is closed
http://bbs.csdn.net/topics/300050166#post-300727818用JDBC处理一对一的关系出错,该怎么改
http://bbs.csdn.net/topics/320020104#post-320280650关于连接池的问题
http://bbs.csdn.net/topics/290058323#post-250725019还有不计其数的帖子都是这类问题,我就不再一一列出来的。从这些帖子可以看出,个个对 ORM 工具用得非常熟悉,但是对于基础的东西则是非常不了解。不管学什么,只有牢固的根基,才会有枝繁和叶茂,否则只要一有风雨,则会承受不住而倒。