public void getT_STU_INFO_LIST() throws Exception {
String sql = null;
/**
 * 查处MS SQL2000的T_STU_INFO_LIST表数据
 * 
 */
BaseCon ba = new BaseCon();
Connection conMS = ba.getMSCon(); // 获得MS SQL2000数据库连接
sql = "select  res.id,res.fileName,res.resourceDeliverTypeID,res.status,res.fileDate,recnt.cnt,"
+ " res.sendDepartmentID,restu.studentid,stu.name,stu.signDate,stu.fpstudyType,"
+ " stu.FPStudyTime,stu.fpstudyTimeType,stu.fpExam,restu.re"
+ " from driver.dbo.resourceDeliver  res"
+ " left outer join   "
+ " (select deliverid,studentid,re from driver.dbo.resourceDeliverStudent) restu"
+ " on res.id=restu.deliverid"
+ " left outer join   "
+ " (select deliverid,count(studentid)as cnt from driver.dbo.resourceDeliverStudent group by deliverID) recnt"
+ " on res.id=recnt.deliverid"
+ " left outer join "
+ " (select st.id,st.name,st.signDate,st.fpstudyType,st.FPStudyTime,st.fpstudyTimeType,st.fpExam from driver.dbo.student st)stu  on stu.id=restu.studentid"
+ " where  resourceDeliverTypeID='bmhz'"; PreparedStatement preMS = conMS.prepareStatement(sql);
ResultSet rsMS = preMS.executeQuery(); /**
 * 将数据插入Oracle数据库T_STU_INFO_LIST表
 * 
 */
Connection conORA = ba.getORACon();
sql = "insert into T_STU_INFO_LIST"
+ "('I_LIST_NO','I_LIST_NAME','I_LIST_TYPE','I_LIST_STATE','I_LIST_DATE',"
+ "'I_LIST_COUNT','I_LIST_DEPT','I_STU_NO','I_STU_NAME','I_STU_APP_TIME',"
+ "'I_STU_ISJOIN','I_STU_TIME','I_STU_HOUR','I_STU_EXAM','I_STU_REMARK',"
+ ")  values(?,?,?,?,?," + "?,?,?,?,?," +
"?,?,?,?,?)"; PreparedStatement preORA = null;
while (rsMS.next()) {
preORA = conORA.prepareStatement(sql); preORA.setString(1, rsMS.getString(1)); if (null == rsMS.getString(2)) {
preORA.setNull(2, java.sql.Types.VARCHAR);
} else {
preORA.setString(2, rsMS.getString(2));
} if (null == rsMS.getString(3)) {
preORA.setNull(3, java.sql.Types.VARCHAR);
} else {
preORA.setString(3, rsMS.getString(3));
} if (null == rsMS.getString(4)) {
preORA.setNull(4, java.sql.Types.VARCHAR);
} else {
preORA.setString(4, rsMS.getString(4));
} if (null == rsMS.getString(5)) {
preORA.setNull(5, java.sql.Types.VARCHAR);
} else {
preORA.setString(5, rsMS.getString(5));
} if (null == rsMS.getString(6)) {
preORA.setNull(6, java.sql.Types.VARCHAR);
} else {
preORA.setString(6, rsMS.getString(6));
} if (null == rsMS.getString(7)) {
preORA.setNull(7, java.sql.Types.VARCHAR);
} else {
preORA.setString(7, rsMS.getString(7));
} preORA.setString(8, rsMS.getString(8)); if (null == rsMS.getString(9)) {
preORA.setNull(9, java.sql.Types.VARCHAR);
} else {
preORA.setString(9, rsMS.getString(9));
} if (null == rsMS.getString(10)) {
preORA.setNull(10, java.sql.Types.VARCHAR);
} else {
preORA.setString(10, rsMS.getString(10));
} if (null == rsMS.getString(11)) {
preORA.setNull(11, java.sql.Types.VARCHAR);
} else {
preORA.setString(11, rsMS.getString(11));
} if (null == rsMS.getString(12)) {
preORA.setNull(12, java.sql.Types.VARCHAR);
} else {
preORA.setString(12, rsMS.getString(12));
} if (null == rsMS.getString(13)) {
preORA.setNull(13, java.sql.Types.VARCHAR);
} else {
preORA.setString(13, rsMS.getString(13));
} if (null == rsMS.getString(14)) {
preORA.setNull(14, java.sql.Types.VARCHAR);
} else {
preORA.setString(14, rsMS.getString(14));
} if (null == rsMS.getString(15)) {
preORA.setNull(15, java.sql.Types.VARCHAR);
} else {
preORA.setString(15, rsMS.getString(15));
} preORA.executeUpdate();
preORA.close();
}
conORA.close(); rsMS.close();
preMS.close();
conMS.close();
System.out.println("suc"); }

解决方案 »

  1.   

    带两个点的表名??学习了。
    driver.dbo.resourceDeliverStudent
      

  2.   

    + "('I_LIST_NO','I_LIST_NAME','I_LIST_TYPE','I_LIST_STATE','I_LIST_DATE'," ****************************************************************************这么写可以吗?单引号应该去掉吧?
      

  3.   

    运行的时候报错 缺失select 关键字
      

  4.   

    去掉单引号,就说该列明无效了。因为在ms sql中是一个主键  在ora中是2个主键
      

  5.   

    把这个拷贝到SQL Server里面运行一下试试看
    select  res.id,res.fileName,res.resourceDeliverTypeID,res.status,res.fileDate,recnt.cnt,
     res.sendDepartmentID,restu.studentid,stu.name,stu.signDate,stu.fpstudyType,
     stu.FPStudyTime,stu.fpstudyTimeType,stu.fpExam,restu.re
    from driver.dbo.resourceDeliver  res
    left outer join  (
      select deliverid,studentid,re from driver.dbo.resourceDeliverStudent
    ) restu on res.id=restu.deliverid
    left outer join (
      select deliverid,count(studentid)as cnt from driver.dbo.resourceDeliverStudent group by deliverID
    ) recnt on res.id=recnt.deliverid
    left outer join (
      select st.id,st.name,st.signDate,st.fpstudyType,st.FPStudyTime,st.fpstudyTimeType,st.fpExam from driver.dbo.student st
      )stu  on stu.id=restu.studentid 
     where  resourceDeliverTypeID='bmhz'; 
      

  6.   

    查询语句 是没有问题 在mssql中 运行是成功的,主要解决的问题是 一个主键 在ORA中2个主键怎么对应
      

  7.   

    在ora里 有2个主键 分别是'I_LIST_NO' ,'I_STU_NO' 都是主键
    因该是联合主键吧,但这个你的错误确失Select 应该没有关系呀缺失select 应该是SQL 语句本身的问题吧
      

  8.   


    mssql 和 ORA主键概念是一样的,都是一个主键,一个主键可以由多个字段构成,不清楚lz说的意思
      

  9.   

    简单的说,查询语句在MSSQL 运行没有问题 也查出来了我要的东西。 但是对于方法运行出现了问题 ,如果在插入的时候不在ORA表关键字上加单引号,就会报列名无效的错误,加上了报缺失select 关键字
      

  10.   


    似乎就是单引号的问题。我用单引号把列名包起来无法建表啊?楼主的oracle单引号做字段名的表怎么弄的?SQL> create table test1('a' varchar2(10));
    create table test1('a' varchar2(10))
                       *
    ERROR 位于第 1 行:
    ORA-00904: : 标识符无效
    SQL> create table test1(a varchar2(10));表已创建。SQL>
      

  11.   


    明白了,你的oracle数据库字段名上都有双引号,你把单引号改为双引号再试试估计能插入。
      

  12.   

    你可能是用工具导的建表语句,上面就会加双引号了,你可能的手工改下,把表名列名的双引号都去掉,要不后期写sql很烦的。
      

  13.   

    sql = "insert into T_STU_INFO_LIST" 
    + "('I_LIST_NO','I_LIST_NAME','I_LIST_TYPE','I_LIST_STATE','I_LIST_DATE'," 
    + "'I_LIST_COUNT','I_LIST_DEPT','I_STU_NO','I_STU_NAME','I_STU_APP_TIME'," 
    + "'I_STU_ISJOIN','I_STU_TIME','I_STU_HOUR','I_STU_EXAM','I_STU_REMARK',
    + ")  values(?,?,?,?,?," + "?,?,?,?,?," + 
    "?,?,?,?,?)"; 
    **************************************************************************把单引号去掉把
    + "'I_STU_ISJOIN','I_STU_TIME','I_STU_HOUR','I_STU_EXAM','I_STU_REMARK'," 
    最后一个逗号去掉
      

  14.   

    我写的java程序 这个是一个数据库表查询导入的方法。
      

  15.   

    sql = "insert into T_STU_INFO_LIST" 
    + "('I_LIST_NO','I_LIST_NAME','I_LIST_TYPE','I_LIST_STATE','I_LIST_DATE'," 
    + "'I_LIST_COUNT','I_LIST_DEPT','I_STU_NO','I_STU_NAME','I_STU_APP_TIME'," 
    + "'I_STU_ISJOIN','I_STU_TIME','I_STU_HOUR','I_STU_EXAM','I_STU_REMARK'," 
    + ")  values(?,?,?,?,?," + "?,?,?,?,?," + 
    "?,?,?,?,?)"; 
    ***************************************************************************
    1。
    'I_LIST_NO'这些字段两边的单引号去掉2。
    括号前多了一个逗号
    'I_STU_REMARK'," 这个逗号看到了吗?——————————————————————————————————————————
    修改后
    sql = "insert into T_STU_INFO_LIST" 
    + "(I_LIST_NO,I_LIST_NAME,I_LIST_TYPE,I_LIST_STATE,I_LIST_DATE," 
    + "I_LIST_COUNT,I_LIST_DEPT,I_STU_NO,I_STU_NAME,I_STU_APP_TIME," 
    + "I_STU_ISJOIN,I_STU_TIME,I_STU_HOUR,I_STU_EXAM,I_STU_REMARK" 
    + ")  values(?,?,?,?,?," + "?,?,?,?,?," + 
    "?,?,?,?,?)";