Método JDBC genérico para inserir um conjunto de resultados

1 resposta
fabim

Olá,

Estou fazendo importações de dados… tem q ser na mão mesmo, e com JDBC.

Como nao posso trazer 1.200.000 pra um resultSet, paginei as consulta com ROWNUM no Oracle, e LIMIT / OFFSET no MySql

Na hora de inserir, criei um método pra inserir a “pagina” consultada, segue abaixo um trecho:

if ( rs != null ) {
			
	String statement = "INSERT INTO " +	tableName +
		"( @COLUMNS ) VALUES( @PARAMETERS );";
				
	int columnCount = rs.getMetaData().getColumnCount();
				
	String columns = ""; 
	String parameters = "";
	for ( int i=0; i < columnCount; i++ ) {
		columns += rs.getMetaData().getColumnName(i+1) + ",";
		parameters += "?,";
	}
	columns = columns.substring(0, columns.length() - 1);
	parameters = parameters.substring(0, parameters.length() - 1);
				
	statement = statement.replace("@COLUMNS", columns);
	statement = statement.replace("@PARAMETERS", parameters);
				
	while ( rs.next() ) {
			
		stmt = conn.prepareStatement( statement );
					
		for ( int i=1; i <= columnCount; i++ ) {
						
			switch ( rs.getMetaData().getColumnType(i) ) {
					
				case Types.INTEGER : {
					stmt.setInt(i, rs.getInt(i));
					break;
				}
						
				case Types.SMALLINT : {
					stmt.setShort(i, rs.getShort(i));
					break;
				}
							
				case Types.CHAR : {
					stmt.setString(i, rs.getString(i));
					break;
				}
						
				case Types.VARCHAR : {
					stmt.setString(i, rs.getString(i));
					break;
				}
							
				case Schema.VARCHAR4000 : {
					stmt.setString(i, rs.getString(i));
					break;
				}
							
				case Types.TIMESTAMP : {
					stmt.setTimestamp(i, rs.getTimestamp(i));
					break;
				}
						
			}
						
		}

			
		stmt.execute();
		stmt.close();
					
		importCount++;
					
	}
					
}

Que acham. Feio? Alguma maneira melhor?

1 Resposta

fabim

Esqueci de dizer.

rs != null é pq uma logica minha passa o rs null pro metodo, caso nao haja registros.

Estou ciente de que executeQuery() nunca retorna nulo.

Criado 27 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 1
Participantes 1