Ich lese die Java-JDBC-Spezifikation (vr. 4) und habe folgende Anweisung gefunden:
DataSource - Diese Schnittstelle wurde in JDBC 2.0 eingeführt. Optional Paket-API Es wird gegenüber DriverManager bevorzugt, da es .__ erlaubt. Details zur zugrunde liegenden Datenquelle, damit sie für die transparent sind. Anwendung
Was ich versuche zu verstehen, ist der Unterschied zwischen einer Connection
und einer DataSource
und warum es existiert. Ich meine, der Block oben besagt, dass die Details einer Datenquelle für die Anwendung transparent sind, aber die Datenbankeigenschaften wie Benutzername, Kennwort, URL usw. in einer Eigenschaftendatei nicht externalisieren und dann DriverManager auf dieselbe Weise verwenden.
Und wird die DataSource
-Schnittstelle nur so erstellt, dass sie auf übliche Weise Verbindungen zurückgibt, die gepoolt werden können usw.? Implementiert der Anwendungsserver in Java EE diese Schnittstelle und die Anwendungen, die bereitgestellt werden, um einen Verweis auf eine Datenquelle anstelle einer Verbindung zu erhalten?
Bessere Skalierbarkeit und Wartung
Für den Treibermanager müssen Sie alle Details (Host, Port, Benutzername, Kennwort, Treiberklasse) kennen, um eine Verbindung zur DB herzustellen und Verbindungen herzustellen. Das Externalisieren der Elemente in einer Eigenschaftendatei ändert nichts an der Tatsache, dass Sie sie kennen müssen.
Bei Verwendung einer DataSource müssen Sie nur den JNDI-Namen kennen. Der AppServer kümmert sich um die Details und wird nicht vom Hersteller der Clientanwendung, sondern von einem Administrator konfiguriert, in dem die Anwendung gehostet wird.
Skalierbarkeit:
Angenommen, Sie müssen selbst Verbindungen erstellen. Wie würden Sie mit der Änderung der Last umgehen? Manchmal haben Sie 10 Benutzer. Manchmal haben Sie 1000 Benutzer. Sie können nicht einfach eine Verbindung herstellen, wenn Sie eine benötigen, und später "freigeben" Verbindungen verlassen, was zum Verbindungs-Pooling führt. DriverManager stellt dies nicht zur Verfügung, DataSource jedoch nicht.
Wenn Sie einen Verbindungspool programmieren möchten, müssen Sie DriverManager verwenden, ansonsten gehen Sie zu DataSource.
Der folgende Code zeigt zwei Wege, um eine Verbindung herzustellen.
Bei mySqlDataSource
ist es nicht erforderlich, die URL zu kennen, da diese Zeile kommentiert ist.
public class MySqlDataSourceTest {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
/************** using MysqlDataSource starts **************/
MysqlDataSource d = new MysqlDataSource();
d.setUser("root");
d.setPassword("root");
// d.setUrl("jdbc:mysql://localhost:3306/manavrachna");
d.setDatabaseName("manavrachna");
Connection c = (Connection) d.getConnection();
/************** using MysqlDataSource ends**************/
/************** using DriverManager start **************/
Class.forName("com.mysql.jdbc.Driver");
Connection c=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/manavrachna","root","root");
/************** using DriverManager ends **************/
Statement st=(Statement) c.createStatement();
ResultSet rs=st.executeQuery("select id from employee");
while(rs.next())
{
System.out.println(rs.getInt(1));
}
}
}
Wir können eine Verbindung mit einer Datenquelle wie folgt herstellen. Verwenden Sie die Verbindung, um eine Datenbankabfrage auszuführen.
DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName);
Connection connection = datasource.getConnection();
DataSource-Objekte können Verbindungspools und verteilte Transaktionen bereitstellen. Daher müssen Sie DataSource verwenden, wenn Sie eine oder beide dieser Funktionen benötigen.