SQL Server 2008

90 views
Skip to first unread message

Leo Vitor

unread,
Sep 26, 2012, 2:03:45 PM9/26/12
to gtu...@googlegroups.com
Pessoal, gostaria de um help...
Estou tentando conectar uma aplicação minha com um banco de dados SQL Server2008 e está retornando o seguinte erro:

09-26 17:35:15.461: W/System.err(479): java.sql.SQLException: Network error IOException: /127.0.0.1:1433 - Connection refused
09-26 17:35:15.461: W/System.err(479): at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:417)
09-26 17:35:15.471: W/System.err(479): at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
09-26 17:35:15.471: W/System.err(479): at java.sql.DriverManager.getConnection(DriverManager.java:180)
09-26 17:35:15.471: W/System.err(479): at java.sql.DriverManager.getConnection(DriverManager.java:214)
09-26 17:35:15.471: W/System.err(479): at com.example.testesqlserver.MainActivity.query2(MainActivity.java:53)
09-26 17:35:15.471: W/System.err(479): at java.lang.reflect.Method.invokeNative(Native Method)
09-26 17:35:15.471: W/System.err(479): at java.lang.reflect.Method.invoke(Method.java:507)
09-26 17:35:15.491: W/System.err(479): at android.view.View$1.onClick(View.java:2139)
09-26 17:35:15.491: W/System.err(479): at android.view.View.performClick(View.java:2485)
09-26 17:35:15.491: W/System.err(479): at android.view.View$PerformClick.run(View.java:9080)
09-26 17:35:15.491: W/System.err(479): at android.os.Handler.handleCallback(Handler.java:587)
09-26 17:35:15.491: W/System.err(479): at android.os.Handler.dispatchMessage(Handler.java:92)
09-26 17:35:15.541: W/System.err(479): at android.os.Looper.loop(Looper.java:123)
09-26 17:35:15.541: W/System.err(479): at android.app.ActivityThread.main(ActivityThread.java:3683)
09-26 17:35:15.541: W/System.err(479): at java.lang.reflect.Method.invokeNative(Native Method)
09-26 17:35:15.541: W/System.err(479): at java.lang.reflect.Method.invoke(Method.java:507)
09-26 17:35:15.541: W/System.err(479): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-26 17:35:15.541: W/System.err(479): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-26 17:35:15.541: W/System.err(479): at dalvik.system.NativeStart.main(Native Method)
09-26 17:35:15.541: W/System.err(479): Caused by: java.net.ConnectException: /127.0.0.1:1433 - Connection refused
09-26 17:35:15.541: W/System.err(479): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207)
09-26 17:35:15.551: W/System.err(479): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
09-26 17:35:15.551: W/System.err(479): at java.net.Socket.startupSocket(Socket.java:705)
09-26 17:35:15.551: W/System.err(479): at java.net.Socket.tryAllAddresses(Socket.java:150)
09-26 17:35:15.551: W/System.err(479): at java.net.Socket.<init>(Socket.java:209)
09-26 17:35:15.551: W/System.err(479): at java.net.Socket.<init>(Socket.java:176)
09-26 17:35:15.551: W/System.err(479): at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:263)
09-26 17:35:15.551: W/System.err(479): at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:318)
09-26 17:35:15.551: W/System.err(479): ... 18 more

Estou usando o seguinte jar dentro do projeto: jtds-1.2.6.jar
Adicionei a seguintes linhas no meu MANIFEST:

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Segue o método que é eu chamo: 

  public void query2(View v){    
   
    Connection con = null;
Statement stm;
ResultSet msql;

String jdbcdriver = "net.sourceforge.jtds.jdbc.Driver";
String databaseurl = "jdbc:jtds:sqlserver://127.0.0.1:1433/bdlocal";
String user="sa";
String password="12345";
try {
Class.forName(jdbcdriver);
System.out.println("Driver Carregado!!!!!");
con = DriverManager.getConnection(databaseurl,user,password);
System.out.println("Conectado!!!!!");

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

if (con != null) {
try {
con.close();
System.out.println("Conexão fechada");
} catch (Exception e) {
e.printStackTrace();

}
}     
    }


Este mesmo método em um projeto Java normal funciona, a conexão é realizada.
Alguma ideia do que eu posso estar fazendo errado no projeto Android?



Att
Leo Vitor

Murilo Saraiva de Queiroz

unread,
Sep 26, 2012, 2:07:52 PM9/26/12
to gtu...@googlegroups.com
- Confirme se o SQL Server està configurado para aceitar login usando TCP, porto 1433, e autenticação SQL Server
- Tente o driver oficial da Microsoft (versões antigas do jtds não funcionavam direito com o 2008)


2012/9/26 Leo Vitor <lvit...@gmail.com>

--
--
Para enviar mensagem para o grupo, envie email para gtu...@googlegroups.com
Para não receber mais mensagens deste grupo, envie um email para gtugbh+un...@googlegroups.com
Para saber mais, visite http://groups.google.com/group/gtugbh
 
 
 



--
Murilo Saraiva de Queiroz, MSc
Hardware Engineer at NVIDIA


Rennan Possas

unread,
Sep 26, 2012, 2:12:51 PM9/26/12
to gtu...@googlegroups.com
Vê se o SQL Browser Service tá rodando no seu servidor onde o SQL tá instalado...

2012/9/26 Murilo Saraiva de Queiroz <mur...@gmail.com>

Leo Vitor

unread,
Sep 26, 2012, 2:12:59 PM9/26/12
to gtu...@googlegroups.com
Murilo, 

Utilizei o mesmo método em um projeto Java normal com a mesma biblioteca no caso e consegui conectar.
O meu projeto Android é 2.2, vou criar um projeto 4.1 ou 4.0 e tentar testar.

Att
Leo Vitor

Murilo Saraiva de Queiroz

unread,
Sep 26, 2012, 2:31:47 PM9/26/12
to gtu...@googlegroups.com
Desculpe-me, não tinha visto seu comentário a respeito no final (para evitar isso é melhor colocar o código sempre por último). 

Na app Android tente abrir uma conexão TCP qualquer para o 127.0.0.1:1433 e confirme se pelo menos a rede está funcionando. 

muriloq

2012/9/26 Leo Vitor <lvit...@gmail.com>

Leo Vitor

unread,
Sep 26, 2012, 3:43:26 PM9/26/12
to gtu...@googlegroups.com
Utilizei o método abaixo e ele retornou "ok", aparentemente o ip do banco esta sendo reconhecido.
Acredito que seja alguma coisa de configuração da aplicação, visto que em um projeto java normal funciona Ok.

Alguma outra sugestão? Outro caminho?


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("Banco Servidor","Responde OK");
    return true;
    }
    else{
    Log.e("Banco Servidor","No responde: Time out");
    return false;
    }
   } catch (IOException e) {
    Log.e("Banco Servidor",e.toString());
   }
return false;
}


Att
Leo Vitor

Murilo Saraiva de Queiroz

unread,
Sep 26, 2012, 3:53:37 PM9/26/12
to gtu...@googlegroups.com
Vem cá, 127.0.0.1 é localhost; a menos que você esteja rodando o SQL Server no próprio Android não vai funcionar nunca! :-) 

Funciona na aplicação Java normal porque vocë a está rodando na mesma máquina do SQL Server... Mesmo se você estiver rodando num emulador Android na própria máquina não vai dar certo, porque 127.0.0.1 vai ser o Android, não o host. 

E seu teste não verifica se você consegue se conectar no porto 1433, isReacheable é equivalente a um ping (e ping localhost vai sempre funcionar, né?).

2012/9/26 Leo Vitor <lvit...@gmail.com>

Marcelo Henrique

unread,
Sep 26, 2012, 3:58:07 PM9/26/12
to gtu...@googlegroups.com
Pá, isso não vai funcionar nunca em um device, so te falo uma coisa. Webservice ! envia e recebe JSON. 
                                              - Marcelo Henrique -
  "Se não puder se destacar pelo talento, vença pelo esforço." (Dave Weinbaum)

Leo Vitor

unread,
Sep 26, 2012, 4:02:27 PM9/26/12
to gtu...@googlegroups.com
Realmente, 127.0.0.1 não funciona...
Estou usando agora o ip da máquina, no caso 10.0.2.15..

Acabei de ver esse exemplo no forum do GUJ.. vou tentar:  http://www.guj.com.br/java/267648-erro-na-conexao-direta-android-com-sqlserver 
PS..: Tem comentário seu lá Marcelo.. eheheh


Att
Leo Vitor

Murilo Saraiva de Queiroz

unread,
Sep 26, 2012, 4:02:41 PM9/26/12
to gtu...@googlegroups.com

Marcelo Henrique

unread,
Sep 26, 2012, 4:11:56 PM9/26/12
to gtu...@googlegroups.com
cara num é legal tu passar um IP  assim .. isso custa tempo e memoria do device

Arnon Cardoso

unread,
Sep 26, 2012, 4:22:23 PM9/26/12
to gtu...@googlegroups.com
   Léo,

   Só mais um cuidado. Se o android não estiver na mesma rede do servidor não vai funcionar também já que 10.x.x.x é destinada a endereços internos. Logo não funcionará quando a pessoa estiver usando 3G ou outra rede Wifi. Para os testes isto normalmente não é problema mas em produção pode dar pau.

   Abraço,
           Arnon

2012/9/26 Leo Vitor <lvit...@gmail.com>

Rennan Possas

unread,
Sep 26, 2012, 4:25:36 PM9/26/12
to gtu...@googlegroups.com
Sem falar nos riscos de segurança.

2012/9/26 Arnon Cardoso <arnonc...@gmail.com>

Leo Vitor

unread,
Sep 26, 2012, 4:51:55 PM9/26/12
to gtu...@googlegroups.com
Sim, inicialmente a ideia é utilizar os disposivos em uma rede local, no caso a mesma do servidor de banco de dados.
Em termos de segurança e melhor forma de acesso ao banco ainda não pensei como fazer.. 
Estou fazendo testes iniciais de conexão com o banco para validar se é possível desenvolver a solução da maneira que imaginei.

Mas continuo em duvida se estou ou não fazendo algo errado.. pois continuo com o erro de:

java.sql.SQLException: Network error IOException: /10.0.2.15:1433 - Connection refused

Como não tenho experiencia com desenvolvimento para Android imagino que meu projeto esteja com alguma configuração errada e/ou minha chamada na classe MainActivity tb está errada.
Estou chamando assim no evento de click de um botão:

public void query2(View v) throws SQLException{          
    SQLServer connect = new SQLServer();    
    connect.testaConexao("10.0.2.15");    
    connect.Open();          
    }

PS..: A classe SQLServer. em questão é a do tutorial e a string de conexão com o banco: jdbc:jtds:sqlserver://10.0.2.15:1433/bdlocal


Att
Leo Vitor

Murilo Saraiva de Queiroz

unread,
Sep 26, 2012, 4:53:44 PM9/26/12
to gtu...@googlegroups.com
Não estou dizendo que é legau(sic), estou dizendo que é possível (você falou "não vai funcionar nunca", não "isso não é uma boa prática"). 

Deixa pra lá, essa thread já deu o que tinha que dar :-) 

2012/9/26 Marcelo Henrique <marce...@gmail.com>

Murilo Saraiva de Queiroz

unread,
Sep 26, 2012, 4:55:40 PM9/26/12
to gtu...@googlegroups.com
Como já foi falado aqui, você deveria é desistir de fazer desse jeito - mesmo se funcionar é uma solução tosca. 

Crie uma interface no server-side para acessar o banco, e faça o dispositivo se comunicar com ela via HTTP (passando JSON, por exemplo). 

2012/9/26 Leo Vitor <lvit...@gmail.com>

Rennan Possas

unread,
Sep 26, 2012, 5:11:30 PM9/26/12
to gtu...@googlegroups.com

O ideal realmente nao é assim... mas tenta colocar um uses permission para internet no seu android manifest pra poder continuar seus testes

Leo Vitor

unread,
Sep 26, 2012, 5:20:36 PM9/26/12
to gtu...@googlegroups.com
Meu MANIFEST:

...
<uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
...

Att
Leo Vitor

Rennan Possas

unread,
Sep 26, 2012, 5:27:50 PM9/26/12
to gtu...@googlegroups.com
kra, vc tá conseguindo acessar o bd pela aplicaçao java no pc, mas tá usando autenticaçao do windows ou usuário e senha? vc já olhou o sql browser service se está ativado? Outra aplicaçao desktop ou web consegue acessar esse bd sem a autenticaçao do windows?

2012/9/26 Leo Vitor <lvit...@gmail.com>

Leo Vitor

unread,
Sep 26, 2012, 9:32:12 PM9/26/12
to gtu...@googlegroups.com
Sim o banco ta ok. 
Acabei de fazer um teste utilizando o SQL Server Dashboard (disponível na Google Play), instalei no telefone e conectado via Wifi na minha rede consegui acessar as configurações do meu banco de dados.
Utilizei o IP da minha máquina no caso: 10.10.1.20 e o usuário SA.

 
Att
Leo Vitor

Leo Vitor

unread,
Sep 27, 2012, 4:12:01 PM9/27/12
to gtu...@googlegroups.com
Pessoal, consegui fazer funcionar..
Digamos que é meu primeiro projetinho..
Segue em anexo para vcs olharem como que ficou o esquema!
:D

Att
Leo Vitor
testeSqlServer.rar

Rennan Possas

unread,
Sep 27, 2012, 4:17:59 PM9/27/12
to gtu...@googlegroups.com
Boa kra, agora tenta criar um webservice pro seu app comunicar com ele... e por aí vai....

2012/9/27 Leo Vitor <lvit...@gmail.com>

Murilo Saraiva de Queiroz

unread,
Sep 27, 2012, 4:19:38 PM9/27/12
to gtu...@googlegroups.com
Só não se esqueça que manter uma conexão aberta entre o dispositivo móvel e o banco é uma péssima ideia, e não deveria ser usado num ambiente real. 

Não deixe que isso saia da fase protótipo/prova de conceito para a aplicação final. 

Murilo

2012/9/27 Leo Vitor <lvit...@gmail.com>
Reply all
Reply to author
Forward
0 new messages