Porém preciso passar o parametro por nome, pois será definido em runtime e o usuário poderá se confundir visualizando os parametros pelos números. Existe algo semelhante no java igual ao exemplo que passei do Delphi ou terei que implementar no braço?
O código que está no link, não funciona, adicionei todos os jars do hydra, importei as libs, copiei e colei da forma que estava lá, não sei o que fiz errado. O eclipse disse que não pode instanciar o tipo devido a ser uma interface. Já usou? O que fazer para funcionar?
Stringquery="select * from people where (first_name = :name or last_name = :name) and address = :address");NamedParameterStatementp=newNamedParameterStatement(con,query);p.setString("name",name);p.setString("address",address);
publicstaticvoidmain(String[]args)throwsException{Connectionconnection=DriverManager.getConnection("xxxxxxxxxxxxxxxxxxxx");NamedParameterStatementstmt=newNamedParameterStatement(connection,"SELECT * FROM PESSOA WHERE ID_PESSOA >= :PID_PESSOA");stmt.setLong("PID_PESSOA",newLong(100));ResultSetresultSet=stmt.executeQuery();}privatefinalPreparedStatementstatement;privatefinalMapindexMap;publicNamedParameterStatement(Connectionconnection,Stringquery)throwsSQLException{indexMap=newHashMap();StringparsedQuery=parse(query,indexMap);statement=connection.prepareStatement(parsedQuery);}staticfinalStringparse(Stringquery,MapparamMap){intlength=query.length();StringBufferparsedQuery=newStringBuffer(length);booleaninSingleQuote=false;booleaninDoubleQuote=false;intindex=1;for(inti=0;i<length;i++){charc=query.charAt(i);if(inSingleQuote){if(c=='\''){inSingleQuote=false;}}elseif(inDoubleQuote){if(c=='"'){inDoubleQuote=false;}}else{if(c=='\''){inSingleQuote=true;}elseif(c=='"'){inDoubleQuote=true;}elseif(c==':'&&i+1<length&&Character.isJavaIdentifierStart(query.charAt(i+1))){intj=i+2;while(j<length&&Character.isJavaIdentifierPart(query.charAt(j))){j++;}Stringname=query.substring(i+1,j);c='?';i+=name.length();ListindexList=(List)paramMap.get(name);if(indexList==null){indexList=newLinkedList();paramMap.put(name,indexList);}indexList.add(newInteger(index));index++;}}parsedQuery.append(c);}for(Iteratoritr=paramMap.entrySet().iterator();itr.hasNext();){Map.Entryentry=(Map.Entry)itr.next();Listlist=(List)entry.getValue();int[]indexes=newint[list.size()];inti=0;for(Iteratoritr2=list.iterator();itr2.hasNext();){Integerx=(Integer)itr2.next();indexes[i++]=x.intValue();}entry.setValue(indexes);}returnparsedQuery.toString();}privateint[]getIndexes(Stringname){int[]indexes=(int[])indexMap.get(name);if(indexes==null){thrownewIllegalArgumentException("Parameter not found: "+name);}returnindexes;}publicvoidsetObject(Stringname,Objectvalue)throwsSQLException{int[]indexes=getIndexes(name);for(inti=0;i<indexes.length;i++){statement.setObject(indexes[i],value);}}publicvoidsetString(Stringname,Stringvalue)throwsSQLException{int[]indexes=getIndexes(name);for(inti=0;i<indexes.length;i++){statement.setString(indexes[i],value);}}publicvoidsetInt(Stringname,intvalue)throwsSQLException{int[]indexes=getIndexes(name);for(inti=0;i<indexes.length;i++){statement.setInt(indexes[i],value);}}publicvoidsetLong(Stringname,longvalue)throwsSQLException{int[]indexes=getIndexes(name);for(inti=0;i<indexes.length;i++){statement.setLong(indexes[i],value);}}publicvoidsetTimestamp(Stringname,Timestampvalue)throwsSQLException{int[]indexes=getIndexes(name);for(inti=0;i<indexes.length;i++){statement.setTimestamp(indexes[i],value);}}publicPreparedStatementgetStatement(){returnstatement;}publicbooleanexecute()throwsSQLException{returnstatement.execute();}publicResultSetexecuteQuery()throwsSQLException{returnstatement.executeQuery();}publicintexecuteUpdate()throwsSQLException{returnstatement.executeUpdate();}publicvoidclose()throwsSQLException{statement.close();}publicvoidaddBatch()throwsSQLException{statement.addBatch();}publicint[]executeBatch()throwsSQLException{returnstatement.executeBatch();}