public static Connection getConexao(){
try{
Driver d = (Driver)Class.forName
("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection c = DriverManager.getConnection
("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=src/bd/ListPrograms.mdb");
return c;
}catch(SQLException e){
e.printStackTrace();
System.err.println("Erro de Conexão!");
return null;
}catch(ClassNotFoundException c){
c.printStackTrace();
System.err.println("Classe Não Encontrada!");
return null;
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}[/code]
Toda vez q tento adicionar é retornada a seguinte exceção:
Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 3
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1023)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3057)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:766)
at persistent.ProgramaDAO.inserirPrograma(ProgramaDAO.java:31)
O erro aponta para essa linha: stmtInsere.setString(4, programa.getCaminho());
Amigão, eu tentei oq vc sugeriu e retornou o seguinte:
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Você tentou atribuir o valor Null a uma variável que não é do tipo de dados Variant.
Eu começo pelo 2 pq a primeira entrada é auto-increment.
stmtInsere.setString(2, programa.getName()); // mude para 1
stmtInsere.setString(3, programa.getSerial()); // mude para 2
stmtInsere.setString(4, programa.getCaminho()); // mude para 3
PreparedStatement stmtInsere = conn.prepareStatement(“INSERT INTO programa VALUES (null,?,?,?)”);
Não importa qnts parametros sua query tenha, o setString() substitui as “?” pela ordem.
Se seu statemet fosse algo assim
PreparedStatement stmtInsere = conn.prepareStatement(“INSERT INTO programa VALUES (null,null,null,?)”);
vc só teria UM setString() e ele seria assim: setString(1,“valor”);
PreparedStatement stmtInsere = conn.prepareStatement(“INSERT INTO programa VALUES (null,?,null,?)”);
setString(1,“valor x”);
setString(2,“valor y”);
E esse seu outro erro, é pq provavelmente pq não aceita null pra int, troca o null por qq numero.
Realmente funcionou quando eu coloquei um numero no local do null, mas aí surge outra dúvida, como eu faço para inserir como auto increment? pois ali insiro a id.
Bom, com o access eu não sei, nos bancos que uso (mysql, MSsql) eu o campo com Auto-Increment, e mesmo que no INSERT eu coloquei qq numero, ele n leva em consideração o numero e segue a ordem do AI.
Tenta isso pra ver se vai:
O seu ta assim.
“INSERT INTO programa (campo_id,campo_x,campo_y,campo_z) VALUES (null,?,?,?)”
Retira expliciamente o nome do campo referente ao ID. (e retira tb no values, ficando os 3 valores e sem o id.)
“INSERT INTO programa (campo_x,campo_y,campo_z) VALUES (?,?,?)”