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.