Olá Pessoal
Segundo a solução que vi aqui
http://www.guj.com.br/java/110712-ora-01843-not-a-valid-month-resolvido
basta setar o locale antes de fazer a conexão desta forma
Locale.setDefault(new Locale("en", "US"));
No entanto, esta solução não serve para mim pois só preciso alterar o formato da data antes de chamar uma certa stored procedure. Nas demais consultas ao banco, o locale deve ser o padrão que já está setado.
Tenho o código abaixo que é suspeito de estar errado. Foi desativado e vários bugs cessaram imediatamente.
Gostaria de saber se alguém nota algo errado e se teria uma solução alternativa.
public static String execute(String dbDriver, String dbUrl, etc etc ) {
Connection conn = null;
CallableStatement stmt = null;
String procedure = "usuario.SP_INSERT";
String retorno="0";
try {
StringBuffer sql = new StringBuffer();
conn = getConnection(dbDriver, dbUrl, dbUsrName, dbUsrPwd);
String sqlSession = "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'";
PreparedStatement cs1 = conn.prepareStatement(sqlSession);
cs1.execute();
cs1.close();
sql.append("{call " + procedure + " (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
stmt = conn.prepareCall(sql.toString());
stmt.setString(1, etcetcetc);
stmt.setString(2, blablabla);
stmt.setString(3 .....
stmt.execute();
stmt.close();
}
catch (Exception e) {
logger.error("Exception: " + e.toString(), e);
retorno = "2";
}
finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return retorno;
}