>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



Replicação de dados do Sqlite para Servidor Mysql


Olá, eu desenvolvi uma aplicação simples com cadastro no banco de dados Sqlite e a aplicação já está em funcionamento pelo meu cliente, porém quero replicar os dados desse banco para um servidor mysql de uma forma que não delete do banco sqlite no aplicativo. Ele utiliza o aplicativo onde não funciona internet assim utiliza "offline" cadastrando no banco de dados sqlite, mas preciso que quando ele conectar na internet haja um botão para replicar esses dados para o servidor mysql na web, pois daqui um tempo irei desenvolver um sistema onde ele possa visualizar os dados através da web. Assim ele poderá visualizar tanto na aplicação no Android quanto na Web.

Desde já agradeço.



5 Respostas


Ola Johnata ,

veja o curso Android On line

q la tem um exemplo.....




André, utilizei o exemplo do curso, porém a cada vez que replica ele manda todos os dados novamente para o banco mysql, fazendo com que ele fique com dados repetidos por que eu comentei a linha

db.delete("diarias", "_id=?", new String[]{String.valueOf(cursor.getInt(0))});
.
Eu preciso que o MySQL tenha a mesma quantidade de registro do SQLite. Preciso de uma maneira pra ele não enviar os mesmos dados novamente, entende? Pode me ajudar?
Desde já agradeço a atenção.

Segue meu código:


public class ExportarDiariasService extends Service implements Runnable {

public void onCreate() {
new Thread(ExportarDiariasService.this).start();
}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

public void run() {
SQLiteDatabase db = openOrCreateDatabase("bdcidao.db", Context.MODE_PRIVATE, null);

Cursor cursor = db.rawQuery("SELECT * FROM diarias", null);
int totalDB = cursor.getCount();
int totalReplicado = 0;

while(cursor.moveToNext()){
StringBuilder strURL = new StringBuilder();
strURL.append("http://localhost/casadocidao/inserir.php?nome=");
strURL.append(cursor.getString(cursor.getColumnIndex("nome")));

strURL.append("&rg=");
strURL.append(cursor.getString(cursor.getColumnIndex("rg")));

strURL.append("&orgexp=");
strURL.append(cursor.getString(cursor.getColumnIndex("orgexp")));

strURL.append("&cpf=");
strURL.append(cursor.getString(cursor.getColumnIndex("cpf")));

strURL.append("&datanasc=");
strURL.append(cursor.getString(cursor.getColumnIndex("datanasc")));

strURL.append("&email=");
strURL.append(cursor.getString(cursor.getColumnIndex("email")));

strURL.append("&telefone=");
strURL.append(cursor.getString(cursor.getColumnIndex("telefone")));

strURL.append("&celular=");
strURL.append(cursor.getString(cursor.getColumnIndex("celular")));

strURL.append("&endereco=");
strURL.append(cursor.getString(cursor.getColumnIndex("endereco")));

strURL.append("&datachegada=");
strURL.append(cursor.getString(cursor.getColumnIndex("datachegada")));

strURL.append("&horachegada=");
strURL.append(cursor.getString(cursor.getColumnIndex("horachegada")));

strURL.append("&cidade=");
strURL.append(cursor.getString(cursor.getColumnIndex("cidade")));

strURL.append("&estado=");
strURL.append(cursor.getString(cursor.getColumnIndex("estado")));

strURL.append("&datasaida=");
strURL.append(cursor.getString(cursor.getColumnIndex("datasaida")));

strURL.append("&horasaida=");
strURL.append(cursor.getString(cursor.getColumnIndex("horasaida")));

strURL.append("&valordiaria=");
strURL.append(cursor.getString(cursor.getColumnIndex("valordiaria")));

strURL.append("&outrasdespesas=");
strURL.append(cursor.getString(cursor.getColumnIndex("outrasdespesas")));


Log.d("ExportarDiariasService", strURL.toString());
try{
URL url = new URL(strURL.toString());
HttpURLConnection http = (HttpURLConnection) url.openConnection();
InputStreamReader ips = new InputStreamReader(http.getInputStream());
BufferedReader line = new BufferedReader(ips);
String linhaRetorno = line.readLine();

if(linhaRetorno.equals("Y")){
Log.d("Entrou no IF", "NO IF");
//db.delete("diarias", "_id=?", new String[]{String.valueOf(cursor.getInt(0))});

totalReplicado ;
Log.d("ExportarDiariasService", "OK");
}

} catch(Exception ex){
Log.d("ExportarDiariaService", ex.getMessage());
}
}

db.close();
}




Olá Johnata

Conforme mostra no curso, se você vai replicar é só apagar os registros do SQL depois deles irem até o MySQL.




Então, a ideia é NÃO apagar os dados, manter os dados no SQLite. Como eu disse, eu comente a linha que deleta os registros do banco SQLite, mas eu preciso mantê-los. Preciso que os dados fiquem tanto no SQLite quanto no Servidor Mysql.




Johnata

Nosso suporte é baseado no curso. Neste caso, foge do escopo.

De qualquer forma, você pode armazenar o último ID replicado, e na hora de replicar, somente replicar ID'S que sejam maior que seu ID gravado!