turma to com problemas na conexao via codigo java com o mysql acho que problema é o sequinte. Acho que o JDBC por padrão se conecta como UTF-8. olha so o arquivo “my.ini” do mysql server 5.1.
OBS: Ao longo das expecificações das configurações do mysql e codigo java e sql que to mostrando tenho comentarios no final com explicações do que ja tentei.
[client]
default-character-set=latin1
port=3306
[mysql]
default-character-set=latin1
SERVER SECTION
----------------------------------------------------------------------
The following options will be read by the MySQL Server. Make sure that
you have installed the server correctly (see above) so it reads this
file.
[mysqld]
The TCP/IP Port the MySQL Server will listen on
port=3306
#Path to installation directory. All paths are usually resolved relative to this.
basedir=“C:/Program Files/MySQL/MySQL Server 5.1/”
#Path to the database root
datadir=“C:/ProgramData/MySQL/MySQL Server 5.1/Data/”
The default character set that will be used when a new schema or table is
created and no character set is defined
default-character-set=latin1
The default storage engine that will be used when create new tables when
default-storage-engine=INNODB
Set the SQL mode to strict
sql-mode=“STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
ta tudo como latin1 mas tenho problemas com carateres especiais como acentos e “ç”, até meu banco ta todo como latin1
seque o ecript SQL do meu banco.
CREATE DATABASE avaliacao CHARACTER SET = 'LATIN1';
USE avaliacao;
CREATE TABLE questoes (
id_questao INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
questao NVARCHAR(100) NOT NULL,
avaliacao NCHAR(1) NOT NULL
) CHARACTER SET LATIN1;
CREATE TABLE votantes (
nome NVARCHAR(30) NOT NULL
) CHARACTER SET LATIN1;
CREATE TABLE cursos (
id_curso INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
nome NVARCHAR(30) NOT NULL
) CHARACTER SET LATIN1;
CREATE TABLE professores (
id_professor INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_curso INTEGER NOT NULL REFERENCES curso(id_curso),
nome NVARCHAR(30) NOT NULL,
local_trabalho NVARCHAR(30) NOT NULL,
carga_horia SMALLINT NOT NULL,
periodo DATE NOT NULL
) CHARACTER SET LATIN1;
CREATE TABLE diciplinas(
id_diciplina INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_professor INTEGER NOT NULL REFERENCES professores(id_professor),
id_curso INTEGER NOT NULL REFERENCES curso(id_curso),
nome NVARCHAR(30) NOT NULL,
credito SMALLINT,
carga_horaria SMALLINT
) CHARACTER SET LATIN1;
CREATE TABLE votos (
id_voto INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_questao INTEGER NOT NULL REFERENCES questoes(id_questao),
id_curso INTEGER NOT NULL REFERENCES curso(id_curso),
id_professor INTEGER REFERENCES professores(id_professor),
item NCHAR(1) NOT NULL
) CHARACTER SET LATIN1;
como estar tudo como latin1 pensei que foce o collation então comecei a especificar outros colletion na query. Foi ai que pecebi o problema estava conectado como UTF-8, pois foi gerado uma SQLExeption com uma mensagem de erro que dizia que este collation não existia paro o character set UTF-8. Entam foi que pecebi que devia ser o JDBC que estar se conectando ao banco como UTF-8. sequi a minha classe que cria a conexão com o banco. ja especifique o charset na url de conexão, tambem executei
SET CHARACTER SET LATIN1 no banco antes de executar uma query via codigo java mas o problema pessiste. Tuma precisso resolver isso o mais rapido possivel ou etou ferrado na minha iniciação cientifica jr. preciso disso funcionando perfeitamente logo. ja fiz atualização de driver to usando o driver que baxei semana passada “mysql-connector-java-5.1.10-bin.jar”.
URL=jdbc:mysql://localhost/avaliacao?charset=latin1
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package aplicativo.iniciacao.cientifica.jr.sql;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
-
@author antoniel
*/
public class ConnectionSQL {/**Especifica a classe do jdbc driver mysql connector. */
public static String MySQL_DRIVER = “com.mysql.jdbc.Driver”;/**Especifica a classe do jdbc driver postgreSQL connector. */
public static String POSTGRESQL_DRIVER = “org.postgresql.Driver”;/**Especifica a classe do jdbc driver oracle connector. */
public static String ORACLE_DRIVER = “oracle.jdbc.OracleDriver”;/**Especifica a classe do jdbc driver DB2 connector. */
public static String DB2_DRIVER = “COM.ibm.db2.jdbc.net.DB2Driver”;/**Especifica a classe do jdbc driver sybase connector. */
public static String SyBASE_DRIVER = “com.Sybase.jdbc.SyDriver”;private Connection conexao;
private Statement execut;
private boolean conexaoComDataBase;
private ResultSet resultSet;
private ResultSetMetaData metaData;
private int numeroLinha;
/**Construtur com quatro argumentos, cria a conexão com o banco de dados devolvendo qualquer SQLException
- gerada durante o estabelecimento da conexão, devolve uma ClassNotFoundException caso a classe de driver
- não seja encontrada.
*/
public ConnectionSQL(String driver,String url_banco,String usuario,String senha) throws ClassNotFoundException, SQLException{
Class.forName(driver);//carega a classe de driver
conexao = DriverManager.getConnection(url_banco, usuario, senha);//conecta-se ao banco
//cria o statement para consutar o banco
execut = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
conexaoComDataBase = true;//configura a conexão
}public ConnectionSQL(String driver,String home) throws ClassNotFoundException, SQLException{
}
/**Executa uma consulta no banco de dados de acordo com a SQL passada como argumento. */
public void executQuery(String query) throws SQLException,IllegalStateException {
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);resultSet = execut.executeQuery(query); metaData = resultSet.getMetaData(); resultSet.last();//move o cursor para a utima linha numeroLinha = resultSet.getRow();
}
/**Executa uma atualização no banco de dados de acordo com a SQL passada como argumento. */
public void executUpdate(String SQLUpdate) throws SQLException,IllegalStateException {
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);execut.executeUpdate(SQLUpdate);
}
/**Executa um comando SQL no banco de dados retornando uma int com o status da execução. */
public int executComando(String cmd) throws SQLException,IllegalStateException {
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);return execut.executeUpdate(cmd);
}
/**Retorna o número de linha de consutadas no banco de dados. */
public int getNumeroLinha()throws IllegalStateException{
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);return numeroLinha;
}
/**Retorna o número de colunas selecionadas no banco de dados. */
public int getNumeroColuna() throws SQLException,IllegalStateException,NullPointerException {
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);if(metaData == null) throw new NullPointerException("Nenhuma query foi efetuada ainda"); return metaData.getColumnCount();
}
/**Retorna o nome da coluna de acordo com o indice especificado. */
public String getNomeColuna(int coluna) throws SQLException,IllegalStateException {
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);if(metaData == null) throw new NullPointerException("Nenhuma query foi efetuada ainda"); return metaData.getColumnName(coluna);
}
/**Retorna um objeto Class para a coluna indicada. */
public Class getColunaClass(int coluna) throws SQLException,ClassNotFoundException,IllegalStateException {
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);if(metaData == null) throw new NullPointerException("Nenhuma query foi efetuada ainda"); return Class.forName(metaData.getColumnClassName(coluna));
}
/**Retorna um Object para o valor do banco de dados especificado pela linha e coluna. */
public Object getValor(int linha, int coluna) throws SQLException,IllegalStateException {
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);if(metaData == null) throw new NullPointerException("Nenhuma query foi efetuada ainda"); resultSet.absolute(linha); return resultSet.getObject(coluna);
}
public InputStream getAsii(int index) throws SQLException {
return resultSet.getAsciiStream(index);
}/**Retorna um int representando o tipo de dado SQL da coluna. */
public int getTipoColuna(int coluna) throws SQLException {
return metaData.getColumnType(coluna);
}/**Fecha a conexão com o banco de dados. */
public void fecheConnection() throws SQLException,IllegalStateException {
if(!conexaoComDataBase)
throw new IllegalStateException(“Conexão com Banco de Dados Fechada”);conexao.close(); execut.close(); conexaoComDataBase = false;
}
/*Retorna o objeto Connection com a conexão de banco de dados/
public Connection getConexao() {
return conexao;
}public void setConexao(Connection conexao) {
this.conexao = conexao;
}/**Retorna true se conectado com banco de dados */
public boolean isConectadoComDataBase() {
return (!conexaoComDataBase) ? false : true;
}public Statement getExecut() {
return execut;
}public void setExecut(Statement execut) {
this.execut = execut;
}public ResultSetMetaData getMetaData() {
return metaData;
}public void setMetaData(ResultSetMetaData metaData) {
this.metaData = metaData;
}public ResultSet getResultSet() {
return resultSet;
}public void setResultSet(ResultSet resultSet) {
this.resultSet = resultSet;
}
}//fim da class[/code]