Gravar dados tipo CHAR no Oragle

6 respostas
caiomacedor

Boa tarde galera. Não conheço muito bem de Oracle, por isso estou tendo problemas pra gravar um dado do tipo CHAR na base. Vou colocar aqui parte do meu codigo pra ver se alguem ai pode me dar uma luz do que esta errado.

Bean:
private char perfil;
	
        public char getPerfil() {
		return perfil;
	}
	public void setPerfil(char perfil) {
		this.perfil = perfil;
	}
metodo que fazer a gravação:
public Usuario insert(Usuario usuario) throws DAOException, SQLException {
		this.connection = ConnectionFactory.getInstance().getConnection();
		StringBuffer sql = new StringBuffer();
		sql.append(" INSERT INTO USUARIO(CD_USUARIO, NM_USUARIO, LOGIN, SENHA, PERFIL, STATUS, TIMESTAMP) ");
		sql.append(" VALUES(?, ?, ?, ?, ?, ?, SYSDATE) ");
		int i = 1; 
		try {
			PreparedStatement pstmt = this.connection.prepareStatement(sql.toString());
			pstmt.setObject(i++, usuario.getCdUsuario(), Types.VARCHAR); 
			pstmt.setObject(i++, usuario.getNmUsuario(), Types.VARCHAR); 
			pstmt.setObject(i++, usuario.getLogin(), Types.VARCHAR); 
			pstmt.setObject(i++, usuario.getSenha(), Types.VARCHAR); 
			pstmt.setObject(i++, usuario.getPerfil(), Types.CHAR); 
			pstmt.setObject(i++, usuario.getStatus(), Types.CHAR); 
			pstmt.execute();
			pstmt.close();
			connection.close();
			
		} catch (SQLException e) {
			throw new DAOException(e.getMessage());
		}
		return usuario;
	}
Erro retornado pelo banco na hora que tenta gravar os CHAR:
java.sql.SQLException: Conversão inválida solicitada
OBS: Fiz esse insert na mão e ocorreu tudo certo.
INSERT INTO USUARIO(CD_USUARIO, NM_USUARIO, LOGIN, SENHA, PERFIL, STATUS, TIMESTAMP)
VALUES('ADMIN', 'Calixto Rodrigues Macedo', 'admin', 'admin', 'A', 'B', SYSDATE);

Alguem ai sabe o que pode estar errado?
Desde ja muito obrigado.

6 Respostas

T

Normalmente eu não gosto de usar setObject em JDBC; eu prefiro usar os métodos mais bitolados (setString, setDouble etc. )

É que você não sabe direito o que “setObject” em JDBC vai fazer. Pode ser, por exemplo, que setObject esteja incorretamente implementado.

caiomacedor

O problema é que não existe um setChar() por exemplo. Nesse caso eu teria eu setar com setString. ou tem que ser outra coisa?

T

Costuma ser isso mesmo (usar setString).

É que o tipo CHAR, em um banco de dados, é correspondente a um campo string de tamanho fixo (por exemplo, CHAR(5) é um campo de exatamente 5 caracteres; se você passar menos caracteres em um UPDATE, por exemplo, o banco completa com espaços à direita.)

caiomacedor

Mas ai eu teria que mudar o tipo da variavel no Bean de CHAR pra STRING, ai vai me atrapalhar em outros processos.

T

Não entendi o que o tipo do bean tem a ver com a chamada a setString. Que custa fazer isto aqui:

pstmt.setString(i++, "" + usuario.getStatus());

?

caiomacedor

Bean atual .

private char status;

	public char getStatus() {
		return status;
	}
	public void setStatus(char status) {
		this.status = status;
	}

não posso fazer isso no bean

private String status;

	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}

para que no metodo eu faça um setString(indice, usuario.getStatus());

Criado 23 de março de 2009
Ultima resposta 23 de mar. de 2009
Respostas 6
Participantes 2