Erro em consulta SQL

[code]/*

  • DiarioConsumo.java
  • Created on 23 de Maio de 2006, 13:59
  • To change this template, choose Tools | Template Manager
  • and open the template in the editor.
    */

/**
*

  • @author Fernando Silva
    /
    import java.sql.
    ;

public class DiarioConsumo {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/cmufatual";

/** Creates a new instance of DiarioConsumo */
public static void main(String args []) throws ClassNotFoundException {
    
    
    Connection connection = null;
    Statement statement = null;
String carga = "15";
String data = "2001-01-02";
String local = "cemig";

double valorT = 0;
String cargaSQLF = null;
String dataSQLF = null;
String localSQLF = null;
//conversao de strings
cargaSQLF = carga;
dataSQLF = data;
localSQLF = local;

if(carga == null ||data == null ||local == null )
{
    cargaSQLF = "15";
    dataSQLF = "2001-01-02";
    localSQLF = "cemig";
}

try
{
    Class.forName(JDBC_DRIVER);
    connection = DriverManager.getConnection(DATABASE_URL,"root","*****");
    statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("SELECT valor FROM cemig WHERE carga = 15 AND data = 2001-01-02");
   
    while(resultSet.next()){
         valorT += resultSet.getDouble("valor");
    
        System.out.printf("valor total é: %s", valorT);
    }
}

catch (SQLException sqlException )
{
    sqlException.printStackTrace();
}
}
}

[/code]
E nada está ocorrendo quando rodo o programa, minha intenção era que aparecesse o valor total da consulta, ??? Obrigado!!

Opa,

por alto vi o problema de sintaxa na tua consulta, faltou aspas simples entre o valor da data:

:okok:

Noh Marcos valeu mesmo, exatamente oque você falou, faltava as benditas aspas simples. Outra dúvida se esses valores ‘carga’ e ‘data’ vierem de uma String, tipo String carga = request.getParameter(“carga”) eu preciso converter essa String em comparação com uma String SQLFomated.
String cargaSQLF = null;
String carga = request.getParameter(“carga”);
cargaSQLF = carga;
ResultSet resultSet = statement.executeQuery(“SELECT valor FROM cemig WHERE carga = ‘cargaSQLF’ AND data = ‘dataSQLF’”);
Essa seria a forma correta de realizar essa consulta?
Obrigado![/b]

Opa,

Funciona sim. Mas tenho uma sugestão para você, tente usar preparedStatement, dê uma olhada na sua api, vai facilitar tua vida.

:okok:

[code]/*

  • DiarioConsumoTest.java
  • Created on 24 de Maio de 2006, 13:59
  • To change this template, choose Tools | Template Manager
  • and open the template in the editor.
    */

/**
*

  • @author Fernando Silva
    /
    import java.sql.
    ;

public class DiarioConsumoTest {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/cmufatual";

/** Creates a new instance of DiarioConsumo */
public static void main(String args []) throws ClassNotFoundException {
    
    
    Connection connection = null;
    Statement statement = null;
/**String carga = "15";
String data = "2001-01-02";
String local = "cemig";*/

double valorFaseA = 0;
double valorFaseB = 0;
double valorFaseC = 0;
//String cargaSQLF = null;
//String dataSQLF = null;
//String localSQLF = null;
String cargaFaseA = "0";
String cargaFaseB = "0";
String cargaFaseC = "0";
String nome = "Elevadores";
//conversao de strings
/**cargaSQLF = carga;
dataSQLF = data;
localSQLF = local;

if(carga == null ||data == null ||local == null )
{
    cargaSQLF = "15";
    dataSQLF = "2001-01-02";
    localSQLF = "cemig";
}*/

try
{
    Class.forName(JDBC_DRIVER);
    connection = DriverManager.getConnection(DATABASE_URL,"root","*****");
    Statement statement1 = connection.createStatement();
    Statement statement2 = connection.createStatement();
    Statement statement3 = connection.createStatement();
    Statement statement4 = connection.createStatement();
    Statement statement5 = connection.createStatement();
    Statement statement6 = connection.createStatement();
    ResultSet resultSet = statement1.executeQuery("SELECT autocod FROM carga WHERE fase = 'A' AND nome = 'Elevadores'");
    ResultSet resultSet2 = statement2.executeQuery("SELECT autocod FROM carga WHERE fase = 'B' AND nome = 'Elevadores'");
    ResultSet resultSet3 = statement3.executeQuery("SELECT autocod FROM carga WHERE fase = 'C' AND nome = 'Elevadores'");
    while(resultSet.next()){
    cargaFaseA += resultSet.getString("autocod");
    }
    while(resultSet2.next()){
    cargaFaseB += resultSet2.getString("autocod");
    }
    while(resultSet3.next()){
    cargaFaseC += resultSet3.getString("autocod");
    }
    System.out.printf("cargaFaseA:%s\ncargaFaseB:%s\ncargaFaseC:%s\n",cargaFaseA, cargaFaseB, cargaFaseC);

//------------>ERRO começa Aqui<----------

    ResultSet resultSetFaseA = statement4.executeQuery&#40;&quot;SELECT valor FROM cemig WHERE carga = 'cargaFaseA' AND data = '2001-01-02'&quot;&#41;;
    ResultSet resultSetFaseB = statement5.executeQuery&#40;&quot;SELECT valor FROM cemig WHERE carga = 'cargaFaseB' AND data = '2001-01-02'&quot;&#41;;
    ResultSet resultSetFaseC = statement6.executeQuery&#40;&quot;SELECT valor FROM cemig WHERE carga = 'cargaFaseC' AND data = '2001-01-02'&quot;&#41;;
    while&#40;resultSetFaseA.next&#40;&#41;&#41;&#123;
        valorFaseA += resultSetFaseA.getDouble&#40;&quot;valor&quot;&#41;;
    &#125;
    while&#40;resultSetFaseB.next&#40;&#41;&#41;&#123;
        valorFaseB += resultSetFaseB.getDouble&#40;&quot;valor&quot;&#41;;
    &#125;
    while&#40;resultSetFaseC.next&#40;&#41;&#41;&#123;
        valorFaseC += resultSetFaseC.getDouble&#40;&quot;valor&quot;&#41;;
    &#125;
    System.out.printf&#40;&quot;valor total na Fase A é&#58; %s\n&quot;, valorFaseA&#41;;
    System.out.printf&#40;&quot;valor total na Fase B é&#58; %s\n&quot;, valorFaseB&#41;;
    System.out.printf&#40;&quot;valor total na Fase C é&#58; %s\n&quot;, valorFaseC&#41;;
&#125;

catch &#40;SQLException sqlException &#41;
&#123;
    sqlException.printStackTrace&#40;&#41;;
&#125;
&#125;
&#125;

[/code]
E ele sempre retorna o valor ZERO para valor total na fase A, fase B e fase C. Parece que há um problema na segunda parte de consulta SQL apartir do statement4, não aponta erro de código nem SQL no Netbeans, mas a consulta não é realizada. Da forma que a String está concatenada no código SQl, ele não reconhece. Qual a forma certa de inserir Strings em comandos SQL?
Obrigado!

Bao Tarde,

Meu estou numa situação um pouco pior estou com um projeto que de inicio vou só fazer alguns relatorios algumas queries em sql só que eu conheço pouco,

vc sabe onde posso procurar alguns artigos sobre o mesmo,

Agradeço…

alxandresr, conhece pouco de SQL ou JAVA? que tipo de artigo você quer?

[code]String cargaN = "Elevadores";
String cargaFaseA = "0";
try
{
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL,"root","******");

    PreparedStatement VfaseA = connection.prepareStatement&#40;&quot;SELECT autocod FROM carga WHERE fase = 'A' AND nome = ?&quot;&#41;;
    VfaseA.setString&#40;1,&quot;cargaN&quot;&#41;;
    VfaseA.executeQuery&#40;&#41;;
    
    ResultSet rs = VfaseA.executeQuery&#40;&#41;;
    while&#40;rs.next&#40;&#41;&#41;&#123;
    cargaFaseA += rs.getString&#40;&quot;autocod&quot;&#41;;
&#125;
    System.out.printf&#40;&quot;O valor da carga na fase A é&#58;%s&quot;, cargaFaseA&#41;;
&#125;

catch &#40;SQLException sqlException &#41;
&#123;
    sqlException.printStackTrace&#40;&#41;;
&#125;[/code]

não estou conseguindo enviar a bendita String para a consulta SQL, sempre me retorna o valor 0(zero), sendo que quando substituo “?” por Elevadores direto me retorna o valor certo. Pq da falha no código?
Obrigado!
Problema resolvido, na seguinte linha:
VfaseA.setString(1,“cargaN”);
O correto seria:
VfaseA.setString(1, cargaN );
Agora surge outra dúvida como enviar uma String para o SQL, onde essa String é o nome da tabela ou seja vem antes do WHERE.
PreparedStatement QfaseA = connection.prepareStatement(“SELECT valor FROM ? WHERE carga = ? AND data = ?”);
O grande erro que ele envia o nome da tabela como parametro SQL ou seja entre ''aspas simples, resultando em erro de sintaxe.[/i]