PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Ativar Desativar Integridade SQLite
Ativar Desativar Integridade SQLite
Débuté par Adriano Boller, 29 sep. 2014 16:23 - Aucune réponse
Posté le 29 septembre 2014 - 16:23
Bom dia pessoal, essa semana tive que fazer uma carga de dados na minha aplicacao do Android com SQLite, e foi incrivelmente lento o SQLite na inclusão, e lendo a documentação do SQLite descobri que é assim mesmo, ou seja, ele preserva por padrão a integridade dos dados, bom, mas para fazer a carga de dados que eu precisava não poderia demorar tanto, precisava desligar a integridade para que isso ocorre-se num tempo ágil.

Lendo a documentação e o google, achei dois parametros, um é o "synchronous" e outro é o "journal_mode", o segundo desliga totalmente a integridade, num teste básico a minha carga de dados com 40 mil registros levava 53 segundos, utilizando esses parametros levaram 1 segundo. Claro, sem integridade nenhuma. Segue os exemplos.

Para desativar a integridade.

HExecuteSQLQuery(Query,Minhaconexao,hQueryWithoutCorrection,"PRAGMA synchronous = OFF;")
HExecuteSQLQuery(Query,Minhaconexao,hQueryWithoutCorrection,"PRAGMA journal_mode = OFF;")

Seu bloco de inclusão aqui...

Para ativar os parametros por default novamente.

HExecuteSQLQuery(Query,Minhaconexao,hQueryWithoutCorrection,"PRAGMA synchronous = FULL;")
HExecuteSQLQuery(Query,Minhaconexao,hQueryWithoutCorrection,"PRAGMA journal_mode = DELETE;")


Pronto!, uma inclusão praticamente instantanea.

Segue codigo:

//Ativar Desativar Integridade SQLite
import android.database.sqlite.*;
import android.content.Context;
import android.util.*;
import android.database.*;
public static String AtivarDesativarIntegridadeSQLite(String sTipo){
String DB_NAME = "O NOME DO SEU ARQUIVO.db";
String alterQuery = "";
SQLiteDatabase db;
try {
db = getContexteApplication().openOrCreateDatabase(DB_NAME, 0, null);
try {
if (sTipo.toLowerCase() == "desativar"){
db.execSQL("PRAGMA synchronous = OFF;");
db.rawQuery("PRAGMA journal_mode = OFF;",null);
}
else{
db.execSQL("PRAGMA synchronous = FULL;");
db.rawQuery("PRAGMA journal_mode = DELETE;",null);
}
db.close();
return "ok";
} catch(SQLException e) {
db.close();
return e.getMessage();
}
} catch (SQLException e) {
return e.getMessage();
}
}


//Utilizando a função no seu aplicativo:
//========================
IF InAndroidSimulatorMode() = False THEN
sErro is string = AtivarDesativarIntegridadeSQLite("desativar")
IF sErro <> "ok" THEN
Error(sErro)
EndProgram()
END
ELSE
HExecuteSQLQuery(Query,Minhaconexao,hQueryWithoutCorrection,"PRAGMA synchronous = OFF;")
HExecuteSQLQuery(Query,Minhaconexao,hQueryWithoutCorrection,"PRAGMA journal_mode = OFF;")
END