package com.gimismachn.util;import java.sql.ResultSet;
import java.util.Calendar;
import java.util.Date;import javax.servlet.http.HttpServletRequest;import com.gimis.server.ServerConfig;
import com.gimismachn.dao.Util;
import com.gimismachn.database.Database;public class ChangeState {
static Database db = new Database();// 数据库连接//方法一
public String getStateByMachn_code(String machn_code) {
String sql = "select state from ftlw.t_machn_state where machn_code='"
+ machn_code + "'";
ResultSet rs = null;
String state = "";
try {
rs = db.getRS(sql);
if (rs.next()) {
state = Util.CNull(rs.getString("state"));
} } catch (Exception e) {
ServerConfig.logger.error("", e);
} return state;
}//方法二
public void setState(String machn_code, String oldState, String newState,
HttpServletRequest request) {
if (machn_code == null || "".equals(machn_code)) { return;
} else if (oldState == newState) {
return;
} else { SessionInfo sessionInfo = (SessionInfo) request.getSession()
.getAttribute("sessionInfo");
String userName = Util.CNull(sessionInfo.getUserName());
String time = null;
try {
Date dateTime = new Date();
time = FormatDate.toY_M_D_H_M_S(dateTime);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} String sql = "insert into ftlw.t_machn_changestate (machn_code ,old_state,new_state,server_time,sysuser_name) values('"
+ machn_code
+ "','"
+ oldState
+ "','"
+ newState
+ "','"
+ time + "','" + userName + "')"; try {
db.execSqlUpdate(sql); } catch (Exception e) {
ServerConfig.logger.error("", e);
} finally {
db.cleanup();
} }
}
}
上面是我写的一个通用的工具类,两个方法,我在全局里面创建了一个数据库连接,程序中每次使用这个类时,两个方法都是调用,而且都是先调用一,再调用二。然后我在方法二中把数据库连接关闭 db.cleanup();方法,我想知道这样做有没有问题
会不会对数据库连接有影响,这个问题比较敏感,所以希望真正知道的人回答,如果不清楚希望跟我一样等大瞎求解。
import java.util.Calendar;
import java.util.Date;import javax.servlet.http.HttpServletRequest;import com.gimis.server.ServerConfig;
import com.gimismachn.dao.Util;
import com.gimismachn.database.Database;public class ChangeState {
static Database db = new Database();// 数据库连接//方法一
public String getStateByMachn_code(String machn_code) {
String sql = "select state from ftlw.t_machn_state where machn_code='"
+ machn_code + "'";
ResultSet rs = null;
String state = "";
try {
rs = db.getRS(sql);
if (rs.next()) {
state = Util.CNull(rs.getString("state"));
} } catch (Exception e) {
ServerConfig.logger.error("", e);
} return state;
}//方法二
public void setState(String machn_code, String oldState, String newState,
HttpServletRequest request) {
if (machn_code == null || "".equals(machn_code)) { return;
} else if (oldState == newState) {
return;
} else { SessionInfo sessionInfo = (SessionInfo) request.getSession()
.getAttribute("sessionInfo");
String userName = Util.CNull(sessionInfo.getUserName());
String time = null;
try {
Date dateTime = new Date();
time = FormatDate.toY_M_D_H_M_S(dateTime);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} String sql = "insert into ftlw.t_machn_changestate (machn_code ,old_state,new_state,server_time,sysuser_name) values('"
+ machn_code
+ "','"
+ oldState
+ "','"
+ newState
+ "','"
+ time + "','" + userName + "')"; try {
db.execSqlUpdate(sql); } catch (Exception e) {
ServerConfig.logger.error("", e);
} finally {
db.cleanup();
} }
}
}
上面是我写的一个通用的工具类,两个方法,我在全局里面创建了一个数据库连接,程序中每次使用这个类时,两个方法都是调用,而且都是先调用一,再调用二。然后我在方法二中把数据库连接关闭 db.cleanup();方法,我想知道这样做有没有问题
会不会对数据库连接有影响,这个问题比较敏感,所以希望真正知道的人回答,如果不清楚希望跟我一样等大瞎求解。
解决方案 »
- 有谁知道极酷Flvplayer网页播放器怎么用啊????
- JSP上传图片问题
- jquery中json问题...急...........
- struts+hibernate+ajax 仿google所搜问题
- 第一份工作,第一份工资(散分) 问问各位的工资情况...
- 求dom4j解析绝对路径下的xml的代码(在线等)——各位大哥大姐帮帮忙!
- hibernate取值问题????
- 点评Java full-stack框架
- weblogic 在什么地方配置JDBC Pool和Data Source
- 多个object[]同个位置比较
- 菜鸟级问个SSH框架问题
- 怎么不能使用到i18n文件呢???????????
所以每次对数据库进行操作都要重新连接数据库,然后关闭。
也即:
数据库连接
dosomething(只能是一条语句)
数据库连接关闭 数据库连接
dosomething(只能是一条语句)
数据库连接关闭
◎ 把获取连接与关闭连接,放在同一个地方完成(谁打开谁负责);从你的代码来看似乎不是,这样产生问题的不可控因素就多了,你要假设系统并不是只有你一个人在开发,别人写的代码中间出现Exception了,你的cleanup还能确保一定执行么?别人的代码风格必然跟你一样么?以后寻找连接泄漏的地方,容易找么?
◎ 连接的获取与连接的关闭,中间的代码尽量简短,要比迷你超短裙还要短;在你的代码来看似乎也不是,长期占有一个连接,然后还在函数中跳来跳去的,风险很高。总的来说,个体优秀的代码风格,不能保证系统健壮性,Cowboy永远存在。因此,必须强调结构设计的合理性。
很有意思,我几乎没看到过有设计是将数据库连接设置为全局静态。这种做法只有一种理由:池。但我没感觉你是个池。
那么你使用全局静态的数据库连接,实际上为系统并发执行带来了非常非常多的不稳定因素。
有多个线程的情况下,如何保证前一个关闭掉了后一个线程还能正常使用?你如何协调它们谁关闭谁打开不要产生冲突?如何协调他们不要同时执行SQL语句?你能介绍下,你将数据库连接设置为全局静态的“原始出发点”么?
静态的在Java里只意味着数据存储地址变了,似乎没有更特别的。
你总有数据库的操作类吧,假定是mysql
当你构建这个类的对象时:mysql mysql = new mysql("C:\\hhh.sql","name","password");
当你要查询时,似乎可以多次查询,(这个不用关闭)
就是说:
mysql.connect()
while(true){
mysql.query();
}
mysql.disConnect();
要是你要插入,修改,删除等对数据库结构产生变化的操作时,你必须一个操作打开一次,关闭一次,不能只打开一次
就是说:
while(true){
mysql.connect()
mysql.update();
mysql.disConnect(); mysql.connect()
mysql.add();
mysql.disConnect(); mysql.connect()
mysql.delete();
mysql.disConnect();
}
严格来说,第二类操作都是有executeUpdate()完成的,所以可以说这个方法的生命期是一次操作,不能把连接关闭放在while循环外部。也不能内部只有一次连接关闭操作。就是说,必须一次操作,就连接一次。
至于说具体问题,我表示我逃跑了,哈哈
这个我知道,我开启连接,也只做了一次insert 其他是查询,应该没事。
真想砸你一砖头,非要哥看看你的大作不可
自己明明说了每次调用都是两个方法都调用,然后在方法二中关闭
大神呢,数据库是一次打开永远使用,用完了再关的东西吗?你查询完了,就自己关闭。然后再打开一个。
两个方法之间要有先关闭后打开的操作
没地说,伤心。
我都给你说的这么清楚了,非要我看看你的源码?你的源码是美女吗?