SQL urgente, erro q não entendo!

6 respostas
zerokelvin

Pessoal, to numa correria pq preciso acertar isso até amanhã. A seguinte consulta maluca ao mysql:

select (select max(data_atual) from almoxarifado.saidafarmacia where medicamento=420 and usuario_sus=null) as ultimaDispensa, (select quantidade from almoxarifado.saidafarmacia where id=(select max(id) from almoxarifado.saidafarmacia where medicamento=420 and usuario_sus=null)) as ultimaQuantidade, u.nome, dosagem, dhm
, noite, (select lote, min(validade) from (select s2.lote, s2.item, s2.validade, sum(f.quantidade) as saidasFarmacia, s2.quantidade as qtdeEntradas from (select e.lote, s.quantidade, s.validade, item from almoxarifado.entrada e left join almoxarifado.saida s on s.id_entrada=e.id where local_aplicacao=53) s2 left joinalmoxarifado.saidafarmacia f on s2.lote=f.lote group by lote) as t where item=420) as lote from almoxarifado.item a inner join almoxarifado.unidademedida u on u.id=a.unidade_de_medida where a.id=420

funciona perfeitamente no phpmyadmin, mas qdo executa no java, o driver retorna o seguinte erro:

java.sql.SQLException: Operand should contain 1 column(s)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja

va:2113)

at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:

2275)

at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(Dele

gatingPreparedStatement.java:93)

at Servidor.DadosMedicamento(Porto.java:2332)

at Servidor.run(Porto.java:554)

Alguem manja? pq nao compreendo qual é esse operador… já até atualizei o driver do mysql, mas nao resolveu
valeu ae

6 Respostas

L

Acredito que o erro esteja em “usuario_sus=null”.
Em SQL não se compara nada com null usando o operador ‘=’.
O correto deveria ser “usuario_sus is null”.
Caso também queira verificar se um campo é diferente de nulo faça “campo is not null”.

R

Eu tmb estou iniciando no JAVA… quer dizer… iniciei ontem… dae peguei uns exemplos na internet pra mim aprender a compilar e tudo… dae peguei um codigo fonte de exemplo que seria esse.

class Olamundo {

public static void main(String[] args) {

System.out.println(Olá mundo!); //Imprime na tela

}

}

dae, crio ele no Bloco de notas, salvo ele com extensão .java.

compilo ele usando no DOS Javac Olamundo.java, ele cria normalmente o arquivo Olamundo.class,
so que quando digito Java Olamundo, ele dá um erro… Mas o Arquivo “Olamundo.class” ele cria nomal

exception in theard main java.lang.NoclassdefFoundError: Olamundo

caused by: java.lang.ClassNotFoundException: Olamundo

at java.net.URLClassLoader$1.Run<URLClassLoader.java:202>

at java.security.AcessController.doPrivileged<native Method>

at java.net.URLClassLoader.FindClass<URLClassLoader.java:190>

at java.lang.ClassLoader.LoaderClass<ClassLoader.java:307>

at sun.misc.Launcher$appClassLoarder.Loader.Class<launcher.java:301>

at java.lang.ClassLoader.LoaderClass<ClassLoader.java:240>

Could Not find the main class: Olamundo.    Program will exit

o que eu faço agora???

TheThis

Seu problema ocoreu pois não declarou a classe Olamundo como public.

Por favor, tente postar na área apropriada para sua dúvida. Este tópico é sobre SQL.

Espero ter ajudado, até mais.

AGAraujo

Meu brother que comando é este!!!

Vamos analisar:

Este código está correto!! Exceto pelo fato da comparação com NULL.
Para buscar uma melhor solução forneça mais informações: está usando hibernate ou jpa? O banco de dados é realmente o MySQL? etc…

zerokelvin

heheheeheh
é verdade, é um comando e tanto… e tenho outros bem maiores hahuahuahuahuhuahuahu

É mysql sim, tento utilizar o maximo do banco, por isso fico quebrando a cabeça com essas consultas. Penso eu que, criar varios statements e realizar várias consultas é mais lento q uma só, mesmo q um pouco mais complicada. Mas é uma boa coisa para se discutir, pq dizem q o mysql nao é tão rápido com inners join e tal

Valeu! era isso do operador! eu já tava cansado e nao conseguia ver!!!2

AGAraujo

Cabra…

utilizar subconsultas e principalmente aninhadas podem ser piores que os join.
O correto seria ter um Query Plan bem definido, ai criar indices e QUANDO NECESSÁRIO criar junções.

Acredite em muitos casos as SubConsultas são muito mais lenta que as junções.

E outra dependendo do tipo de aplicação isto pode se tornar um problema ainda maior devido a quantidade de dados retornados, sendo preferencial a utilização de LAZY LOAD.

Claro que isto é de diferente para cada projeto, então avalie bem…

Obs.: eu sou capaz de apostar que esta sua consulta será muito mais lenta que a utilização de JOINS (independente do banco de dados)

rsrs.

Boa Sorte

Criado 19 de setembro de 2010
Ultima resposta 20 de set. de 2010
Respostas 6
Participantes 5