各位大虾大家好:
小弟刚学jsp,写了一个小程序,作用是把本地数据库中的数据取出,连接远程数据库,把条件相同的数据在远程删除,然后插入新的数据到远程数据库。可是我在自己的机器上给vm ware里装的win2k传数据时一切正常,拿到单位的局域网上就传输不了,不知道是为什么,请指教。下面的程序,只实现插入的功能。
运行时,错误被catch捕获,提示数据库操作错误,把try和catch去掉可以传,但提示http-500错误。不知道为什么,请指教。传输的机器为:win2k server+mssql2000,数据库结构完全一致。谢谢了
//////////////Datalink.java
package com.xfjssq;import java.sql.*;public class Datalink {
private Connection con;
private Statement st;
private ResultSet rs;
private CallableStatement cs;
private String sql;
private String classname="com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String url="jdbc:microsoft:sqlserver://localhost:1433;Database=xfjssq";
//private int i;
public Datalink(){
try{
Class.forName(classname);
}catch(Exception e){
e.printStackTrace(System.err);
System.out.println("111");
}
}
public Connection getCon(){
try{
con=DriverManager.getConnection(url,"sa","fssy_118");
con.setAutoCommit(true);
}catch(SQLException e){
e.printStackTrace(System.err);
System.out.println("222");
}
return con;
}

public Statement getSta(){
try{
getCon();
st=con.createStatement();
}catch(Exception e){
e.printStackTrace(System.err);
System.out.println("333");
}
return st;
} public ResultSet getRes(String sql1){
try{
getCon();
//sql="exec   sp_addlinkedserver     'sy_link','','SQLOLEDB','"+sql1+"'";
//sql+="exec   sp_addlinkedsrvlogin   'sy_link','false',null,'sa','fssy_118'";
//System.out.println(sql);
//rs=st.executeQuery(sql);
sql="{CALL link('"+sql1+"')}";
cs=con.prepareCall(sql);
rs=cs.executeQuery();
}catch(Exception e){
e.printStackTrace(System.err);
System.out.println("444");
}
return rs;
}
}/////////////////////////////////////////////////////////////////
//////////////////////csc.jsp////传输jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<%! ResultSet rs,rs1,rs2; String xzlx,qsrq,jzrq,ipaddress;Connection con1,con2;Statement st1,st2;String sql1,sql2;int i;%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body background="/img/bgimg.jpg">
<jsp:useBean id="data" class="com.xfjssq.Datalink" scope="page"/>
<jsp:useBean id="db" class="com.xfjssq.DB" scope="page"/>
<%
xzlx=String.valueOf(session.getAttribute("xzlx"));
ipaddress=String.valueOf(session.getAttribute("ipadress"));
qsrq=String.valueOf(session.getAttribute("qsrq"));
jzrq=String.valueOf(session.getAttribute("jzrq"));
///////数据链路通道定义
try{
rs=data.getRes(ipaddress);

}catch(Exception e){
e.printStackTrace(System.err);
out.println("连接远程数据库失败!!!");
}
//rs.close();
////////连接本地数据库
try{
con1=db.getCon();
con2=db.getCon();
st1=con1.createStatement();
st2=con2.createStatement();

}catch(Exception e){
e.printStackTrace(System.err);
out.println("连接本地数据库失败!!!");
}
//////数据库判断选择sbspk,djhjxx,写SQL语句
if(xzlx.equals("spk")){
//sql1="delete from [sy_link].xfjssq.dbo.sbspk where rkrq between '"+qsrq+"' and '"+jzrq+"' and [sy_link].xfjssq.dbo.sbspk.yh_dm=yh_dm";
sql2="insert [sy_link].xfjssq.dbo.sbspk select * from xfjssq.dbo.sbspk where xfjssq.dbo.sbspk.rkrq between '"+qsrq+"' and '"+jzrq+"' and xfjssq.dbo.sbspk.yh_dm like '%税务%' and xfjssq.dbo.sbspk.yhzh in ('cczl','eczl')";
}else{
//sql1="delete from [sy_link].xfjssq.dbo.djhjxx where 录入日期 between '"+qsrq+"' and '"+jzrq+"' and [sy_link].xfjssq.dbo.djhjxx.财务负责人邮件地址=财务负责人邮件地址";
sql2="insert [sy_link].xfjssq.dbo.djhjxx select * from xfjssq.dbo.djhjxx where xfjssq.dbo.djhjxx.录入日期 between '"+qsrq+"' and '"+jzrq+"' and xfjssq.dbo.djhjxx.财务负责人邮件地址 like '%税务%' and xfjssq.dbo.djhjxx.电子邮件地址 in ('cczl','eczl')";
}
try{
//rs1=st1.executeQuery(sql1);
//rs2=st2.executeQuery(sql2);
i=st2.executeUpdate(sql2);
%>
<br><br><br><br>
<center><h1><%out.println("共计上传"+i+"条记录"); %></h1></center>
<%

}catch(SQLException e){
e.printStackTrace(System.err);
out.println("数据库操作错误");
}
%></body>
</html>
//////////////////////////////////////
///////////////////////////////////////////////
////////////////////////////////////存储过程是link
CREATE PROCEDURE link
@ipaddress nvarchar(50)
AS 
exec   sp_addlinkedserver     'sy_lnk','','SQLOLEDB','@ipaddress'   
exec   sp_addlinkedsrvlogin   'sy_lnk','false',null,'sa','fssy_118'
GO