View Full Version : [Java] connessione ad un Data Base SQL Server
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");
}
}
}
ClassNotFoundException?
penso che tu non abbia aggiunto correttamente al classpath il driver.
A quanto pare non sono affatto sicuro di aver aggiornato il CLASSPATH... qualcuno mi spiega come si fa?
:muro:
Scusate, ho risolto! :D
(dovrei proprio imparare ad avere più pazienza, vero?)
Scusate, ho risolto! :D
era quello?
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?
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:
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...
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
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?!!!
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");
}
}
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.