Ordenar resultado do SQLite por ordem alfabetica[RESOLVIDO]

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.

kmunga,

select
from
where like 'A%'
order by

Vai retornar todos os registros com A no inicio e ordernar pelo mesmo campo. Se tiver duvida é só postar.

Esse banco é local ou não?

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=denisspitfire]Esse banco é local ou não?

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 :smiley:

sim vai dar certo.

Se é local é melhor fazer desse jeito.

O codigo

	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

Faz isso :

     //database.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
       database.query("pessoas", new String[]{"nome"}, " id = ? ", String[]{"1"}, null, null, " nome ASC");

[quote=kmunga]O codigo

	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);

Harley, obrigado, realmente era esse pequeno erro.