Galera estou trabalhando em um projeto que utiliza SQLServer e não tive muitos problema com ele não, vou explicar com que eu estou fazendo
Primeira coisa eu sempre tenho um copia igual no DB do Aplicativo, Tipo eu tenho um Base em um servidor e a mesma base no tablet, tudo criado com o mesmo script, Primeiro eu montei a classe SQLServer
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import android.util.Log;
public class SQLServer{
private static String TAG = "Banco Servidor";
public Connection con;
public Statement stmt;
public ResultSet rs;
private String DRIVER = "net.sourceforge.jtds.jdbc.Driver";
public boolean testaConexao(String ip){
InetAddress in = null;
try {
in = InetAddress.getByName(ip);
} catch (UnknownHostException e) {
e.printStackTrace();
}
try {
if(in.isReachable(5000)){
Log.i(TAG,"Responde OK");
return true;
}
else{
Log.e(TAG,"No responde: Time out");
return false;
}
} catch (IOException e) {
Log.e(TAG,e.toString());
}
return false;
}
public int OpenTeste(String serv,String porta,String database,String user,String senha){
String url = "jdbc:jtds:sqlserver://"+serv+":"+porta+"/"+database;
try{
Class.forName(DRIVER);
Log.e(TAG,""+DriverManager.getLoginTimeout());
DriverManager.setLoginTimeout(5000);
Log.e(TAG,""+DriverManager.getLoginTimeout());
con = DriverManager.getConnection(url, user, senha);
Log.i(TAG,"Conexão Aberta com Sucesso");
return 0;
}catch (Exception e) {
if (e.getMessage().equals("Network error IOException: localhost/127.0.0.1:1433 - Connection refused")){
return 1;
}else{
Log.e(TAG,"Open "+e.getMessage());
return 2;
}
}
}
public void Open(){
try{
Class.forName(DRIVER);
DriverManager.setLoginTimeout(-1);
con = DriverManager.getConnection(ParametroTemporario.URL, ParametroTemporario.USUARIO, ParametroTemporario.SENHA);
Log.i(TAG,"Conexão Aberta com Sucesso");
}catch (Exception e) {
Log.e(TAG,"Open "+e);
}
}
public void Close() {
try{
Log.i(TAG,"Conexão Servidor Fechada");
}finally{
if(rs != null)
try{ rs.close(); } catch(Exception ex){}
if(stmt != null)
try{ stmt.close(); } catch(Exception ex){}
if(con != null)
try{ con.close(); } catch(Exception ex){}
}
}
}
Sempre que eu vou me conectar no servidor eu chamo a função testaConexao para ver se há conexão com o servidor por que minha aplicação poder ter acesso com o banco tanto no 3G com no Wi-Fi
Dai e rodo uma Thread para executar a sincronização de acordo com um tempo que é determinado em uma tela de configuração
Timer timer = null;
if (timer == null) {
timer = new Timer();
TimerTask tarefa = new TimerTask() {
public void run() {
try {
if(status){
new Thread(new Runnable(){
/// CODIGO DE SINCRONIZAÇÃO DAS BASE
Log.i(tag,"Executando a sincronização automatica ");
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification n = new Notification(R.drawable.iniciasync,"Executando a Sincronização",System.currentTimeMillis());
n.setLatestEventInfo(MainActivity.this,"Executando a Sincronização","Executando a Sincronização ", null);
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.defaults = Notification.DEFAULT_VIBRATE;
n.defaults = Notification.DEFAULT_LIGHTS;
handler.post(new Runnable(){
public void run(){
if (tabatualiza){
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification n = new Notification(R.drawable.ok,"Sincronização com Sucesso",System.currentTimeMillis());
n.setLatestEventInfo(MainActivity.this,"Sincronização com Sucesso","Sincronização simple concluída com sucesso", null);
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.defaults = Notification.DEFAULT_VIBRATE;
n.defaults = Notification.DEFAULT_LIGHTS;
nm.notify(R.string.app_name,n);
Log.i(tag,"Terminou com sucesso");
}else{
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification n = new Notification(R.drawable.erro,"Erro na Sincronização",System.currentTimeMillis());
PendingIntent p = PendingIntent.getActivity(MainActivity.this,0,new Intent(MainActivity.this,SincronizacaoActivity.class), 0);
n.setLatestEventInfo(MainActivity.this,"Erro na Sincronização","Sincronize manualmente novamente", p);
n.defaults = Notification.DEFAULT_ALL;
n.flags |= Notification.FLAG_AUTO_CANCEL;
nm.notify(R.string.app_name,n);
Log.i(tag,"erro na sincronização automatica ");
}
}
});
}
}).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
timer.scheduleAtFixedRate(tarefa, TEMPO, TEMPO);
TEMPO = (1000 * segundos)
tabatualiza ele verfica se todas as sincronizações estao ok se nao ele exibe a notificação de erro
esse codigo acima ele fica na classe principal do programa entao ele sempre vai rodar
no manifest
tem que colocar a seguinte linha
<uses-permission android:name="android.permission.VIBRATE"/>
// essa duas para ter acesso a internet
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
dai cada vez que voce for fazer a conexão com o servidor vai abrir um thread e sempre chamar assim
SQLServer connect = new SQLServer();
if(connect.testaConexao(IP DA SUA CONEXÃO OU DNS)){
// conexão ok
}else{
//conexão com problemas
}
dai para manipular dados
connect.open();
.
.
.
//para fazer os select insert update ... e assim vai
//sempre
connect.stmt = connect.con.createStatement();
connect.rs = connect.stmt.executeQuery(SUA SQL);
//para buscar e para inserir
PreparedStatement query = connect.con.prepareStatement(SUA SQL);
....
....
...
query.executeUpdate();
espero ter ajudado eu fiz assim e não estou tendo problemas