Oi pessoal sou novo aki e esta é minha primeira postagem no forum.
Seguinte, estou me conectando com um banco sqlserver 2000 via odbc, com o driver jdbc-odbc bridge.
Beleza, eu me conecto de boa. Ai eu chamo uma funcao Select, que vai fazer a consulta, passando a query e os argumentos e me retorna um ResultSet. E estou usando uma PreparedStatement.
Código:
public ResultSet Select(String sql,String maquina){
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,maquina);
ps.setString(2,"A");
ResultSet rs = ps.executeQuery();
return rs; }
catch(SQLException e) {
System.out.println(e.getMessage());
return null;
}
}
Logo depois eu chamo a funcao Mostra Dados. Este codigo é bem comum de ser visto aqui nesse forum. Ele pega dados de um ResultSet, joga em
dois Vetores, um de linha e outro de coluna e depois cria a JTable.
[size=18][color=red]Meu problema é: Quando eu chamo a funcao getNextRow, dentro dela eu pego o tipo do dado de cada coluna e dou um GetString, GetLong,etc (conforme for o tipo). Mas ele só tá retornando que o tipo é int(-8). E com isso, não tá preenchendo o vetor corretamente. E minha consulta tá retornando records porque o moreRecords é True. Será que é algo com o SQL Server 2000?
Obrigado.[/color][/size]
private void MostraDados(){
try{
ResultSet rs =acesso.Select(arquivo.getsql(0),arquivo.getmaquina());
boolean moreRecords = rs.next();
if ( ! moreRecords ) {
JOptionPane.showMessageDialog( null,
“ResultSet contained no records”, “Erro”, JOptionPane.ERROR_MESSAGE );
return;
}
Vector colunas = new Vector();
Vector linhas = new Vector();
// pega nomes das colunas
ResultSetMetaData rsmd = rs.getMetaData();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
colunas.addElement( rsmd.getColumnName( i ) );
// pega linha (dado)
do {
linhas.addElement( getNextRow( rs, rsmd ) );
} while ( rs.next() );
// Mostra tabela com resultados do ResultSet
JTable tabela = new JTable(linhas,colunas);
Container c = getContentPane();
c.add( tabela, BorderLayout.SOUTH );
c.validate();
}
catch ( SQLException sqlex ) {sqlex.printStackTrace();}
}
private Vector getNextRow( ResultSet rs, ResultSetMetaData rsmd ) {
try
{
Vector currentRow = new Vector();
for ( int i = 1; i <= rsmd.getColumnCount(); i++ )
switch( rsmd.getColumnType( i ) ) {
case Types.CHAR:
currentRow.addElement( rs.getString( i ) );
break;
case Types.INTEGER:
currentRow.addElement(new Long( rs.getLong( i ) ) );
break;
}
return currentRow; }
catch(SQLException e){
System.out.println(e.getMessage());
return null; }
}