在发布webservice过程中,因为调用到3套数据库,数据库分别位于不同的机器,均不在本地。
使用Jdbc访问sql2005,oracle,几乎瞬间就能获取到数据。然而访问sql2000,获取数据时总是需要6到7秒的时间,延迟严重...
后改用jtds调用sql2000,问题顺利解决。项目完成以后,个人总结了一下底层数据库访问,写了一个小类,贴出来,留待以后用。
首先下载jtds的jar包,然后加入到项目中
package com.fenye;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DbConnJtds {
private String url="jdbc:jtds:sqlserver://";
private String username="";
private String psw="";
private Connection conn=null;
private ResultSet rs=null;
private PreparedStatement pstmt=null;
//构造方法,根据传入的数据库IP,数据库名,用户名,密码,初始化内部变量
public DbConnJtds(String ip,String dbname,String username,String psw){
url+=ip;
url=url+":1433/"+dbname;
this.username=username;
this.psw=psw;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取数据库连接,返回连接对象
public Connection getConn(){
try {
conn=DriverManager.getConnection(url,username,psw);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(conn!=null){
System.out.println("连接数据库成功!");
}
else{
System.out.println("连接数据库失败!");
}
return conn;
}
//执行select语句,数据查询,返回结果集
public ResultSet executeQuery(String strsql){
conn=this.getConn();
try {
pstmt = conn.prepareStatement(strsql);
rs=pstmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
//执行delete/insert/update语句,数据变更,返回执行是否成功
public boolean execute(String strsql){
conn=this.getConn();
boolean isok=false;
try {
pstmt=conn.prepareStatement(strsql);
isok=pstmt.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isok;
}
//关闭数据库连接
public void closeConn(){
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭PreparedStatement
public void closePstmt(){
if(pstmt!=null)
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭ResultSet
public void closeRs(){
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//完全释放数据库资源
public void closeAll(){
this.closeRs();
this.closePstmt();
this.closeConn();
}
}
使用Jdbc访问sql2005,oracle,几乎瞬间就能获取到数据。然而访问sql2000,获取数据时总是需要6到7秒的时间,延迟严重...
后改用jtds调用sql2000,问题顺利解决。项目完成以后,个人总结了一下底层数据库访问,写了一个小类,贴出来,留待以后用。
首先下载jtds的jar包,然后加入到项目中
package com.fenye;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DbConnJtds {
private String url="jdbc:jtds:sqlserver://";
private String username="";
private String psw="";
private Connection conn=null;
private ResultSet rs=null;
private PreparedStatement pstmt=null;
//构造方法,根据传入的数据库IP,数据库名,用户名,密码,初始化内部变量
public DbConnJtds(String ip,String dbname,String username,String psw){
url+=ip;
url=url+":1433/"+dbname;
this.username=username;
this.psw=psw;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取数据库连接,返回连接对象
public Connection getConn(){
try {
conn=DriverManager.getConnection(url,username,psw);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(conn!=null){
System.out.println("连接数据库成功!");
}
else{
System.out.println("连接数据库失败!");
}
return conn;
}
//执行select语句,数据查询,返回结果集
public ResultSet executeQuery(String strsql){
conn=this.getConn();
try {
pstmt = conn.prepareStatement(strsql);
rs=pstmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
//执行delete/insert/update语句,数据变更,返回执行是否成功
public boolean execute(String strsql){
conn=this.getConn();
boolean isok=false;
try {
pstmt=conn.prepareStatement(strsql);
isok=pstmt.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isok;
}
//关闭数据库连接
public void closeConn(){
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭PreparedStatement
public void closePstmt(){
if(pstmt!=null)
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭ResultSet
public void closeRs(){
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//完全释放数据库资源
public void closeAll(){
this.closeRs();
this.closePstmt();
this.closeConn();
}
}