adt java - brak połączenia do mssql

0

Witam, próbuję połączyć się w javie do mssql za pomocą dwóch metod. Żadna z nich nie działa. Przeszukałem pół internetu i nie znalazłem rozwiązania.

Metoda 1:

package com.example.mg;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivityMG extends Activity {

    //DEKLARACJE:
    
    private EditText ed_serwer;
    private EditText ed_baza;
    private EditText ed_login;
    private EditText ed_haslo;
    private Button btn_go; 
    private TextView lb_stan_polaczenia;  
    private Context context;
    
    private Connection conn;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity_mg);
        
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);        
        
        ed_serwer = (EditText) findViewById(R.id.edSerwer);
        ed_baza = (EditText) findViewById(R.id.edBaza);
        ed_login = (EditText) findViewById(R.id.edLogin);
        ed_haslo = (EditText) findViewById(R.id.edHaslo);
        btn_go = (Button) findViewById(R.id.button1);
        lb_stan_polaczenia = (TextView) findViewById(R.id.lbStanPolaczenia);
        context = getApplicationContext();
        
        //KOD:
        
        lb_stan_polaczenia.setText("nie połączono!");
        
        btn_go.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(context, "Łączenie ...", Toast.LENGTH_SHORT).show();
                System.setProperty("java.net.preferIPv6Addresses", "true");
                
                //==
	            ConnectMSSQLServer connServer = new ConnectMSSQLServer();	
	            
	            connServer.dbConnect("jdbc:sqlserver://" + ed_serwer.getText() + ":1433;instance=MSSQLSERVER;DatabaseName=" + ed_baza.getText() + ";integratedSecurity=true;encrypt=false;trustServerCertificate=true", 
	    	    		"" + ed_login.getText() + "",
	    	    		"" + ed_haslo.getText() + "");  
	            
                final Intent intent = new Intent(context, WynikActivity.class);//++
                
                String resulttString = ed_baza.getText().toString();
                intent.putExtra("resultt", resulttString);          
                
                startActivity(intent);//++
            }
        });        
    }

    public class ConnectMSSQLServer
    {
       public void dbConnect(String db_connect_string,
                String db_userid,
                String db_password)
       {
          try {
             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        	  
        	 conn = DriverManager.getConnection(db_connect_string,
                      db_userid, db_password);
             
             lb_stan_polaczenia.setText("connected");
             
             Statement statement = conn.createStatement();
             String queryString = "select * from sysobjects where type='u'";
             ResultSet rs = statement.executeQuery(queryString);
             while (rs.next()) {
                System.out.println(rs.getString(1));
             }
          } 
          catch (ClassNotFoundException e) {
        	 lb_stan_polaczenia.setText(e.toString()); 
        	 Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
          }
          catch (SQLException e) {
        	 lb_stan_polaczenia.setText(e.toString()); 
        	 Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
          }
          catch (Exception e) {
        	 lb_stan_polaczenia.setText(e.toString()); 
        	 Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
          }        
       }
    }  
				

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main_activity_mg, menu);
        return true;
    }
    
}

Metoda 2:

Analogicznie jak metoda 1, tylko z poniższymi różnicami:

connServer.dbConnect("jdbc:jtds:sqlserver://" + ed_serwer.getText() + ":1433/" + ed_baza.getText() + ";instance=SQLEXPRESS;user=" + ed_login.getText() + ";password=" + ed_haslo.getText() + ""
	            		,""
	            		,"");  	

oraz

Class.forName("net.sourceforge.jtds.jdbc.Driver");

oraz

conn = DriverManager.getConnection(db_connect_string);

Jak widać w metodzie pierwszej użyłem jdbc, a w drugiej jtds.
Serwer, baza, użytkownik, hasło są poprawne.
Sprawdziłem port na serwerze i jest równy 1433, więc jest poprawnie.
Przy wykonywaniu aplikacji sposobem 1 w debugu program zatrzymuje się na metodzie:
conn = DriverManager.getConnection(db_connect_string, db_userid, db_password); i po chwili wyskakuje exception: "com.microsoft.sqlserver.jdbc.sqlserverexception the driver could not establish a secure connection do sql server by using secure sockets layer SSL"
Z internetu wynika, że zamiast tej metody należy użyc tej drugiej czyli jtds, które jest darmowe i nie microsoftowe, bo ta pierwsza metoda, czyli jdbc ma problemy z szyfrowanym połączeniem.
A zatem przy użyciu drugiej metody przy uruchomieniu programu za pomocą RUN program się zatrzymuje w wirtualnym środowisku androida z komunikatem "Unfortunately MG has stopped working", a debug zatrzymuje się również na metodzie: conn = DriverManager.getConnection(db_connect_string, db_userid, db_password); ale pojawia się dodatkowe okno zatytułowane: "DriverManagerClass" z informacją: Class File Editor - Source not Found - Attach Source.

I tu jest zonk bo sterowniki są prawidłowo załadowane, a program się zatrzymuje.

Proszę o pomoc.

Pozdrawiam.

0

Androidem przez JDBC się nie połączysz. Powinieneś wystawić do tego jakiś serwis na serwerze (np REST) i korzystać z połączenia z bazą za jego pośrednictwem.

0

Dziękuję za odpowiedź. Skoro zatem przez JDBC się nie połączę, to dlaczego nie mogę się połączyć przez JTDS? Zależy mi na takim konkretnie rodzaju połączenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1