[desarrolladores-android.com] Consulta con "Tildes" en SQLite

1,657 views
Skip to first unread message

Meison

unread,
Jun 12, 2012, 12:24:16 PM6/12/12
to desarrollad...@googlegroups.com
Hola a todos, 

En mi bd tengo un conjunto de registros cargados inicialmente con tilde, por ejemplo un campo nombre : Bendezú  mi problema viene cuando realizo la búsqueda por nombre, en un EditText ingreso "bendezú" y hago click en buscar y no me encuentra el registro sin embargo lo tengo almacenado, lo tengo hecho asi :

  public Client find(String name){

    long id = 0L;
    String sql = "select _id from Clients where upper(name) = ?";

    Cursor c = db.rawQuery(sql, new String[]{name.toUpperCase()});
     if(c.moveToFirst()){
          id= c.getLong(0);
     }

    if(!c.isClosed()){
          c.close();
    }

    return this.get(id);

  }


y con esto que tengo, no me devuelve el registro que tengo almacenado en mi bd.
Por favor, una manito si alguien sabe como abordar esto de una manera simple.


Gracias 


--
Armando Chirinos Paredes
((+511) 258 - 3564
((+511) 997 - 773937

Juan de Dios Maldonado Sánchez

unread,
Jun 12, 2012, 4:23:12 PM6/12/12
to desarrollad...@googlegroups.com
Busca sobre collation, sqlite y android
> <http://2.bp.blogspot.com/_YWqmXigxG9o/RsAYnsoFLeI/AAAAAAAAAcM/reD30TuIX98/s320/icono-movil.png>((+511) 258 - 3564
> <http://2.bp.blogspot.com/_YWqmXigxG9o/RsAYnsoFLeI/AAAAAAAAAcM/reD30TuIX98/s320/icono-movil.png>((+511) 997 - 773937
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
> Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
> Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
> Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.
>

--
An'Brain - Prueba el nuevo widget inteligente para tu Android.
Idiotizer Free - Idiotiza a tus amigos. (Se requieren auriculares)
Track My App - Realiza un seguimiento de tus aplicaciones en el Android market.

Meison

unread,
Jun 12, 2012, 4:29:01 PM6/12/12
to desarrollad...@googlegroups.com
Hola Juande, gracias por responder

Ya he buscado pero no encuentro una pagina que me diga como hacer esto, parece que no se pudiera 

En muchas pagina recomiendan crear una columna mas donde tenga estos datos sin la tilde, por ejemplo esta :

pero me parece una solucion muy trabajosa,  
Por favor, si alguien ha tenido este problema y lo ha solucionado, compartala por favor



Gracias

Juan de Dios Maldonado Sánchez

unread,
Jun 12, 2012, 4:40:49 PM6/12/12
to desarrollad...@googlegroups.com
Otra cosa que puede estar pasando es que la base de datos no la hayas creado con la codificación UTF8. En Android debería funcionar si creas la base de datos desde código y solo la tocas desde código. En cuanto utilices algún programa externo para editar la base de datos (maven?) la has liado.

Meison

unread,
Jun 12, 2012, 4:51:49 PM6/12/12
to desarrollad...@googlegroups.com
Estoy creando mi BD asi, donde deberia poner que esté en UTF-8 , no es acaso por defecto ? :

public class ManagerDB extends SQLiteOpenHelper { 

    public ManagerDB(Context contexto, String nombre,CursorFactory factory, int version) {
          super(contexto, nombre, factory, version);
    }    

    public static SQLiteDatabase getDatabaseConnection(Context c){
        return new ManagerDB(c, "emapping.sqlite", null, 1).getWritableDatabase();
   }


  @Override

   public void onCreate(SQLiteDatabase db) {

      FieldsTable.onCreate(db);
      ChemicalsTable.onCreate(db);    

     .. mas tablas ....

   }

}

Sobre maven, en este proyecto no lo uso Juande ..

Meison

unread,
Jun 19, 2012, 1:40:52 AM6/19/12
to desarrollad...@googlegroups.com

Me he encontrado con esto :
http://code.google.com/p/quickdroid/issues/detail?id=1

Es justo la explicación de mi problema, las funciones UPPER y LOWER solo trabajan con caracteres ASCII, esto se ve reflejado en el resultado pues si tengo en mi bd un texto "Jesùs", al momento de usar la función sqlite UPPER en android, me devuelve la cadena "JESúS".

Alguien en la lista se ha topado con esto ? en lo que a mi problema concierne investigare un poco mas así quizás encuentre alguna solución interesante, sino me queda de otra tendré que crear otra columna donde duplique la data en mayúsculas.    
--

Un Saludo
Meison 


((+511) 258 - 3564
((+511) 997 - 773937

Android Market
--------------------------------------------------------------------------------------



Daniel Fernández

unread,
Nov 27, 2014, 7:39:20 AM11/27/14
to desarrollad...@googlegroups.com
El hilo de la problemática es algo antiguo, pero me ha venido estupendamente para no sentirme el "único". Gracias por compartir la experiencia en su momento. 

La solución creo que no es sencilla, al menos no he dado con ella. SQLITE no convierte correctamente las tildes en mayúsculas o minúsculas y imitar este comportamiento es complicado. Hay una solución, que no cubre el 100% de los casos pero si la amplia mayoría, que consiste en lo siguiente:

Hay que modificar la cadena condicional original "where upper(name) = ?"  que introducía este tema por:

where (name = $1 OR upper(name) = $2 OR lower(name) = $3) 

Siendo $1 = nombre, $2 = nombre.toUpperCase(), $3 = nombre.toLowerCase()

No cubriría aquellos casos en los que ha cambiado un acento en mayúsculas por minúscula y otro en minúscula por uno en mayúscula, pero si el resto, que en la práctica ya supone una amplia mejora respecto al bug inicial. Espero que alguien encuentre la respuesta correcta y mejore esta solución temporal que voy a adoptar. 
>> > Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com

>> > Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.
>> >
>>
>> --
>> An'Brain - Prueba el nuevo widget inteligente para tu Android.
>> Idiotizer Free - Idiotiza a tus amigos. (Se requieren auriculares)
>> Track My App - Realiza un seguimiento de tus aplicaciones en el Android market.
>>
>> --
>> Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
>> Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
>> Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com

>> Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.
>
>
>
> --
> Armando Chirinos Paredes
> Blog: http://ameison.blogspot.com
> <http://2.bp.blogspot.com/_YWqmXigxG9o/RsAYnsoFLeI/AAAAAAAAAcM/reD30TuIX98/s320/icono-movil.png>((+511) 258 - 3564
> <http://2.bp.blogspot.com/_YWqmXigxG9o/RsAYnsoFLeI/AAAAAAAAAcM/reD30TuIX98/s320/icono-movil.png>((+511) 997 - 773937
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
> Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
> Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com

> Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.
>

--
An'Brain - Prueba el nuevo widget inteligente para tu Android.
Idiotizer Free - Idiotiza a tus amigos. (Se requieren auriculares)
Track My App - Realiza un seguimiento de tus aplicaciones en el Android market.

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com

Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.



--
Armando Chirinos Paredes
((+511) 258 - 3564
((+511) 997 - 773937

Reply all
Reply to author
Forward
0 new messages