Alguém sabe como converter List para CachedRowSetImpl?
Se souberem passar de List para ResultSet também resolve o problema.
Alguém sabe como converter List para CachedRowSetImpl?
Se souberem passar de List para ResultSet também resolve o problema.
Nao eh possivel. Voce tera que usar uma abordagem diferente.
O que esta tentando fazer?
Rafael
Eu tenho uma List que resulta de uma query à base de dados. Esta list contém uma lista de objectos que preciso de passar para o flash remoting. A passagem de dados para o flash tem de ser feita através de resultset. O que me dava jeito era uma classe que me inseri-se a metadata e os dados da list no CachedRowSetImpl.
Tem um povo que diz que um workaround seria passar arrays / maps e fazer a conversao.
Uma coisa que talvez funcione para voce eh implementar o java.sql.ResultSet ( ou equivalente ), usando os dados do arraylist. Algo como
List dados = // ...
class DummyResultSet implements ResultSet {
private List dados;
public DummyResultSet(List dados) {
this.dados = dados;
}
// implementa os getXxx() da interface e tudo mais
// o que for necessario
}
...
ResultSet rs = new DummyResultSet(listaComObjetos);
// envia para o Flash
Rafael
Embora acredito que voce ja tenha lido, este documento - http://www.macromedia.com/software/flashremoting/downloads/sampleapp/files/flash_remoting_for_java.pdf - tem uns exemplos legais para fazer o que voce esta querendo, passando um javabean ao inves do resutlset.
Rafael
eu preciso mesmo é de inserir a metadata, porque ela não existe. Uso o hibernate para obter a list. Ao passar os dados para um CachedRowSetImpl tenho de criar RowSetMetaDataImpl e estou com dificuldades. O Java não me deixa inserir linhas (row’s)
dá o seguinte erro
java.sql.SQLException: Failed to insert Row
at com.sun.rowset.CachedRowSetImpl.insertRow(CachedRowSetImpl.java:5122)
Antes foi inserida a informação do total de linhas e os nomes das coluna bem como os tipos.
a criação de uma claase que implementa o interface ResultSet não me deixa criar instâncias pois tenho de na declaração da classe ela tem de ser abstrata
Pq tem que ser abstrata? Se, por algum motivo, a tua regra de negocios exiga isso, o que te impede de ter uma implementacao concreta?
Rafael
A classe tem de ser abstracta porque implementa um interface abstracto.
Não consigo compilar a classe sem que ela seja abstracta.
E quanto à inserção manual da metadata numa CachedRowSetImpl, alguma ideia?
Como exemplo, apresento um pequeno código que deveria inserir a metadata mais os dados da List num CachedRowSetImpl. No entanto, quando chega à instrução result.insertRow(); o programa dá erro.
Alguma sugestão?
Penso que a metadata não esteja bem inserida, ou que falta alguma coisa.
Exemplo,
public CachedRowSetImpl converterLC(List list)
{
CachedRowSetImpl result= null;
try
{
result = new CachedRowSetImpl();
//inserir metadata
RowSetMetaDataImpl rmd = new RowSetMetaDataImpl();
rmd.setColumnCount(list.size());
rmd.setColumnName(1,"ID");
rmd.setColumnName(2,"NOME");
rmd.setColumnName(3,"MORADA");
rmd.setColumnType(1,Types.INTEGER);
rmd.setColumnType(2,Types.VARCHAR);
rmd.setColumnType(3,Types.VARCHAR);
result.setMetaData(rmd);
JB_TESTES2 obj = (JB_TESTES2) list.get(0);
result.moveToInsertRow();
result.updateInt("ID", obj.getId());
result.updateString("NOME",obj.getNome());
result.updateString("MORADA",obj.getMorada());
result.insertRow();
result.moveToCurrentRow();
result.acceptChanges();
} catch(SQLException e)
{
e.printStackTrace();
}
return result;
}
Este código deveria inserir a primeira linha com os dados da list
Assim nao vai dar certo - voce vai acabar implementando um driver JDBC pra lidar com Collections. Use o suporte a Collections do Flash Remoting 