/*
* 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();
}
}
}
Erro em consulta SQL
F
6 Respostas
M
Opa,
por alto vi o problema de sintaxa na tua consulta, faltou aspas simples entre o valor da data:
:okok:
F
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]
M
Opa,
Funciona sim. Mas tenho uma sugestão para você, tente usar preparedStatement, dê uma olhada na sua api, vai facilitar tua vida.
:okok:
F
/*
* 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("SELECT valor FROM cemig WHERE carga = 'cargaFaseA' AND data = '2001-01-02'");
ResultSet resultSetFaseB = statement5.executeQuery("SELECT valor FROM cemig WHERE carga = 'cargaFaseB' AND data = '2001-01-02'");
ResultSet resultSetFaseC = statement6.executeQuery("SELECT valor FROM cemig WHERE carga = 'cargaFaseC' AND data = '2001-01-02'");
while(resultSetFaseA.next()){
valorFaseA += resultSetFaseA.getDouble("valor");
}
while(resultSetFaseB.next()){
valorFaseB += resultSetFaseB.getDouble("valor");
}
while(resultSetFaseC.next()){
valorFaseC += resultSetFaseC.getDouble("valor");
}
System.out.printf("valor total na Fase A é: %s\n", valorFaseA);
System.out.printf("valor total na Fase B é: %s\n", valorFaseB);
System.out.printf("valor total na Fase C é: %s\n", valorFaseC);
}
catch (SQLException sqlException )
{
sqlException.printStackTrace();
}
}
}
A
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…
F
alxandresr, conhece pouco de SQL ou JAVA? que tipo de artigo você quer?
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]
String cargaN = "Elevadores";
String cargaFaseA = "0";
try
{
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL,"root","******");
PreparedStatement VfaseA = connection.prepareStatement("SELECT autocod FROM carga WHERE fase = 'A' AND nome = ?");
VfaseA.setString(1,"cargaN");
VfaseA.executeQuery();
ResultSet rs = VfaseA.executeQuery();
while(rs.next()){
cargaFaseA += rs.getString("autocod");
}
System.out.printf("O valor da carga na fase A é:%s", cargaFaseA);
}
catch (SQLException sqlException )
{
sqlException.printStackTrace();
}
Criado 23 de maio de 2006
Ultima resposta 25 de mai. de 2006
Respostas 6
Participantes 3
Alura Sistemas operacionais: entenda seu conceito e suas funções Descubra o que são sistemas operacionais, suas funções e tipos. Aprenda tudo de forma clara e objetiva. Não perca tempo!
Casa do Codigo Orientacao a Objetos: Aprenda seus conceitos e suas... Por Thiago Leite e Carvalho — Casa do Codigo