PDA

View Full Version : [Java] connessione ad un Data Base SQL Server


Corvo80
19-01-2006, 15:20
Premetto che il seguente codice non è mio: l'ho trovato in Internet. Ho installato le JDBC della Microsoft per SQL Server 2000 e ho aggiornato il CLASSPATH (credo, in realtà). Il problema è che ogni volta mi dà la stessa eccezione: "Could not find the database driver". Pensavo che l'indirizzo di registrazione dei driver fosse sbagliato ma ho controllato nella guida ufficiale e non è così. Per quanto riguarda l'indirizzo del server ci sono dati ipotetici non corrispondenti a nessun database esistente ma non è questo il problema, altrimenti mi darebbe un altro messaggio di errore...

Dove sto sbagliando?

import java.sql.*;

public class SQLHere {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection connection = null;
try {
String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String serverName = "127.0.0.1";
String portNumber = "1433";
String mydatabase = serverName + ":" + portNumber;
String url = "jdbc:JSQLConnect://" + mydatabase; // a JDBC url
String username = "username";
String password = "password";

// Load the JDBC driver
Class.forName(driverName);

// Create a connection to the database
connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
System.out.println("Could not find the database driver");
} catch (SQLException e) {
System.out.println("Could not connect to the database");
}


}

}

kingv
19-01-2006, 15:33
ClassNotFoundException?
penso che tu non abbia aggiunto correttamente al classpath il driver.

Corvo80
19-01-2006, 15:34
A quanto pare non sono affatto sicuro di aver aggiornato il CLASSPATH... qualcuno mi spiega come si fa?

:muro:

Corvo80
19-01-2006, 15:41
Scusate, ho risolto! :D

(dovrei proprio imparare ad avere più pazienza, vero?)

kingv
19-01-2006, 18:51
Scusate, ho risolto! :D




era quello?

Corvo80
20-01-2006, 13:36
Ovviamente sì... cmq ora ho un nuovo problema: riesco a connettermi ad un database remoto ma se tento di connettermi ad un database locale mi dà eccezione "Could not connect to the database".

Tengo a precisare che ho modificato il codice:

import java.sql.*;

public class SQLHere {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection connection = null;
try {
String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String username = "username";
String password = "password";

// Load the driver
Class.forName(driverName);

// Create a connection to the database
connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://locale:1433;DatabaseName=database01", username, password);
} catch (ClassNotFoundException e) {
System.out.println("Could not find the database driver");
} catch (SQLException e) {
System.out.println("Could not connect to the database");
}
}
}

NB I campi user, pass e l'indirizzo e nome del database sono fittizi ma nella mia macchina ho provato (ovviamente) con quelli veri.

Dove potrebbe stare l'errore? Forse gli dà fastidio che sia locale? Possibile?

Zeus84
21-01-2006, 08:15
Normalmente non dovrebbero esserci problemi se il database è locale..l'unico dubbio che mi sorge è che alcuni database hanno driver distinti nel caso in cui ti stia colleganto ad un database locale o ad uno remoto...controlla se nel tuo caso è così..
Un'altro possibile dubbio: hai dei firewall attivi sul pc?

Cryingcrow
21-01-2006, 15:57
Magari al posto di "locale" va "localhost" (o 127.0.0.1)? o la tua macchina si chiama locale :confused:

connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=database01", username, password);

Poi ti conviene stampare direttamente l'eerore che magari si capisce dov'è che sbagli...

catch (SQLException e) {
e.printStackTrace(); <--nn sono sicuro sia così però è na roba simile
}


P.S. potrebbbero essere tutte cagate :asd:

Corvo80
23-01-2006, 13:31
Magari al posto di "locale" va "localhost" (o 127.0.0.1)? o la tua macchina si chiama locale :confused:

Evidentemente ti è sfuggita la mia nota... :rolleyes:

x Zeus: grazie ora provo...

Corvo80
23-01-2006, 14:00
Nisba: nè l'uno nè l'altro. L'eccezione che mi dà il compilatore è

[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.

Ma ho verificato:

a) Il nome del PC è esatto e la macchina lo pinga.
b) Il protocollo TCP/IP è enabled.
c) La porta è corretta.
d) Il database server è avviato (tant'è che riesco ad accedervi tranquillamente con qualunque altro applicativo).
e) User e Password sono esatti, li ho verificati tramite altri mezzi.


... ma cosa cavolo succede?!!! :confused:

Cryingcrow
23-01-2006, 22:12
Ops sorry, non avevo letto la nota in fondo..

Ho letto che il problema potrebbe essere proprio il nome della macchina, prova a inserire l'ip direttamente del pc...

forse qua trovi qualcosa http://forum.java.sun.com/thread.jspa?threadID=419214 è la prima cosa che mi è uscita cercando il tuo errore su gugol (e dove ho letto dell'ip..)

byez

Corvo80
24-01-2006, 07:30
Ops sorry, non avevo letto la nota in fondo..

Ho letto che il problema potrebbe essere proprio il nome della macchina, prova a inserire l'ip direttamente del pc...

forse qua trovi qualcosa http://forum.java.sun.com/thread.jspa?threadID=419214 è la prima cosa che mi è uscita cercando il tuo errore su gugol (e dove ho letto dell'ip..)

byez

No il nome della macchina non può essere dato che lo pinga e che se provo con un altro server (sempre specificando il nome) funziona. Ho provato anche con l'indirizzo IP ma non c'è niente da fare...

BOH?!!!

Corvo80
26-01-2006, 13:24
Uppo nella speranza che qualcuno possa avere un'illuminazione...

:mc:

ginogino65
05-04-2006, 16:22
Uppo nella speranza che qualcuno possa avere un'illuminazione...

:mc:

Credo di avere trovato il problema.

Il drive jdbc di microsoft per sql server non supporta le trusted SQL Server connection, trovi maggiori dettagli qui:

http://support.microsoft.com/default.aspx?scid=kb;en-us;313100

con il codice della prima pagina modificando la connessione in questo modo:

connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.1.60:1433;DatabaseName=Archivio;user=pippo;password=cane");

il codice funziona, purtruppo l'utente pippo deve essere un utente di Sql server e non facente parte di un dominio.

ginogino65
06-04-2006, 18:21
Credo di avere trovato il problema.

Il drive jdbc di microsoft per sql server non supporta le trusted SQL Server connection, trovi maggiori dettagli qui:

http://support.microsoft.com/default.aspx?scid=kb;en-us;313100

con il codice della prima pagina modificando la connessione in questo modo:

connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.1.60:1433;DatabaseName=Archivio;user=pippo;password=cane");

il codice funziona, purtruppo l'utente pippo deve essere un utente di Sql server e non facente parte di un dominio.


Ho trovato un driver jdbc open source qui:

http://jtds.sourceforge.net/

con questo driver sono riuscito ad avere una connessione trusted utilizzando un utente del dominio, il codice è questo:

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

public class TestConnessione {
public static void main(String args[]) {

// TODO Auto-generated method stub
Connection connection = null;
try {
// String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String driverName = "net.sourceforge.jtds.jdbc.Driver";
String serverName = "192.168.1.60";
String nomedatabase = "Archivio";
String portNumber = "1433";
String mydatabase = serverName + ":" + portNumber;
String nomedominio = "CICERONE";
String url = "jdbc:jtds:sqlserver://" + mydatabase + ";Database=" + nomedatabase + ";domain=" + nomedominio; // a JDBC url
String username = "ginogino";
String password = "federica74942";

// Load the JDBC driver
Class.forName(driverName);

// Create a connection to the database
connection = DriverManager.getConnection(url, username, password);


// Execute a query
Statement stmt = connection.createStatement();
String sql;
sql="SELECT CODFISC, COGNOMENOME FROM tbPersonale order by COGNOMENOME;";
ResultSet rs = stmt.executeQuery(sql);

// Estrazione Dati
while(rs.next() ) {

// Legge i valori
String CODFISC = rs.getString("CODFISC");
String COGNOMENOME = rs.getString("COGNOMENOME");

// Visualizza i dati
System.out.print("Codice Fiscale: " + CODFISC );
System.out.println("Cognome e Nome: " + COGNOMENOME );

}



} catch (ClassNotFoundException e) {
System.out.println("Could not find the database driver");
} catch (SQLException e) {
System.out.println("Could not connect to the database");
}


}
}