当前位置: 技术问答>java相关
及死了,又是数据库问题,高手请进,高分送
来源: 互联网 发布时间:2015-10-11
本文导语: 我用 jsp+sql 2k + resin 2.14 开发一套系统,但经常死机,资源被耗尽,cpu占用100% 疑是程序有死循环,检查没有发现,今天中午发现在服务器打印出如下错误: [miverosoft][ODBC SQL Server Driver] 超时已过...
我用 jsp+sql 2k + resin 2.14 开发一套系统,但经常死机,资源被耗尽,cpu占用100%
疑是程序有死循环,检查没有发现,今天中午发现在服务器打印出如下错误:
[miverosoft][ODBC SQL Server Driver] 超时已过期
这是怎么回事,
连接数据库的bean 如下:
public class DBQuery
{
Connection conn;
ResultSet rs;
Statement stmt;
public DBQuery()
{
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException classnotfoundexception){
System.err.println("data begin err: " + classnotfoundexception.getMessage());
}
}
public ResultSet executeQuery(String s) {
rs = null;
try {
conn = DriverManager.getConnection("jdbc:odbc:abc", "abc", "12345678");
stmt = conn.createStatement();
rs = stmt.executeQuery(s);
} catch(SQLException sqlexception){
System.err.println("data query connect err:" + sqlexception.getMessage());
}
return rs;
}
public void executeUpdate(String s){
try {
conn = DriverManager.getConnection"jdbc:odbc:whoa30", "whoa30", "12345678");
stmt = conn.createStatement();
stmt.executeUpdate(s);
}catch(SQLException sqlexception) {
System.err.println("data update connect err:" + sqlexception.getMessage());
}
}
public void cls(){
try {
stmt.close();
conn.close();
}catch(SQLException sqlexception) {
System.err.println("cls err: " + sqlexception.getMessage());
}
}
}
那位能帮忙给看一下,谢了先
疑是程序有死循环,检查没有发现,今天中午发现在服务器打印出如下错误:
[miverosoft][ODBC SQL Server Driver] 超时已过期
这是怎么回事,
连接数据库的bean 如下:
public class DBQuery
{
Connection conn;
ResultSet rs;
Statement stmt;
public DBQuery()
{
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException classnotfoundexception){
System.err.println("data begin err: " + classnotfoundexception.getMessage());
}
}
public ResultSet executeQuery(String s) {
rs = null;
try {
conn = DriverManager.getConnection("jdbc:odbc:abc", "abc", "12345678");
stmt = conn.createStatement();
rs = stmt.executeQuery(s);
} catch(SQLException sqlexception){
System.err.println("data query connect err:" + sqlexception.getMessage());
}
return rs;
}
public void executeUpdate(String s){
try {
conn = DriverManager.getConnection"jdbc:odbc:whoa30", "whoa30", "12345678");
stmt = conn.createStatement();
stmt.executeUpdate(s);
}catch(SQLException sqlexception) {
System.err.println("data update connect err:" + sqlexception.getMessage());
}
}
public void cls(){
try {
stmt.close();
conn.close();
}catch(SQLException sqlexception) {
System.err.println("cls err: " + sqlexception.getMessage());
}
}
}
那位能帮忙给看一下,谢了先
|
最好在每个方法里每打开一个连接后就关一次
像你上面的exectueQuery和exectueUpdate方法,
try
{
try {
conn = DriverManager.getConnection("jdbc:odbc:abc", "abc", "12345678");
......
}catch(Exception e)
{
.....
}
finally {
try {
if (stmt != null)
stmt.close();
} catch (java.sql.SQLException se) {
OurLog.debug(se);
}
try {
if (conn != null)
conn.close();
} catch (java.sql.SQLException se) {
.... }
}
这样最安全
像你上面的exectueQuery和exectueUpdate方法,
try
{
try {
conn = DriverManager.getConnection("jdbc:odbc:abc", "abc", "12345678");
......
}catch(Exception e)
{
.....
}
finally {
try {
if (stmt != null)
stmt.close();
} catch (java.sql.SQLException se) {
OurLog.debug(se);
}
try {
if (conn != null)
conn.close();
} catch (java.sql.SQLException se) {
.... }
}
这样最安全
|
建议不要用odbc的来连接
二 做个数据库连接池
二 做个数据库连接池
|
千万别忘了在每次使用完结果集后手动关闭结果集,statement,connection(如果你没用连接池)。
另外用连接池可以和好的提高性能。
另外用连接池可以和好的提高性能。
|
建议你写一个类似Entity Bean一样的bean,把数据库中的数据读出来,然后操作完毕以后提交。这样就不必频繁的连接数据库了