O campo feature é uma byte[] de 10000 posições.
O erro se da quando setBlob.
Aguardo,
S
SINVAL
Oi Rafael, não tenha me atentado que era vc, como estavamos falando eu baixei o java5 para ter acesso aquela class SerialBlob e tentar fazer o insert do blob.
R
rflprp
SerialBlobb=newSerialBlob((Blob)features);
Tenta isso pq eu acho que SerialBlob implementa Blob, bom to saindo do trabalho, amanhã entro pra ver se funcionou.
Boa Sorte !
S
SINVAL
Infelizmente não funcionou, deu a seguinte msg: Cannot cast from byte[] to Blob.
Amanha estarei aqui também e podemos tentar mais um pouco, se vc puder.
S
SINVAL
Rafael, já no trabalho ?? :?:
R
rflprp
opa, cheguei da praia agora, ná última resposta que mandei me enganei, era pra mandar outra coisa.
getDescricaoDigital() retorn um SerialBlob ? Se retornar tenta isso, senão me diz o que ela retorna.
Praia!!! hummm que beleza, aqui também é Rio…mas Rio Preto, muito sol e nada de praia, infelizmente…bom desculpe-me mas so consegui ver seu retorno agora e fiz as alterações e o teste mas a msg foi a seguinte:Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.sql.rowset.serial.SerialBlob
at oracle.jdbc.driver.OraclePreparedStatement.setBlob(OraclePreparedStatement.java:2056)
at ponto.DigitalFuncionarioDAO.incluirBiometria(DigitalFuncionarioDAO.java:41) Aguardo, obr.
R
rflprp
Opa, fala cara.
Estranho, vê pra mim se vc consegue executar essa linha sem erro:
E ai Rafael, tudo bem, inicialmente aquele comando foi colocado antes dele atualizar o banco e sendo como get ele não deu problema de acesso, mas quando foi atualizar o banco deu “pau” novamente, vou fazer o seguinte, criar uma aplicação teste para fazer esta inclusão e acesso a banco dentro de uma classe e mando para vc dar uma olhada,
Rafael, tudo bem !! tentei fz uma classe que simulasse a inclusão no blob mas continua dando exception, segue a mesma para vc dar uma olhada.
packageVeriFinger;importjava.sql.Blob;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjavax.sql.rowset.serial.SerialBlob;importpadrao.ErroPadraoException;publicclassIncluiDigital{bytefeature[]=newbyte[10000];SerialBlobdigital;privatestaticStringurl="jdbc:oracle:thin:@192.168.2.101:1521:dsv";// driverprivatestaticStringdrive="oracle.jdbc.driver.OracleDriver";privatestaticStringusuario="csl";// senha do usuário a ser conectado ao bancoprivatestaticStringsenha="csl";PreparedStatementstmt;Connectionconn;IncluiDigital(){try{digital=newSerialBlob(feature);}catch(Exceptione){e.printStackTrace();}criaConexao();try{digital=newSerialBlob(feature);stmt=conn.prepareStatement("insert into ad_folha_digital_funcionarios (ID_DIGITAL_SEQ,CD_MATRICULA,QT_BYTE_DIGITAL,DS_DIGITAL,DT_INC,NM_INC,DT_ALT,NM_ALT) values (1,11854,0,?,null,null,null,null)");stmt.setBlob(1,(Blob)digital);stmt.executeUpdate();System.out.println("Arquivo incluido");}catch(Exceptione){e.printStackTrace();}try{stmt.close();conn.close();System.out.println("fechando");}catch(Exceptione){e.printStackTrace();}}privatevoidcriaConexao(){try{Class.forName(drive);System.out.println("Driver carregado...");conn=DriverManager.getConnection(url,usuario,senha);System.out.println("Driver carregado e conexão pega...");}catch(ClassNotFoundExceptione){System.err.println("Classe não carregada "+drive);}catch(SQLExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){newIncluiDigital();}}
java.lang.ClassCastException: javax.sql.rowset.serial.SerialBlob
at oracle.jdbc.driver.OraclePreparedStatement.setBlob(OraclePreparedStatement.java:2056)
R
rflprp
Cara, tenta o seguinte então:
stmt.setBytes(1,digital.getBytes());
Só que o getBytes tem 2 argumentos que nãosei quais são, tenta dar uma olhada, se vc não conseguir me avisa.
Abraço
ramilani12
Esse campo stmt.setBlob(4,digitalFuncionario.getDescricaoDigital()); o parametro 4 seria o que ?
Prq ao setar um campo blobo o primeiro parametro é um ponteiro lógico , como esta na documentação :
Rafael eu troquei os campo p/ bytes e aquele erro aparentemente resolveu mas agora ao gravar ele da:
java.sql.SQLException: Tamanho dos dados maior que o tamanho máximo para este tipo: 10000
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
Estou passando mais que o 10000 ou o campo por ser byte não esta suportando e com isto tem que ser blob.
S
SINVAL
Oi Ramilami, bem, este campo I que vc dize não seria a sequencia da coluna na tabela, assim como os outros tipos ?
ramilani12
SINVAL:
Rafael eu troquei os campo p/ bytes e aquele erro aparentemente resolveu mas agora ao gravar ele da:
java.sql.SQLException: Tamanho dos dados maior que o tamanho máximo para este tipo: 10000
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
Estou passando mais que o 10000 ou o campo por ser byte não esta suportando e com isto tem que ser blob.
Pela exception vc está trabalhando com Oracle , nunca trabalhei com Oracle ,e ele não tem um campo longblob igual ao MySql ?
R
rflprp
Caramba, essa briga tá feia, vou procurar algo agora na hora do almoço.
Abraço,
S
SINVAL
Sim tem, inclusive estou tendo um trabalhão para conseguir gravar no Blob, que é identico ao mssql.
Mas como vc pode ver não estou conseguindo gravar esta coluna como blob, agora (conforme o Rafael esta dando a dica) eu mudei para bytes[] para testar.
ramilani12
Não entendi essa sequência que tu diz ? essa sequencia que vc criou os campos na tabela ?
ramilani12
Prq vc não tenta no lugar de setBlob , setBytes(2, array de bytes) ?
S
SINVAL
Ramilani, respondendo a sua pergunta:
1º - Quando eu digo a sequencia, ela é a sequencia definida dos parametros dentro do stmt , exemplo: insert a (x,digital,z) values (‘1’,?,?); que neste caso a digital seria o 1º parametro , não esta correto?
2º - Não posso colocar bytes, pois o maximo que ele esta deixando gravar é 4000 e como estou trabalhando bom biometria eu preciso de 10000, não sei se ha um outro tipo que poderia comportar 10000 bytes para guardar binario.
ramilani12
SINVAL:
Ramilani, respondendo a sua pergunta:
1º - Quando eu digo a sequencia, ela é a sequencia definida dos parametros dentro do stmt , exemplo: insert a (x,digital,z) values (‘1’,?,?); que neste caso a digital seria o 1º parametro , não esta correto?
2º - Não posso colocar bytes, pois o maximo que ele esta deixando gravar é 4000 e como estou trabalhando bom biometria eu preciso de 10000, não sei se ha um outro tipo que poderia comportar 10000 bytes para guardar binario.
Ah tá entendi , mas prq não tenta setBytes(2,arrayBytes) no lugar do setBlob() ?
para recuperar Blob blob = rs.getBlob(“campo”);
S
SINVAL
Eu já tentei mas ele da aquela msg assim:
java.sql.SQLException: Tamanho dos dados maior que o tamanho máximo para este tipo: 10000
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
ramilani12
SINVAL:
Eu já tentei mas ele da aquela msg assim:
java.sql.SQLException: Tamanho dos dados maior que o tamanho máximo para este tipo: 10000
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
Ah tá , pelo que entendi o campo não suporta 10000 bytes , é imagem que vc ta querendo armazenar ? acho que só comprimindo esse seu array …
L
Luiz_Carlos_de_M_Bar
Por acaso o erro não está nesta linha:
stmt = conn.prepareStatement(“insert into ad_folha_digital_funcionarios (ID_DIGITAL_SEQ,CD_MATRICULA,QT_BYTE_DIGITAL,DS_DIGITAL,DT_INC,NM_INC,DT_ALT,NM_ALT) values (1,11854,0,?,null,null,null,null)”);
não é stmt= conn.preparedStatement
falow
S
SINVAL
Desculpe-me, mas acho que não entendi bem, meu comando esta como vc informou não esta ?
S
SINVAL
Tudo bem Luiz, bem não sei se vc esta falando do “d” do prepareStament, mas acho que esta correto.
S
SINVAL
PESSOAL, quero deixar postado aqui que abri um chamado na Oracle e a mesma até o momento disse que estão avaliando o problema, mas inicialmente eles disseram que o driver que suporta o SerialBlob é após a versao 10.2.0.1.0, mas ainda não confirmaram com certeza, mesmo assim, irei fazer um teste.