Olá pessoal td bom com vcs ?
Estou com um problema estranho em uma aplicação que utiliza 2 bases de dados iguais porem uma no SQL SERVER EXPRESS 2005 e outra no FIREBIRD 2.0, todas as inserções na base de dados são feitas atravez de stored procedures, abaixo segue a minha classe de conexão com o banco que detecta a qual banco de dados deve se conectar atravez da boolean sqlSelected
import java.sql.*;
/**
*
* @author Gabriel
*/
public class ConexaoDB {
public static boolean sqlSelected;
/** Creates a new instance of ConexaoDB */
private ConexaoDB() {
}
public static Connection getConnection(){
if(isSqlSelected())
return getSQLServerConnection();
else
return getFirebirdConnection();
}
private static Connection getFirebirdConnection(){
Connection conn=null;
try {
Class.forName("org.firebirdsql.jdbc.FBDriver");
} catch (java.lang.ClassNotFoundException e) {
e.printStackTrace();
}
try{
conn = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:\\DBVENDA.fdb","SYSDBA","123456");
}catch(SQLException sq){
sq.printStackTrace();
}
return conn;
}
private static Connection getSQLServerConnection() {
Connection conn=null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
} catch (java.lang.ClassNotFoundException e) {
e.printStackTrace();
}
try{
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://DARKSTAR/DBVENDA:1433;","sa","123456");
}catch(SQLException sq){
sq.printStackTrace();
}
return conn;
}
public static boolean isSqlSelected() {
return sqlSelected;
}
public static void setSqlSelected(boolean sql) {
sqlSelected=sql;
}
}
abaixo segue o código que é executado em um evento de inserção na base de dados
Um cliente por exemplo
if(!jTxtNome.getText().equals("")){
conn = ConexaoDB.getConnection();
try{
CallableStatement csm = conn.prepareCall("INSCLIENTE(?)");
csm.setString(1,jTxtNome.getText());
csm.execute();
csm.close();
conn.close();
conn = null;
preenchejt();
JOptionPane.showMessageDialog(null,"Cadastro Efetuado com êxito","Mensagem",JOptionPane.INFORMATION_MESSAGE);
} catch (SQLException sql){
sql.printStackTrace();
}
Quando eu faço o cadastro de um cliente utilizando o SQL SERVER o programa funciona normal, agora se tento o mesmo com o firebird da o seguinte erro e o cursor do netbeans aponta para a linha numero 6 do código acima
org.firebirdsql.jdbc.FBSQLException: You cannot set value of an non-existing parameter.
at org.firebirdsql.jdbc.FBProcedureCall$NullParam.setValue(FBProcedureCall.java:424)
at org.firebirdsql.jdbc.AbstractCallableStatement.setString(AbstractCallableStatement.java:1130)
estou utilizando o driver Jaybird-2.1.1JDK_1.5 com java 1.6 pois ja vi estes funcionando juntos
o stored procedure é o seguinte:
CREATE PROCEDURE INSCLIENTE(nome VARCHAR(50))
AS
BEGIN
INSERT INTO CLIENTE(CODIGO,NOME) VALUES (GEN_ID(COD_CLIENTE,1),:nome);
END
Gente vocês conseguem faze idéia do que está acontecendo, sendo que as bases são identicas e só foi mudado a sintaxe do código sql que é caracteristico de cada banco de dados ?