先上代码:
package com.oratech.cdp;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class CjCbjbqkAnalysis {
public static void main(String[] args){
String sDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String sUrl="jdbc:microsoft:sqlserver://172.16.30.2:1433;DatabaseName=ncbglzj";
String sUser="sa";
String sPassword="";

String dDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String dUrl="jdbc:microsoft:sqlserver://10.100.70.30:1433;DatabaseName=ncbglzj";
String dUser="sa";
String dPassword=""; 
try {
Class.forName( sDriver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection sConn=null;
Connection dConn=null;
ResultSet sRs=null;
PreparedStatement sPstmt=null;
PreparedStatement dPstmt=null;
try {
sConn=DriverManager.getConnection(sUrl, sUser, sPassword);
dConn=DriverManager.getConnection(dUrl, dUser, dPassword);
String sql="select zdw,jdw,cjdjh,xycm from cbjbqk";
sPstmt=sConn.prepareStatement(sql);
sRs=sPstmt.executeQuery();
List report=new ArrayList();
dPstmt=dConn.prepareStatement("select zdw,jdw,xycm from cbjbqk where cjdjh=?");
ResultSet dRs=null;
while(sRs.next()){
float zdw=sRs.getFloat(1);
float jdw=sRs.getFloat(2);
String cjdjh=sRs.getString(3);
String sXycm=sRs.getString(4);

dPstmt.setString(0, cjdjh);
try{
dRs=dPstmt.executeQuery();
while(dRs.next()){
float dzdw=sRs.getFloat(1);
float djdw=sRs.getFloat(2);
String dXycm=dRs.getString(3);


if(zdw!=dzdw){
report.add(new String[]{cjdjh,"总吨位"});
}


}
}finally{
dRs.close();
}
}

System.out.println(">>>>>>一共"+report.size());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
sRs.close();
dPstmt.close();
sPstmt.close();
dConn.close();
sConn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
}
我的目的是需要比较2个库中的相同结构表中的数据是否一致,然后把不同的数量输出到控制台,请问下老鸟们我这个程序哪里有问题?
然后是下面的运行时控制台报错的情况:(高分求救)
122.0
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.validateParameterIndex(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setObjectInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setString(Unknown Source)
at com.oratech.cdp.CjCbjbqkAnalysis.main(CjCbjbqkAnalysis.java:49)

解决方案 »

  1.   

    分析一下你代码19行
    at com.oratech.cdp.CjCbjbqkAnalysis.main(CjCbjbqkAnalysis.java:49) 
      

  2.   

    dPstmt.setString(0, cjdjh); 
     有什么问题吗?
      

  3.   

    应该是dPstmt.setString(0, cjdjh);
    试试!~
      

  4.   

    ...打错了!
    应该是dPstmt.setString(1, cjdjh); 
    试试!~
      

  5.   

    THANKS 这么弱智的问题我还找了半天 谢谢楼上的 
      

  6.   

    THANKS 这么弱智的问题我还找了半天 谢谢楼上的 
      

  7.   

    void setString(int parameterIndex,
                   String x)
                   throws SQLException将指定参数设置为给定 Java String 值。在将此值发送给数据库时,驱动程序将它转换成一个 SQL VARCHAR 或 LONGVARCHAR 值(取决于该参数相对于驱动程序在 VARCHAR 值上的限制的相对大小)。 参数:
    parameterIndex - 第一个参数是 1,第二个参数是 2,依此类推。
      

  8.   

    dPstmt.setString(0, cjdjh);
    呵呵,这个地方有问题了,哦,来晚了,呵呵
    不过还是来坐坐!!!