update suitable read found for example create java sqlite jdbc

java - suitable - ¿Qué significa ''Class.forName("org.sqlite.JDBC");'' ¿hacer?



sqlite-jdbc maven (2)

Intento crear una aplicación simple con una base de datos SQLite. Elegí usar el controlador SQLiteJDBC .

El siguiente código está tomado del sitio web anterior. Mi pregunta es sobre la línea después del vacío público estático principal ...

Se lee: Class.forName("org.sqlite.JDBC");

Mi pregunta es, ¿qué significa esta línea? Y que hace? No parece estar conectado con el resto del código. Class.forName() debería devolver una clase, pero la línea parece estar sola dentro del cuerpo. Cualquier cosa que devuelva no es utilizada por otra parte del código, eso puedo ver.

Por favor ayuda a aclarar esto. Gracias por adelantado.

public class Test { public static void main(String[] args) throws Exception { Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db"); Statement stat = conn.createStatement(); stat.executeUpdate("drop table if exists people;"); stat.executeUpdate("create table people (name, occupation);"); PreparedStatement prep = conn.prepareStatement( "insert into people values (?, ?);"); prep.setString(1, "Gandhi"); prep.setString(2, "politics"); prep.addBatch(); prep.setString(1, "Turing"); prep.setString(2, "computers"); prep.addBatch(); conn.setAutoCommit(false); prep.executeBatch(); conn.setAutoCommit(true); ResultSet rs = stat.executeQuery("select * from people;"); while (rs.next()) { System.out.println("name = " + rs.getString("name")); System.out.println("job = " + rs.getString("occupation")); } rs.close(); conn.close(); } }


Carga una clase dinámicamente. ¿Qué hace el método Class.forname? es un buen artículo al respecto y también explica por qué los controladores de base de datos lo necesitan:

Veamos por qué necesita Class.forName () para cargar un controlador en la memoria. Todos los controladores JDBC tienen un bloque estático que se registra con DriverManager y DriverManager tiene un inicializador estático solamente.

El controlador JDBC de MySQL tiene un inicializador estático como este:

static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can''t register driver!"); } }

JVM ejecuta el bloque estático y el controlador se registra con DriverManager.

Necesita una conexión de base de datos para manipular la base de datos. Para crear la conexión a la base de datos, la clase DriverManager debe saber qué controlador de base de datos desea usar. Lo hace iterando sobre la matriz (internamente un Vector) de los controladores que se han registrado con ella y llama al método acceptURL (url) en cada controlador de la matriz, pidiendo efectivamente al controlador que le diga si puede o no manejar el JDBC URL.


La declaración Class.forName se está asegurando de que la clase que implementa el controlador JDBC para sqlite3 se cargue y se registre en el mecanismo de fábrica de JDBC.

Cuando llama a DriverManager.getConnection (), busca las clases que están registradas y dicen que pueden manejar la cadena de conexión. Si no se encuentra dicha clase, no puede crear la conexión.