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
/*
* 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