¿Cómo pasar el valor de la cadena separada por coma en la consulta SQL?
Creo una aplicación relacionada con la base de datos.
En esto creo la base de datos simple y consigo el valor de la base de datos usando adentro en consulta del sql.
- Android - ¿Puedes actualizar un Cursor para los resultados de SQLite?
- Cómo implementar Exportar sqlite Para sobresalir / archivo csv en android?
- Copia de seguridad / restaurar sqlite db en android
- Sqlite convert 'dd.MM.yyyy' formated String hasta la fecha
- Sqlite Comprobar si la tabla está vacía
Mi problema es que tengo la cuerda en un "2,6,8,9,10" esto. Primero divido esta cadena y la almacén en un arraylist. Sin coma. Después de este arraylist me fusiono con coma como un 2,6,8,9,10 este.
Hago todo esto muy bien. Yo uso esta cadena en la consulta para obtener el valor de la base de datos. Mi consulta es
SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='3' AND tm.oraganisationid ='1' AND td.topic_id in(2,6,8,9,10);
esta.
Pero cuando paso la cadena de la mezcla él `s parece un
SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='3' AND tm.oraganisationid ='1' AND td.topic_id in('2,6,8,9,10');
Así que no puedo funcionar la pregunta porque el diferente del valor del paso adentro in
causa. En la consulta anterior funciona bien porque s like a
in (2,6,8,9,10) in second it look like a
in ('2,6,8,9,10') so what to do. how to remove this
so what to do. how to remove this
“ de cadena?
Primero divido la cadena
//getTopicFile ArrayList with public ArrayList<String> getAssignTopicArrayList(String passString) { ArrayList<String> rtnArrayList=new ArrayList<String>(); try { StringTokenizer strTokens = new StringTokenizer(passString,","); while (strTokens.hasMoreElements()) { rtnArrayList.add(String.valueOf(strTokens.nextToken())); } } catch (Exception ex) { ex.printStackTrace(); System.err.println("Error in Fetch ArrayList-->"+ex.toString()); } return rtnArrayList; } //getTopicFile ArrayList with
Después de fusionar en Nueva cadena
genHelper.showErrorLog("Assign Topic-->"+chapterAssignTopicName); ArrayList<String> getTopicList=genHelper.getAssignTopicArrayList(chapterAssignTopicName); String passConcat = ""; for (int i = 0; i < getTopicList.size(); i++) { System.out.println("Topic List--->"+getTopicList.get(i)); if(getTopicList.size()==1) { passConcat=passConcat.concat(String.valueOf(getTopicList.get(i))); } else { if(getTopicList.size()-1 == i) { System.err.println("value if --> " + i); passConcat=passConcat.concat(String.valueOf(getTopicList.get(i))); }else { System.err.println("value else--> " + i); passConcat=passConcat.concat(String.valueOf(getTopicList.get(i)).concat(",")); } } } genHelper.showErrorLog("PassConcat String-->"+passConcat);
Entonces me dieron Nueva cadena y pasar en la consulta a continuación
String topicQuery="SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='"+LanguageActivity.languageId+"' AND tm.oraganisationid ='"+genHelper.loadPreferences(String.valueOf(R.string.sharePrefin_Login_organizationid))+"' AND td.topic_id in('"+passConcat+"')";
- Alterar el campo único de la tabla
- Compruebe si el cursor tiene resultados
- Examinar la base de datos SQLite de mi aplicación para Android?
- Guardar ArrayLists en bases de datos SQLite
- Excepción de tiempo de ejecución de la biblioteca de persistencia de habitación al llamar al método Rooms inMemoryBuilder
- DB de SQLite accedido desde múltiples subprocesos
- Diferencias de rendimiento entre SQLite en Android e iOS
- Cómo convertir el objeto de cursor en XML o JSON en android
no debería
String topicQuery="SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='"+LanguageActivity.languageId+"' AND tm.oraganisationid ='"+genHelper.loadPreferences(String.valueOf(R.string.sharePrefin_Login_organizationid))+"' AND td.topic_id in('"+passConcat+"')";
ser
String topicQuery="SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='"+LanguageActivity.languageId+"' AND tm.oraganisationid ='"+genHelper.loadPreferences(String.valueOf(R.string.sharePrefin_Login_organizationid))+"' AND td.topic_id in("+passConcat+")";
La mejor opción, asumiendo que está utilizando sentencias preparadas, y desea mantener su db seguro, es preparar la sentencia con la cadena sql '…. in (?,?,?, …)' donde el número De '?' Es igual al número de valores reales que tiene en su matriz.
La desventaja es que usted sacrifica el funcionamiento, porque usted necesita preparar la declaración cada vez que usted desea ejecutarla.
Utilice algunas operaciones de picadura como indexOf y reemplace las funciones para deshacerse de estas comas.