Ta dando um erro de SQL estranho. Preciso de ajuda
log do erro:
...
...
[08/07/2008 02:19:21,609] INFO [http-8080-2] (SessionFactoryObjectFactory.java:86) ### Factory name: session1 ###
[08/07/2008 02:19:21,656] INFO [http-8080-2] (NamingHelper.java:26) ### JNDI InitialContext properties:{} ###
[08/07/2008 02:19:21,656] INFO [http-8080-2] (SessionFactoryObjectFactory.java:91) ### Bound factory to JNDI name: session1 ###
[08/07/2008 02:19:21,656] WARN [http-8080-2] (SessionFactoryObjectFactory.java:101) ### InitialContext did not implement EventContext ###
[08/07/2008 02:19:22,688] ERROR [http-8080-2] (ItemMaterialServicoDAO.java:208) ### java.sql.SQLException: ORA-01006: a variável de ligação não existe ###
o problema esta aqui:
[code]public ArrayList pesquisarMaterial(
String dscMaterial, int codCategoria, int codGrupo, int codClasse) {
String sql =
new StringBuilder()
.append("SELECT “)
.append(” IMS.* ")
.append("FROM “)
.append(” ADM_GESTAOMATERIAL.VM_ITEM_MATERIAL_SERVICO_IMS IMS “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_ITEM_MATERIAL_IMA IMA “)
.append(” ON IMA.PK_SEQ_ITEM_MATERIAL_IMA = IMS.ID_IMS “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_MATERIAL_MAT MAT “)
.append(” ON IMA.FK_SEQ_MATERIAL_MAT = MAT.PK_SEQ_MATERIAL_MAT “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_CLASSE_CLA CLA “)
.append(” ON MAT.FK_SEQ_CLASSE_CLA = CLA.PK_SEQ_CLASSE_CLA “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_GRUPO_GRU GRU “)
.append(” ON CLA.FK_SEQ_GRUPO_GRU = GRU.PK_SEQ_GRUPO_GRU “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_CATEGORIA_CAT CAT “)
.append(” ON GRU.FK_SEQ_CATEGORIA_CAT = CAT.PK_SEQ_CATEGORIA_CAT ")
.append("WHERE “)
.append(” UPPER(IMS.DSC_IMS) LIKE UPPER(’%?%’) AND “)
.append(” CAT.PK_SEQ_CATEGORIA_CAT = ? AND “)
.append(” GRU.COD_GRUPO_GRU = ? AND “)
.append(” CLA.COD_CLASSE_CLA = ? ")
.append("UNION ")
.append("SELECT “)
.append(” IMS.* ")
.append("FROM “)
.append(” ADM_GESTAOMATERIAL.VM_ITEM_MATERIAL_SERVICO_IMS IMS “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_ITEM_SERVICO_ISE ISE “)
.append(” ON ISE.PK_SEQ_ITEM_SERVICO_ISE = IMS.ID_IMS “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_SERVICO_SER SER “)
.append(” ON ISE.FK_SEQ_SERVICO_SER = SER.PK_SEQ_SERVICO_SER “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_CLASSE_CLA CLA “)
.append(” ON SER.FK_SEQ_CLASSE_CLA = CLA.PK_SEQ_CLASSE_CLA “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_GRUPO_GRU GRU “)
.append(” ON CLA.FK_SEQ_GRUPO_GRU = GRU.PK_SEQ_GRUPO_GRU “)
.append(” INNER JOIN ADM_GESTAOMATERIAL.TB_CATEGORIA_CAT CAT “)
.append(” ON GRU.FK_SEQ_CATEGORIA_CAT = CAT.PK_SEQ_CATEGORIA_CAT ")
.append("WHERE “)
.append(” UPPER(IMS.DSC_IMS) LIKE UPPER(’%?%’) AND “)
.append(” CAT.PK_SEQ_CATEGORIA_CAT = ? AND “)
.append(” GRU.COD_GRUPO_GRU = ? AND “)
.append(” CLA.COD_CLASSE_CLA = ? ")
.toString();
PreparedStatement stmt;
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
try {
this.connection = session.connection();
stmt = this.connection.prepareStatement(sql);
stmt.setString(1, dscMaterial);
stmt.setInt(2, codCategoria);
stmt.setInt(3, codGrupo);
stmt.setInt(4, codClasse);
stmt.setString(5, dscMaterial);
stmt.setInt(6, codCategoria);
stmt.setInt(7, codGrupo);
stmt.setInt(8, codClasse);
ResultSet rs = (ResultSet) stmt.executeQuery();
itemMaterialServicos = new ArrayList<ItemMaterialServico>();
while (rs.next()) {
ItemMaterialServico itemMaterialServico = new ItemMaterialServico();
Integer idIms = rs.getInt("ID_IMS");
Short codIms = rs.getShort("COD_IMS");
String dscIms = rs.getString("DSC_IMS");
String tipoIms = rs.getString("TIPO_IMS");
String fornecimentoIms = rs.getString("FORNECIMENTO_IMS");
itemMaterialServico.setIdItemMatSer(idIms);
itemMaterialServico.setCodItemMatSer(codIms);
itemMaterialServico.setDscItemMatSer(dscIms);
itemMaterialServico.setTipoItemMatSer(tipoIms);
itemMaterialServico.setFornecimentoItemMatSer(fornecimentoIms);
itemMaterialServicos.add(itemMaterialServico);
}
rs.close();
stmt.close();
tx.commit();
} catch (SQLException e) {
tx.rollback();
logger.error(e);
} finally {
if (this.connection != null) {
this.connectionClosse();
}
HibernateUtil.closeSession();
}
return itemMaterialServicos;
}[/code]
obs: acabei usando o prepare statement, porque o programa eh muito pequeno e acho que eh um desperdicio usar o hibernate … to usando ele mesmo soh para fazer o pool de conexoes
o programa eh um pequeno web service que vai fornecer umas consultas no banco
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.gov.ce.seplag.gestaoMaterial;
import br.gov.ce.seplag.gestaoMaterial.dao.CategoriaDAO;
import br.gov.ce.seplag.gestaoMaterial.dao.ClasseDAO;
import br.gov.ce.seplag.gestaoMaterial.dao.GrupoDAO;
import br.gov.ce.seplag.gestaoMaterial.dao.ItemMaterialServicoDAO;
import br.gov.ce.seplag.gestaoMaterial.model.Categoria;
import br.gov.ce.seplag.gestaoMaterial.model.Classe;
import br.gov.ce.seplag.gestaoMaterial.model.Grupo;
import br.gov.ce.seplag.gestaoMaterial.model.ItemMaterialServico;
import java.util.ArrayList;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
/**
*
-
@author bernardo
*/
@WebService()
public class gestaoMaterialWs {/**
- Web service operation
*/
@WebMethod(operationName = “listarCategorias”)
public ArrayList listarCategorias() {
ArrayList categorias;
CategoriaDAO catDAO = new CategoriaDAO();
categorias = catDAO.listarCategorias();
return categorias;
}
/**
- Web service operation
*/
@WebMethod(operationName = “listarGrupos”)
public ArrayList listarGrupos() {
ArrayList grupos;
GrupoDAO gruDAO = new GrupoDAO();
grupos = gruDAO.listarGrupos();
return grupos;
}
/**
- Web service operation
*/
@WebMethod(operationName = “listarClasses”)
public ArrayList listarClasses() {
ArrayList classes;
ClasseDAO gruDAO = new ClasseDAO();
classes = gruDAO.listarClasses();
return classes;
}
/**
- Web service operation
*/
@WebMethod(operationName = “pesquisarMaterial1”)
public ArrayList pesquisarMaterial1(
@WebParam(name = “codMaterial”) int codMaterial,
@WebParam(name = “codCategoria”) int codCategoria) {
ArrayList ims;
ItemMaterialServicoDAO imsDAO = new ItemMaterialServicoDAO();
ims = imsDAO.pesquisarMaterial(codMaterial, codCategoria);
return ims;
}
/**
- Web service operation
*/
@WebMethod(operationName = “pesquisarMaterial2”)
public ArrayList pesquisarMaterial2(
@WebParam(name = “parameter”) String dscMaterial,
@WebParam(name = “parameter1”) int codCategoria,
@WebParam(name = “parameter2”) int codGrupo,
@WebParam(name = “parameter3”) int codClasse) {
ArrayList ims;
ItemMaterialServicoDAO imsDAO = new ItemMaterialServicoDAO();
ims = imsDAO.pesquisarMaterial(dscMaterial, codCategoria,codGrupo,codClasse);
return ims;
}
}
[/code]
- Web service operation
e a chamada do metodo no cliente
try { // Call Web Service Operation
br.gov.ce.seplag.gestaomaterial.GestaoMaterialWsService service = new br.gov.ce.seplag.gestaomaterial.GestaoMaterialWsService();
br.gov.ce.seplag.gestaomaterial.GestaoMaterialWs port = service.getGestaoMaterialWsPort();
// TODO initialize WS operation arguments here
java.lang.String parameter = "cop";
int parameter1 = 9;
int parameter2 = 75;
int parameter3 = 50;
// TODO process result here
java.util.List<br.gov.ce.seplag.gestaomaterial.ItemMaterialServico> result = port.pesquisarMaterial2(parameter, parameter1, parameter2, parameter3);
System.out.println("Result5 = " + result.size());
} catch (Exception ex) {
// TODO handle custom exceptions here
}
EDIT
sim, quando eu tiro lah do SQL os ? e coloco os valores que eu to passando jah dentro do sql sem fazer ‘stmt.set’ … ele funciona normal. to usando a ojdbc14.jar o banco eh oracle (logico :P)