Problema Banco de Dados - Sqlite

Pessoal,

Estou com um problema no banco de dados do app que estou desenvolvendo.
Criei um edittext em tela para pesquisar os valores de alguns campos no banco de dados. Ao realizar a pesquisa recebo a mensagem: "java.lang.Illegal.Argument.Exception", field b4a.meuapp.conexao._meusql has type anywheresoftware.b4a.sql.SQL, got java.lang.String

Algumas coisas que observei:
O problema ocorre quando eu tento consultar as informações no banco. Achei que fosse porque a tabela estava vazia, mas, inseri registros e continuou ocorrendo
O textfield, está parametrizado para receber texto, então, como informei texto, está correto

Abaixo, está meu módulo de conexão com o banco. Tentei inicializar as variáveis meuSQL e meuCursor de outra forma, mas não consegui. Acredito que parte do problema está aqui, passei null para elas, mas, o erro também ocorre.


B4A=True
'Group=Default Group
ModulesStructureVersion=1
Type=StaticCode
version=7.8



Sub Process_Globals
Dim meuSQL As SQL
'Public final execute(java.lang.String sql)
Dim meuCursor As Cursor

'meuSQL = "java.lang.String"
meuSQL = ""
meuCursor = ""

End Sub

Sub Globals

End Sub

Sub ConexaoDB

Dim Conex_DB As String
Conex_DB=DBUtils.CopyDBFromAssets("MeuBanco.db")
meuSQL.Initialize(Conex_DB, "MeuBanco.db", True)
End Sub


E aqui, a consulta ao banco que é onde exatamente ocorre o erro, na linha Conexao.meuCursor

Sub ConsultarBanco


ListView_Produtos.Clear
Conexao.meuCursor = Conexao.meuSQL.ExecQuery("SELECT * FROM MinhaTabela")
For i = 0 To Conexao.meuCursor - 1
Conexao.meuCursor.Position = 1
ListView_Produtos.AddTwoLines(Conexao.meuCursor.GetString("Descricao"),Conexao.meuCursor.GetString("Resumo"))
Next
End Sub

Sub EditText_Pesquisar_EnterPressed
ConsultarBanco
End Sub

Uma observação: Criei o meu banco diretamente no SQLite (Db Browser for SQLite), mas, no meu projeto é demonstrada uma mensagem informando que o banco não está sendo utilizado. Como adiciono ele ao projeto?
File "MeuBanco.db' in Files folder was not added to the Files tab.

Alguém teria alguma idéia de como resolver?

Obrigada.
 
Last edited:

Xandoca

Active Member
Licensed User
Longtime User
Olá,

Alguns pontos:
1) Utilize ResultSet ao invés de Cursor (conforme indicado pelo Erel aqui
2) As linhas abaixo são incorretas e não necessárias, você deve removê-las ou comentá-las:
B4X:
meuSQL = ""
meuCursor = ""
3) File "MeuBanco.db' in Files folder was not added to the Files tab. asdf Vá na aba Files Manager e clique em Add Files para adicionar o MeuBanco.db
1591098212474.png

4) Segue um exemplo de SQLite que funciona
 

Attachments

  • 1.zip
    9.5 KB · Views: 290
Olá.
Alexandre, li os materiais, realizei alguns ajustes. Agora o banco de dados já está ok, está conectando e recebendo as instruções SQL.
Preciso somente entender o motivo de estar ocorrendo esse erro no meu "like".

O que eu preciso:
- obter o conteúdo digitado no EditText e passar esse conteudo para o banco
- retornar os campos selecionados e demonstrar em lista

Mas, há um problema no meu select quando passo o valor, pois, ocorre a mensagem: "near "&", syntax error(code 1 SQLITE_ERROR[1]), while compiling Select * From ...

Não sei como passar o valor do campo valorTexto para o sql...

Você teria alguma idéia do que está errado no meu código?

Obrigada.

ListView_Produtos.Clear

valorTexto = EditText_Pesquisar.Text
meuCursor = meuSQL.ExecQuery("SELECT * FROM Produto_Profissional WHERE Descricao_Servico = &valorTexto")

For i = 0 To meuCursor - 1
meuCursor.Position = 1
ListView_Produtos.AddSingleLine(meuCursor.GetString("Descricao_Servico"))
Next
 

Xandoca

Active Member
Licensed User
Longtime User
Olá.
Alexandre, li os materiais, realizei alguns ajustes. Agora o banco de dados já está ok, está conectando e recebendo as instruções SQL.
Preciso somente entender o motivo de estar ocorrendo esse erro no meu "like".

O que eu preciso:
- obter o conteúdo digitado no EditText e passar esse conteudo para o banco
- retornar os campos selecionados e demonstrar em lista

Mas, há um problema no meu select quando passo o valor, pois, ocorre a mensagem: "near "&", syntax error(code 1 SQLITE_ERROR[1]), while compiling Select * From ...

Não sei como passar o valor do campo valorTexto para o sql...

Você teria alguma idéia do que está errado no meu código?

Obrigada.

ListView_Produtos.Clear

valorTexto = EditText_Pesquisar.Text
meuCursor = meuSQL.ExecQuery("SELECT * FROM Produto_Profissional WHERE Descricao_Servico = &valorTexto")

For i = 0 To meuCursor - 1
meuCursor.Position = 1
ListView_Produtos.AddSingleLine(meuCursor.GetString("Descricao_Servico"))
Next
O Exemplo que eu te passei faz exatamente o que você precisa.
Reescreva a consulta para:
B4X:
"SELECT * FROM Produto_Profissional WHERE Descricao_Servico = " & valorTexto
Não vai ser um like pois você está usando "Descricao_Servico = "
Para like deveria ser algo do tipo:
B4X:
"SELECT * FROM Produto_Profissional WHERE Descricao_Servico like '%" & valorTexto & "%'"
No entanto recomendo você utilizar o ExecQuery2 que te permitir passar os parametros para a consulta ( o parametro vai no lugar do ?):
B4X:
    Dim query As String = "select * from Produto_Profissional where Descricao_Servico like ?"
    Dim rs As ResultSet = sql1.ExecQuery2(query, Array As String("%" & valorTexto & "%"))
 
O Exemplo que eu te passei faz exatamente o que você precisa.
Reescreva a consulta para:
B4X:
"SELECT * FROM Produto_Profissional WHERE Descricao_Servico = " & valorTexto
Não vai ser um like pois você está usando "Descricao_Servico = "
Para like deveria ser algo do tipo:
B4X:
"SELECT * FROM Produto_Profissional WHERE Descricao_Servico like '%" & valorTexto & "%'"
No entanto recomendo você utilizar o ExecQuery2 que te permitir passar os parametros para a consulta ( o parametro vai no lugar do ?):
B4X:
    Dim query As String = "select * from Produto_Profissional where Descricao_Servico like ?"
    Dim rs As ResultSet = sql1.ExecQuery2(query, Array As String("%" & valorTexto & "%"))

Entendi.
Da forma que você mostrou, ficou ok, identificou corretamente o parâmetro passado no SQL.

Porém, ainda não identifica a minha tabela. Desculpe tantas perguntas, sou iniciante e gostaria de fazer funcionar o banco para continuar desenvolvendo minhas próprias aplicações.
Criei a tabela via DB Browser, tentei criar novamente ela via código (Create Table) e diz que a tabela já existe, mas, não é possível identificar ela no código fonte. Apresenta o erro:

android.database.sqlite.SQLiteException: no such table: Produto_Profissional (code 1 SQLITE_ERROR[1]): , while compiling: SELECT * FROM Produto_Profissional WHERE Descricao_Servico = Consultoria
 

Xandoca

Active Member
Licensed User
Longtime User
Poderia compartilhar a app para eu dar uma olhada?
Basta zipar o diretório da app e anexar aqui
 

Xandoca

Active Member
Licensed User
Longtime User
Acho que dá para colocar em um Dropbox ou Google drive e compartilhar o link aqui. Já vi outras pessoas fazerem isso
 
Top