现在我已经设了2个statement,但仍不能实现插入,只是能查询。
代码如下:
private selectAndInsert(Connection conn) throws SQLException{
   String sql = "select * from a";
   ResultSet rs = null;
   Statement st = null;
   Statement st1 = null;
   try {
        st = conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_READ_ONLY);
        rs = st.executeQuery(sql);
        while (rs.next()) {
        String values = "";
        java.sql.ResultSetMetaData meta1 = rs.getMetaData();
        for (int i = 1; i <= meta1.getColumnCount(); i++) {
          if (!meta1.getColumnName(i).toUpperCase().equals("ROWNUM")) {
            int type = meta1.getColumnType(i);
            switch (type) {
              case Types.CHAR:
              case Types.VARCHAR:
                    values += "'" + rs.getString(i) + "',";
                     break;
             case Types.INTEGER:
             case Types.SMALLINT:
                     int it = rs.getInt(i);
                     values += "'" +Integer.toString(it) + "',";
                     break;
             case Types.FLOAT:
             case Types.DOUBLE:
             case Types.REAL:
             case Types.DECIMAL:
             case Types.NUMERIC:
                  double db =  rs.getDouble(i);
                  values += "'" + Double.toString(db) + "',";
                  break;
             case Types.DATE:
                  break;
              default:
                  String dateStr = DateTimeUtil.toString(rs.getDate(i),true);
                  if(!dateStr.equals("null")){
                     values += "'" + dateStr + "',";
                  }
                  else{
                    values += "null,";
                  }
                  break;
              }
           }
        }
          values += "'0','" + batchid + "'";
    //      System.out.print("字符传values="+values);
          String sqlInsert = "insert into b values(" + values + ")";
          try {
             st1 = conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_UPDATABLE);
             st1.executeUpdate(sqlInsert);//将查询出的字段值插入到S_M_INH_DOC
             System.out.print("插入s_m_inh_doc成功");
          }
          catch (Exception ex) {
            try {
               if (conn != null) {
                  conn.rollback();
                  }
             }
             catch (Exception ex1) {
                 System.out.print("子函数异常"+ex1.getMessage());
             }
          }
        }
      }
     catch (SQLException daox) {
          throw daox;
    }
    finally{
        st.close();
        st1.close();
     }
    return ;
 }

解决方案 »

  1.   

    Insert into A (a, b, c) select d, e, f from B
      

  2.   

    不是 Insert into A values(a, b, c) select d, e, f from B
    吗?
      

  3.   

    谢谢上边朋友的回答。
    但我想将从query字句中所得的结果(比如说有3条记录),分别用rs.getXXXX()循环取出拼成3个values(是insert语句中的values),插入到b表。
    其中query字句中循环进行insert操作,即从结果集中取一条记录,插入到b表中一条记录。
    这地方,我必须用循环嵌套sql语句操作。
    记得有的朋友说一边query,一边insert,得用不同的statement,但我已经用了不同的statement,还是不行,不知道为什么?
      

  4.   

    应该不是吧,我如果把该函数中query用一个connection,insert用另一个connection,是没问题的。但这里必须要求将connection作参数传过来,传过来后就报错。
    真不知为什么啊。