Bom, no aplicativo que eu estou criando o usuario clica em uma letra e o aplicativo retorna os nomes cadastrados começados por aquela letra, no entanto não tenho ideia de como fazer pelo sqlite fazer essa busca.
Costumo usar o método query(distinct, tabela,colunas,seleção, seleçãoArgs, groupBy,orderBy).
Alguem teria ideia de como fazer isso?
edit: Devolveria apenas nomes começados com determinada letra.
se for local blz. Mas se não for, eu prefiro fazer uma busca geral, colocar em uma lista e depois ordenar no android mesmo.
Fica mais rapido porque se eu for mandar o comando no banco ele vai primeiro tratar depois ainda me enviar. Se usar 3g ai ja era, se for web ainda é melhor. É melhor nesse caso (se não for local) pois ele só vai fazer um select no banco e voltar.
se for local blz. Mas se não for, eu prefiro fazer uma busca geral, colocar em uma lista e depois ordenar no android mesmo.
Fica mais rapido porque se eu for mandar o comando no banco ele vai primeiro tratar depois ainda me enviar. Se usar 3g ai ja era, se for web ainda é melhor. É melhor nesse caso (se não for local) pois ele só vai fazer um select no banco e voltar.[/quote]
É local, irei testar a sugestão do HarleySeixas quando chegar em casa e respondo se deu certo ou não
public List<String> ordenarAlfabetico(Context context, char ordenarLetra){
//Cursor cursor=
// db.query(NOME_TABELA, new String[]{"nome"}, null, null, null,null,ordenarLetra);
Cursor cursor=
db.rawQuery("select nome,telefone from "+NOME_TABELA+" where nome like "+ordenarLetra+"% order by nome", null);
List<String> listaNomes=new ArrayList<String>();
if(cursor.moveToFirst()){
while (cursor.moveToNext()){
listaNomes.add(cursor.getString(0));
}
return listaNomes;
}
cursor.close();
return null;
}
Deu o seguinte erro
04-13 17:27:11.283: I/Database(565): sqlite returned: error code = 1, msg = near "order": syntax error
04-13 17:27:11.293: D/AndroidRuntime(565): Shutting down VM
04-13 17:27:11.293: W/dalvikvm(565): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
04-13 17:27:11.303: E/AndroidRuntime(565): FATAL EXCEPTION: main
04-13 17:27:11.303: E/AndroidRuntime(565): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.contatosmiguxo/com.example.contatosmiguxo.Principal}: android.database.sqlite.SQLiteException: near "order": syntax error: , while compiling: select nome,telefone from contatos where nome like A% order by nome
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.os.Looper.loop(Looper.java:123)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-13 17:27:11.303: E/AndroidRuntime(565): at java.lang.reflect.Method.invokeNative(Native Method)
04-13 17:27:11.303: E/AndroidRuntime(565): at java.lang.reflect.Method.invoke(Method.java:521)
04-13 17:27:11.303: E/AndroidRuntime(565): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-13 17:27:11.303: E/AndroidRuntime(565): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-13 17:27:11.303: E/AndroidRuntime(565): at dalvik.system.NativeStart.main(Native Method)
04-13 17:27:11.303: E/AndroidRuntime(565): Caused by: android.database.sqlite.SQLiteException: near "order": syntax error: , while compiling: select nome,telefone from contatos where nome like A% order by nome
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
04-13 17:27:11.303: E/AndroidRuntime(565): at com.example.contatosmiguxo.GerenciadorContatos.ordenarAlfabetico(GerenciadorContatos.java:28)
04-13 17:27:11.303: E/AndroidRuntime(565): at com.example.contatosmiguxo.Principal.onCreate(Principal.java:22)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-13 17:27:11.303: E/AndroidRuntime(565): ... 11 more
public List<String> ordenarAlfabetico(Context context, char ordenarLetra){
//Cursor cursor=
// db.query(NOME_TABELA, new String[]{"nome"}, null, null, null,null,ordenarLetra);
Cursor cursor=
db.rawQuery("select nome,telefone from "+NOME_TABELA+" where nome like "+ordenarLetra+"% order by nome", null);
List<String> listaNomes=new ArrayList<String>();
if(cursor.moveToFirst()){
while (cursor.moveToNext()){
listaNomes.add(cursor.getString(0));
}
return listaNomes;
}
cursor.close();
return null;
}
Deu o seguinte erro
04-13 17:27:11.283: I/Database(565): sqlite returned: error code = 1, msg = near "order": syntax error
04-13 17:27:11.293: D/AndroidRuntime(565): Shutting down VM
04-13 17:27:11.293: W/dalvikvm(565): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
04-13 17:27:11.303: E/AndroidRuntime(565): FATAL EXCEPTION: main
04-13 17:27:11.303: E/AndroidRuntime(565): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.contatosmiguxo/com.example.contatosmiguxo.Principal}: android.database.sqlite.SQLiteException: near "order": syntax error: , while compiling: select nome,telefone from contatos where nome like A% order by nome
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.os.Looper.loop(Looper.java:123)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-13 17:27:11.303: E/AndroidRuntime(565): at java.lang.reflect.Method.invokeNative(Native Method)
04-13 17:27:11.303: E/AndroidRuntime(565): at java.lang.reflect.Method.invoke(Method.java:521)
04-13 17:27:11.303: E/AndroidRuntime(565): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-13 17:27:11.303: E/AndroidRuntime(565): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-13 17:27:11.303: E/AndroidRuntime(565): at dalvik.system.NativeStart.main(Native Method)
04-13 17:27:11.303: E/AndroidRuntime(565): Caused by: android.database.sqlite.SQLiteException: near "order": syntax error: , while compiling: select nome,telefone from contatos where nome like A% order by nome
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
04-13 17:27:11.303: E/AndroidRuntime(565): at com.example.contatosmiguxo.GerenciadorContatos.ordenarAlfabetico(GerenciadorContatos.java:28)
04-13 17:27:11.303: E/AndroidRuntime(565): at com.example.contatosmiguxo.Principal.onCreate(Principal.java:22)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-13 17:27:11.303: E/AndroidRuntime(565): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-13 17:27:11.303: E/AndroidRuntime(565): ... 11 more
[/quote]
Faltou inserir aspas simples, toda consulta de campo texto precisa das aspas simples. Segue o código correto:
db.rawQuery("select nome,telefone from "+NOME_TABELA+" where nome like '"+ordenarLetra+"%' order by nome", null);