现在我已经设了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 ;
}
代码如下:
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 ;
}
吗?
但我想将从query字句中所得的结果(比如说有3条记录),分别用rs.getXXXX()循环取出拼成3个values(是insert语句中的values),插入到b表。
其中query字句中循环进行insert操作,即从结果集中取一条记录,插入到b表中一条记录。
这地方,我必须用循环嵌套sql语句操作。
记得有的朋友说一边query,一边insert,得用不同的statement,但我已经用了不同的statement,还是不行,不知道为什么?
真不知为什么啊。