Consulta SQL nativa
28/07/2014 14:59
0
Olá, alguém sabe como realizar uma consulta SQL no Grails sem usar HQL, usando linguagem SQL padrão?



Tags: sql, padrão, hql


0
Eu sei. Basta injetar o datasource no seu service e tratá-lo como um datasource padrão do Java.


class ServiceBrutoService {
def dataSource

def consultas() {
def connection = dataSource.getConnection();
//jdbc normal pra baixo
}
}


0
Lembre-se de que assim você vai estar bypassando direto o Hibernate.


0
Tem algum exemplo de como utilizar um service? Eu não criei nenhum service ainda.
28/07/2014 15:31


0
Na hora de chamar o método eu fiz assim (em um controller):

def teste = {
def meuService
def resultado = meuService.consultaTeste()

}


Cannot invoke method consultaTeste() on null object. Stacktrace follows:
Message: Cannot invoke method consultaTeste() on null object



Meu service para teste:

class ComissaoRelatorioService {

def consultaComissaoRelatorio() {
return "Teste"
}

def serviceMethod() {

}
}
28/07/2014 15:41


0
Correção: No código anterior o nome da função é este:

def consultaTeste() {
return "Teste"
}
28/07/2014 15:42


0
Olá Evaldo,
Se sua classe de serviço se chama "ComissaoRelatorioService" no seu controller vc tem que colocar

def teste = {
def comissaoRelatorioService
def resultado = comissaoRelatorioService.consultaTeste()
}

o método "consultaTeste()" deve estar implementado em "ComissaoRelatorioService"
Outra coisa, seu service está em grails-app/services?
28/07/2014 17:06


0
Evaldo,

o ideal é injetar o datasource no serviço pois lá você consegue isolar sua classe de negócio.

No entanto, você também pode injetar nos seus controladores, como no código a seguir:


class ControladorExemploController {
def dataSource

def metodo() {
// obtenha a conexão através do objeto dataSource com getConnection()
// em seguida use código JDBC pdarão.
}
}


-6
Só corrigindo o erro na hora de inserir aqui no fórum o nome dos objetos, o Dyego Mota se apegou a um erro que cometi na hora de renomear as coisas por aqui.

Segue novamente.

O SERVICE:
class ComissaoRelatorioService {
def meuService() {
return "Teste"
}
}

Na hora de chamar o método eu fiz assim (em um controller):
def teste = {
def meuService
def resultado = meuService.consultaTeste()
}

Cannot invoke method consultaTeste() on null object. Stacktrace follows:
Message: Cannot invoke method consultaTeste() on null object


Henrique, independente de onde esteja o datasource, eu ainda nem usei o datasource e o simples código acima já não funciona.


O que está errado?


Tenho sentido esta dificuldade toda vez que posto aqui no Grails Brasil, existe mais filosofia do que prática, dificilmente uma resposta às minhas dúvidas foi respondida de forma clara, o que dá a entender é que ninguém sabe como a coisa funciona e ficam chutando.

Se prendem a erro de digitação ou uma falha na hora de expor o problema do que responder sobre o problema em si. Qualquer um perceberia que eu esqueci de trocar o nome do método na hora de postar, aí se prendem a isto.

Porque estou dizendo isso? Porque NENHUMA dúvida minha postada aqui no Grails Brasil foi respondida de forma "consciente" até hoje.

E olha que não fiz nem 10 perguntas aqui.

Atenciosamente,

Evaldo Wolkers.
29/07/2014 08:19


1
Bom Evaldo,

antes de você soltar os cachorros em cima de nós baseado em suas frustrações, vamos dar uma olhada no código que você nos forneceu?

O problema está no modo como você está "injetando" o serviço nos seus exemplos: repare no código que você nos enviou:


def teste = {
def meuService
def resultado = meuService.consultaTeste()
}


Este "def meuService" deve ser declarado no escopo da classe, não do método. Por isto você topa com um nullpointerexception.

Sobre a consulta usando o dataSource para executar código nativo via JDBC. Basta proceder da mesma forma. Se você declara def meuService dentro de um método, ele vai ser interpretado como uma variável do método, não como um atributo da classe.


Sobre susa respostas aqui no Grails Brasil. Observei o seu histórico e vi que não é verdade o que você diz. Na realidade, a esmagadora maioria dos seus problemas foi respondido. A idéia aqui é ajudar MUTUALMENTE, e ninguém é obrigado a te responder, lembre-se disto.

A questão não é "haver mais Filosofia do que prática", mas sim buscar entender o problema. Jà parou pra pensar que talvez seja VOC? que não esteja conseguindo expressar direito suas dificuldades?

Aliás, curioso: em diversas das suas "demandas" aqui no Grails Brasil, você diz que chegou a uma solução mas até agora não compartilhou nenhuma. Já parou pra pensar na razão pela qual isto aqui se chama comunidade e não "serviço gratuito para o Sr. Evaldo"?


2
Olá Evaldo,
Assim como você "cometeu um erro na hora de renomear as coisas por aqui", eu também cometí um erro na hora de te responder e coloquei o "def comissaoRelatorioService" no lugar errado, me atentei para seu erro na nomeclatura e a definição do service no lugar errado passou batido, mas daí vc vir e dizer que "não sei como as coisas funcionam e fico chutando" vc só pode estar de brincadeira...
A sua dúvida de "como realizar uma consulta SQL no Grails sem usar HQL, usando linguagem SQL padrão?" foi respondida 5min depois de vc te-la postado. Ai gerou a dúvida do service, que na verdade é super trivial e quem uma pesquisa simples na documentação do grails você resolveria: http://grails.org/doc/latest/guide/services.html#dependencyInjectionServices

Enfim, como disse Oscar Wilde: "Aqueles que não fazem nada estão sempre dispostos a criticar os que fazem algo."
29/07/2014 09:55


0
Kiko, não estou frustrado (a não ser com este fórum), e Dyego, não leve para o lado pessoal, não falei especificamente de você.

Apenas disse a verdade sobre minha experiência com o Grails Brasil, e sei que é fato que a verdade dói e deixa pessoas ressentidas.

Sem mais delongas, é fato que não obtive sucesso NEM resposta que me ajudassem ou fossem objetivas NENHUMA das vezes que apareci por aqui, já quando levo um assunto a fóruns de Java, aparentemente a conversa se desenrola de forma mais objetiva.

O sentimento que tenho realmente é este, de que o Grails realmente é algo muito novo para nós brasileiros, que ninguém conhece ele o bastante e que a única fonte de informação válida (mesmo que bem vaga também) é o próprio grails.org.

Pois algumas pessoas daqui buscam no Google resposta para dúvidas que coloquei aqui. Só que eu já fui no Google antes e já achei tais dicas (por exemplo) e não funcionaram, por isso postei aqui. Procurar no Google para responder a uma pergunta do fórum não leva a nada.

Acho que deveríamos buscar responder os problemas que realmente entendemos e que sabemos a solução, senão isso acaba virando um fórum que poderia mudar de nome para GRAILSfilosofiaBRASIL (fica a dica Kiko).

*Vou dar uma olhada nas novas respostas.

Atenciosamente,

Evado Wolkers.
29/07/2014 23:57


0
Kiko,

Sobre chegar a uma solução e não reportar vou rever o que fiz, mas pelo que lembro minha solução foi desistir e pular para uma outra linha de solução.

Como por exempplo o problema do SQL nativo, já desisti e estou usando de outra forma, então, não faz sentido eu colocar a solução aqui porque não tem nada mais com relação a SQL nativo.

ps.: Sobre ser um serviço gratuito ao Sr. Evaldo, não é somente nas poucas dúvidas que postei aqui que observei isto, mas eu já vi em outras dúvidas de outros usuários a mesma coisa, respostas vagas e que não são direcionadas ao problema em si.

Atenciosamente,

Evaldo Wolkers.
30/07/2014 00:00


0
Bom Kiko, Dyego e demais,

Acho que realmente o problema sou eu, talvez não tenha conseguido me expressar corretamente.

Neste momento não vou mais precisar usar o service e o SQL nativo, acabei usando hibernate mesmo, deixando de lado o SQL Nativo.

Eu queria aproveitar o SQL Nativo existente no sistema antigo, mas, como não consegui fazer o service funcionar acabei migrando as consultas para Hibernate (deu um trabalhão, mas consegui).

Se alguém tem uma ideia de como usar este conjunto (service/SQL Nativo) poderia criar algum post com algum exemplo, porque creio que seria útil para todos em caso de migração de sistemas antigos.

Obrigado.

Evaldo Wolkers.

30/07/2014 00:19



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto