Consulta no MySQL pelo NetBeans

Estou fazendo um TCC em NetBeans, onde estou montando um Quiz, de perguntas e respostas. Ja fiz a conexão com o banco de dados, onde trabalho com apenas um form. Só que esse form tem que trabalhar com três níveis: fácil, médio e difícil. Porém, ele só faz a conexão com o banco se eu colocar na query o seguinte:

String query = “Select * from facil where id = '” +pontos.id+"’";

No caso acima, ele pegaria somente as questões da tabela facil. Só que se eu fiz o seguinte: criei uma variavel tipo String chamada nivel, na classe pontos, que armazena o nivel e busca no banco a tabela correspondente. Então, na query fiz o seguinte:

String query = “Select * from '”+pontos.nivel+"’ where id = ‘" +pontos.id+"’";

Mas na execução do programa, ele executa apenas o form, sem a conexão com o banco. Alguém podria me indicar o erro?

Grande abraço e obrigada!

Olá Suellen,

Pelo que entendi da sua pergunta, pela lógica está certo, pois na execução, seria feita a substituição da tua variável pontos.nivel pelo nome respectivo da tabela referente ao nível.

Tu terias como postar o teu código? Talvez tu tenhas algum problema em termos de sintaxe.

pq vc não faz um tabela única em vez de criar uma tabela de cada nivel?
vc poderia criar uma tabela única e colocar uma coluna a mais chamada “nivel” onde o valor poderia ser 1, 2 ou 3
1 =facil
2 = médio
3 = difícil

outra coisa… usa Prepared Statements em vez de usar concatenação de strings pra montar a query.

o select ficaria assim daeh:

PreparedStatement stm = con.prepareStatement("Select * from quiz where id = ? and nivel = ?");
stm.setLong(1, 10); // coloque o id
stm.setInt(2, 1); // 1= facil

Edit: Ainda, como é um TCC, vc poderia criar uma arquitetura que usasse hibernate na tua app, deixando pra ele essa parte de criação e gerenciamento de conexoes, além de facilitar as consultas
[]s

Respondendo a primeira resposta, da pra enviar o código sim, pois acho que é um pequeno erro, porque não esta dificil resolver.

E respondendo a segunda resposta,não tem como por tudo em uma tabela, pois cada pergunta tem 4 alternativas mais a resposta correta. Se colocasse em uma tabela só iria bagunçar muito, pois teria que selecionar as perguntas, alternativas e resposas específicas de cada nível.

Se não houver problema em postar o código, coloca ele aí pra nós :slight_smile:

ta ai o código:

[code]@SuppressWarnings(“unchecked”)
public void atualizaCampo(){
if(BD.getConnection())
{

            try
            {                  
                 String query = "Select * from '" +pontos.nivel+"' where id = '" +pontos.id+"'";
                 BD.setResultSet(query);
                 while (BD.resultSet.next())
                 {
                     pergunta=(BD.resultSet.getString("pergunta"));
                     alt1=(BD.resultSet.getString("alt1"));
                     alt2=(BD.resultSet.getString("alt2"));
                     alt3=(BD.resultSet.getString("alt3"));
                     alt4=(BD.resultSet.getString("alt4"));
                     resposta=(BD.resultSet.getString("resposta"));
                     cont=(BD.resultSet.getInt("id"));
                 }
                 if (cont!=pontos.id){                      
                     JOptionPane.showMessageDialog(null, "Fim de Jogo");                                                                      
                     this.dispose();
                     new recordes().setVisible(true);                        
                 }
            }
            catch(java.lang.Exception ex)
            {
                ex.printStackTrace();
            }
           }

}[/code]

o código acima é o da conexão, ja o do botão responder, do form da pergunta esta assim:

[code]private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

if(jRadioButton1.isSelected()){
if (jRadioButton1.getText().equals(resposta))
{
    pontos.ponto=pontos.ponto+1;
    JOptionPane.showMessageDialog(null, "Resposta Correta");
}else{
     JOptionPane.showMessageDialog(null, "Resposta Incorreta");
}
    
}

if(jRadioButton2.isSelected()){
if (jRadioButton2.getText().equals(resposta))
{
    pontos.ponto=pontos.ponto+1;
    JOptionPane.showMessageDialog(null, "Resposta Correta");
}else{
     JOptionPane.showMessageDialog(null, "Resposta Incorreta");
}
    
}

if(jRadioButton3.isSelected()){
if (jRadioButton3.getText().equals(resposta))
{
    pontos.ponto=pontos.ponto+1;
    JOptionPane.showMessageDialog(null, "Resposta Correta");
}else{
     JOptionPane.showMessageDialog(null, "Resposta Incorreta");
}
    
}

if(jRadioButton4.isSelected()){
if (jRadioButton4.getText().equals(resposta))
{
    pontos.ponto=pontos.ponto+1;
    JOptionPane.showMessageDialog(null, "Resposta Correta");
}else{
     JOptionPane.showMessageDialog(null, "Resposta Incorreta");
}
    
}
pontos.id++;
new NewJFrame().setVisible(true);
this.dispose();

} [/code]

e a classe pontos.java possui as seguintes variaveis:

public class pontos { public static int ponto=0, id=1; public static String nivel="", nome=""; }

[quote=Suellen_Susu]Respondendo a primeira resposta, da pra enviar o código sim, pois acho que é um pequeno erro, porque não esta dificil resolver.

E respondendo a segunda resposta,não tem como por tudo em uma tabela, pois cada pergunta tem 4 alternativas mais a resposta correta. Se colocasse em uma tabela só iria bagunçar muito, pois teria que selecionar as perguntas, alternativas e resposas específicas de cada nível.[/quote]

as estruturas das tabelas (colunas) são diferentes?
nao vejo por que ficaria bagunçado… a menos que a estrutura de cada tabela (facil, medio, difícil) seja bem diferente.

posta o código e se possível, os create tables… :slight_smile:

[]s

esta é o código do form principal, que é o menu:

[code]private void jCheckBoxMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

new NewJFrame().setVisible(true);
pontos.nivel="facil";
this.dispose();

}

private void jCheckBoxMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
new NewJFrame().setVisible(true);
pontos.nivel=“medio”;
this.dispose();
}

private void jCheckBoxMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
new NewJFrame().setVisible(true);
pontos.nivel=“dificil”;
this.dispose();
} [/code]

ja das tabelas (como MySQL) está assim:

[code]CREATE DATABASE /!32312 IF NOT EXISTS/ quiz;
USE quiz;


– Table structure for table quiz.dificil

DROP TABLE IF EXISTS dificil;
CREATE TABLE dificil (
id int(10) unsigned NOT NULL auto_increment,
alt1 varchar(200) NOT NULL default ‘’,
alt2 varchar(200) NOT NULL default ‘’,
alt3 varchar(200) NOT NULL default ‘’,
alt4 varchar(200) NOT NULL default ‘’,
resposta varchar(200) NOT NULL default ‘’,
pergunta varchar(500) NOT NULL default ‘’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


– Dumping data for table quiz.dificil

/*!40000 ALTER TABLE dificil DISABLE KEYS /;
INSERT INTO dificil (id,alt1,alt2,alt3,alt4,resposta,pergunta) VALUES
(1,‘preocupa?§?£o com a objetividade’,‘irracionalismo’,‘volta ao passado’,‘moralismo’,‘preocupa?§?£o com a objetividade’,‘O realismo foi um movimento de:’),
(2,‘reprodutor’,‘produtor’,‘aut?³trofo’,‘heter?³trofo’,‘aut?³trofo’,‘Seres vivos (plantas) que produzem seu pr?³prio alimento s?£o chamados de:’),
(3,‘a rela?§?£o que vai existir entre as palavras de l?­ngua’,‘o sentido que a palavra possu?­’,‘palavras que comp?µe o idioma’,‘palavra que possu?­ duplo sentido’,‘a rela?§?£o que vai existir entre as palavras da l?­ngua’,‘Podemos definir sintaxe, em L?­ngua Portuguesa, como:’);
/
!40000 ALTER TABLE dificil ENABLE KEYS */;


– Table structure for table quiz.facil

DROP TABLE IF EXISTS facil;
CREATE TABLE facil (
id int(10) unsigned NOT NULL auto_increment,
alt1 varchar(200) NOT NULL default ‘’,
alt2 varchar(200) NOT NULL default ‘’,
alt3 varchar(200) NOT NULL default ‘’,
alt4 varchar(200) NOT NULL default ‘’,
resposta varchar(200) NOT NULL default ‘’,
pergunta varchar(500) NOT NULL default ‘’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


– Dumping data for table quiz.facil

/*!40000 ALTER TABLE facil DISABLE KEYS /;
INSERT INTO facil (id,alt1,alt2,alt3,alt4,resposta,pergunta) VALUES
(1,‘Brasil’,‘Argentina’,‘It???lia’,‘Fran??§a’,‘Brasil’,‘Qual pa??­s ??© treta campe??£o mundial de futebol’),
(2,‘8’,‘4’,‘6’,‘2’,‘4’,‘Qual a raiz quadrada de 16’),
(3,‘Alemanha’,‘Espanha’,‘Brasil’,‘Africa do Sul’,‘Africa do Sul’,‘Qual o pa??­s sede da copa do mundo de 2010’);
/
!40000 ALTER TABLE facil ENABLE KEYS */;


– Table structure for table quiz.medio

DROP TABLE IF EXISTS medio;
CREATE TABLE medio (
id int(10) unsigned NOT NULL auto_increment,
alt1 varchar(200) NOT NULL default ‘’,
alt2 varchar(200) NOT NULL default ‘’,
alt3 varchar(200) NOT NULL default ‘’,
alt4 varchar(200) NOT NULL default ‘’,
resposta varchar(200) NOT NULL default ‘’,
pergunta varchar(500) NOT NULL default ‘’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


– Dumping data for table quiz.medio

/*!40000 ALTER TABLE medio DISABLE KEYS /;
INSERT INTO medio (id,alt1,alt2,alt3,alt4,resposta,pergunta) VALUES
(1,‘As crian?§as chegaram em casa.’,‘Pedro e Jo?£o s?£o muito amigos.’,‘Roubaram meu carro novo.’,‘Comprei doces aos alunos.’,‘Comprei doces aos alunos.’,‘O sujeito oculto ou impl?­cito pode ser encontrado na frase:’),
(2,‘Darwinista’,‘Lamarkista’,‘Evolucionista’,‘N.D.A’,‘Lamarkista’,‘A “lei do uso e desuso”, ?© uma teoria:’),
(3,‘matriz linha’,‘matriz coluna’,‘diagonal secund??ria’,‘diagonal principal’,‘diagonal principal’,‘Numa matriz, os elementos aij tais que i=j formam a:’);
/
!40000 ALTER TABLE medio ENABLE KEYS */;


– Table structure for table quiz.recordes

DROP TABLE IF EXISTS recordes;
CREATE TABLE recordes (
id int(10) unsigned NOT NULL auto_increment,
nome varchar(45) NOT NULL default ‘’,
nivel varchar(10) NOT NULL default ‘’,
pontuacao int(10) unsigned NOT NULL default ‘0’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
[/code]

o erro está nessa linha:

String query = "Select * from '"+pontos.nivel+"' where id = '" +pontos.id+"'"; 

tem que ser:

String query = "Select * from " + pontos.nivel + " where id = " +pontos.id; 

sem as aspas simples. aspas simples vc coloca apenas em varchars (string).

mas repito… vc pode fazer melhor :slight_smile:

edit: teu modelo de banco não tá otimizado. vc possui tres tabelas exatamente iguais, apenas com nomes diferentes :slight_smile:
poderia, sim, criar apenas mais uma coluna “nivel”. não bagunçaria nada teu código. :wink:
Edit 2: com hibernate, vc faria esse quiz em poucas horas :slight_smile:
[]s

[quote=sf.marcius]o erro está nessa linha:

String query = "Select * from '"+pontos.nivel+"' where id = '" +pontos.id+"'"; 

tem que ser:

String query = "Select * from " + pontos.nivel + " where id = '" +pontos.id+"'"; 

sem as aspas simples em volta do nome da tabela

mas repito… vc pode fazer melhor :slight_smile:

edit: teu modelo de banco não tá otimizado. vc possui tres tabelas exatamente iguais, apenas com nomes diferentes :slight_smile:
poderia, sim, criar apenas mais uma coluna “nivel”. não bagunçaria nada teu código. :wink:
[]s
[/quote]

Concordo com o sf.marcius, de fato, tu poderia otimizar o teu banco :wink:

omuito obrigrada pelos “avisos”, mas não posso enrrolar muito com o TCC, tenho que entregá-lo começo de Junho! e a respeito dee tirar as aspas simples,~não deu certo, pois esta ocorrendo o mesmo erro!

eu tinha editado a msg…
vc tem que tirar as aspas do pontos.id também, pois pontos.id é int

olha a msg de cima de novo

qquer coisa, manda o texto da exceção…

Desculpe a pergunta, mas vc está fazendo a chamada da conexão com o banco no seu form?

init: deps-jar: compile-single: run-single: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where id = '1'' at line 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) at com.mysql.jdbc.Connection.execSQL(Connection.java:3250) at com.mysql.jdbc.Connection.execSQL(Connection.java:3179) at com.mysql.jdbc.Statement.executeQuery(Statement.java:1207) at BD.setResultSet(BD.java:91) at NewJFrame.atualizaCampo(NewJFrame.java:40) at NewJFrame.<init>(NewJFrame.java:23) at menu.jCheckBoxMenuItem1ActionPerformed(menu.java:180) at menu.access$100(menu.java:16) at menu$2.actionPerformed(menu.java:86) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:291) at javax.swing.AbstractButton.doClick(AbstractButton.java:357) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266) at java.awt.Component.processMouseEvent(Component.java:6134) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5899) at java.awt.Container.processEvent(Container.java:2023) at java.awt.Component.dispatchEventImpl(Component.java:4501) at java.awt.Container.dispatchEventImpl(Container.java:2081) at java.awt.Component.dispatchEvent(Component.java:4331) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895) at java.awt.Container.dispatchEventImpl(Container.java:2067) at java.awt.Window.dispatchEventImpl(Window.java:2458) at java.awt.Component.dispatchEvent(Component.java:4331) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) java.lang.NullPointerException at NewJFrame.atualizaCampo(NewJFrame.java:41) at NewJFrame.<init>(NewJFrame.java:23) at menu.jCheckBoxMenuItem1ActionPerformed(menu.java:180) at menu.access$100(menu.java:16) at menu$2.actionPerformed(menu.java:86) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:291) at javax.swing.AbstractButton.doClick(AbstractButton.java:357) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266) at java.awt.Component.processMouseEvent(Component.java:6134) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5899) at java.awt.Container.processEvent(Container.java:2023) at java.awt.Component.dispatchEventImpl(Component.java:4501) at java.awt.Container.dispatchEventImpl(Container.java:2081) at java.awt.Component.dispatchEvent(Component.java:4331) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895) at java.awt.Container.dispatchEventImpl(Container.java:2067) at java.awt.Window.dispatchEventImpl(Window.java:2458) at java.awt.Component.dispatchEvent(Component.java:4331) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)

Desculpe a pergunta, mas vc está fazendo a chamada da conexão com o banco no seu form?

respondendo a pergunta, sim, a conexão é feita no form de pergunta.

como eu disse antes, eu tinha editado a msg anterior pois vi que pontos.id é int…
sendo assim, vc tem que tirar as aspas do pontos.id também

String query = "Select * from " + pontos.nivel + " where id = " +pontos.id; 

se for as aspas simples, ñ é, pois ñ deu certo d novo…

Tecnicamente, seu id é um int. Tente tirar as aspas simples:

String query = "Select * from " +pontos.nivel+" where id = " +pontos.id;