libreria - Conectar Java a una base de datos MySQL
mysql java (12)
¿Cómo te conectas a una base de datos MySQL en Java?
Cuando lo intento, me sale
java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
O
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
O
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
Inicializar constantes de base de datos
Crear propiedades constantes nombre de usuario, contraseña, URL y controladores, límite de sondeo, etc.
// init database constants
private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250"; // set your own limit
Inicializar conexión y propiedades
Una vez que se establece la conexión, es mejor guardarla para reutilizarla.
// init connection object
private Connection connection;
// init properties object
private Properties properties;
Crear propiedades
El objeto de propiedades contiene la información de conexión, verifique si ya está establecida.
// create properties
private Properties getProperties() {
if (properties == null) {
properties = new Properties();
properties.setProperty("user", USERNAME);
properties.setProperty("password", PASSWORD);
properties.setProperty("MaxPooledStatements", MAX_POOL);
}
return properties;
}
Conectar la base de datos
Ahora conéctese a la base de datos usando las constantes y las propiedades inicializadas.
// connect database
public Connection connect() {
if (connection == null) {
try {
Class.forName(DATABASE_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, getProperties());
} catch (ClassNotFoundException | SQLException e) {
// Java 7+
e.printStackTrace();
}
}
return connection;
}
Desconectar la base de datos
Una vez que haya terminado con las operaciones de la base de datos, simplemente cierre la conexión.
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Todo junto
Utilice esta clase MysqlConnect
directamente después de cambiar el nombre de la base de datos, el nombre de usuario y la contraseña, etc.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class MysqlConnect {
// init database constants
private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250";
// init connection object
private Connection connection;
// init properties object
private Properties properties;
// create properties
private Properties getProperties() {
if (properties == null) {
properties = new Properties();
properties.setProperty("user", USERNAME);
properties.setProperty("password", PASSWORD);
properties.setProperty("MaxPooledStatements", MAX_POOL);
}
return properties;
}
// connect database
public Connection connect() {
if (connection == null) {
try {
Class.forName(DATABASE_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, getProperties());
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
return connection;
}
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
¿Cómo utilizar?
Inicialice la clase de base de datos.
// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();
En algún otro lugar en su código ...
String sql = "SELECT * FROM ``";
try {
PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql);
... go on ...
... go on ...
... DONE ....
} catch (SQLException e) {
e.printStackTrace();
} finally {
mysqlConnect.disconnect();
}
Esto es todo :) Si hay algo que mejorar edítalo! Espero que esto sea de ayuda.
Aquí es lo mínimo que necesita para obtener datos de una base de datos MySQL:
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/foo", "root", "password");
Statement stmt = conn.createStatement();
stmt.execute("SELECT * FROM `FOO.BAR`");
stmt.close();
conn.close();
Agregue manejo de excepciones, configuración, etc. a gusto.
Aquí hay una explicación paso a paso de cómo instalar MySQL y JDBC y cómo usarlo:
Download e instale el servidor MySQL . Solo hazlo de la manera habitual. Recuerde el número de puerto siempre que lo haya cambiado. Es por defecto
3306
.Download el controlador JDBC y póngalo en classpath , extraiga el archivo ZIP y ponga el archivo JAR que contiene en classpath. El controlador JDBC específico del proveedor es una implementación concreta de la API de JDBC ( tutorial aquí ).
Si está utilizando un IDE como Eclipse o Netbeans, entonces puede agregarlo a la ruta de clases agregando el archivo JAR como Biblioteca a la Ruta de compilación en las propiedades del proyecto.
Si lo está haciendo "simple vainilla" en la consola de comandos, entonces necesita especificar la ruta al archivo JAR en el argumento
-cp
o-classpath
al ejecutar su aplicación Java.java -cp .;/path/to/mysql-connector.jar com.example.YourClass
El
.
solo está allí para agregar el directorio actual a la ruta decom.example.YourClass
para que pueda ubicarcom.example.YourClass
y the;
es el separador de classpath como lo es en Windows. En Unix y clones:
debe utilizar.Crear una database de database en MySQL . Vamos a crear una base de datos
javabase
. Por supuesto, usted quiere la dominación mundial, así que también usemos UTF-8.CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Crea un usuario para Java y grant acceso . Simplemente porque usar
root
es una mala práctica.CREATE USER ''java''@''localhost'' IDENTIFIED BY ''password''; GRANT ALL ON javabase.* TO ''java''@''localhost'' IDENTIFIED BY ''password'';
Sí,
java
es el nombre de usuario y lapassword
es la contraseña aquí.Determine la URL de JDBC . Para conectar la base de datos MySQL utilizando Java, necesita una URL JDBC en la siguiente sintaxis:
jdbc:mysql://hostname:port/databasename
hostname
: el nombre de host donde se instala el servidor MySQL. Si está instalado en la misma máquina donde ejecuta el código Java, entonces puede usarlocalhost
. También puede ser una dirección IP como127.0.0.1
. Si encuentra problemas de conectividad y el uso de127.0.0.1
lugar delocalhost
resolvió, entonces tiene un problema en su configuración de red / DNS / hosts.port
: elport
TCP / IP donde el servidor MySQL escucha. Esto es por defecto3306
.databasename
: el nombre de la base de datos a la que desea conectarse. Eso esjavabase
.
Así que la URL final debería verse como:
jdbc:mysql://localhost:3306/javabase
Probar la conexión a MySQL usando Java . Cree una clase Java simple con un método
main()
para probar la conexión.String url = "jdbc:mysql://localhost:3306/javabase"; String username = "java"; String password = "password"; System.out.println("Connecting database..."); try (Connection connection = DriverManager.getConnection(url, username, password)) { System.out.println("Database connected!"); } catch (SQLException e) { throw new IllegalStateException("Cannot connect the database!", e); }
Si obtiene una
SQLException: No suitable driver
, entonces significa que el controlador JDBC no se cargó automáticamente o que la URL de JDBC es incorrecta (es decir, ninguno de los controladores cargados lo reconoció). Normalmente, un controlador JDBC 4.0 se debe cargar automáticamente cuando lo suelta en el classpath de tiempo de ejecución. Para excluir uno y otro, siempre puede cargarlo manualmente de la siguiente manera:System.out.println("Loading driver..."); try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Cannot find the driver in the classpath!", e); }
Tenga en cuenta que la llamada
newInstance()
no es necesaria aquí. Es solo para arreglar el antiguo yorg.gjt.mm.mysql.Driver
. Explicación aquí . Si esta línea lanza laClassNotFoundException
, entonces el archivo JAR que contiene la clase de controlador JDBC simplemente no se colocó en la ruta de clase.Tenga en cuenta que no necesita cargar el controlador cada vez que se conecte. Solo una vez durante el inicio de la aplicación es suficiente.
Si obtiene una
SQLException: Connection refused
o seConnection timed out
o una excepción deCommunicationsException: Communications link failure
específica de MySQLCommunicationsException: Communications link failure
, entonces significa que no se puede acceder a la base de datos. Esto puede tener una o más de las siguientes causas:- La dirección IP o el nombre de host en la URL de JDBC está mal.
- El nombre de host en la URL de JDBC no es reconocido por el servidor DNS local.
- El número de puerto falta o es incorrecto en la URL de JDBC.
- El servidor DB está caído.
- El servidor DB no acepta conexiones TCP / IP.
- El servidor DB se ha quedado sin conexiones.
- Algo entre Java y DB está bloqueando las conexiones, por ejemplo, un firewall o proxy.
Para resolver uno u otro, siga los siguientes consejos:
- Verifica y prueba con
ping
. - Actualice el DNS o use la dirección IP en la URL de JDBC en su lugar.
-
my.cnf
basado enmy.cnf
de MySQL DB. - Iniciar el DB.
- Verifique si mysqld se inicia sin la
--skip-networking option
. - Reinicie la base de datos y arregle su código en consecuencia para que cierre las conexiones
finally
. - Desactive el firewall y / o configure el firewall / proxy para permitir / reenviar el puerto.
Tenga en cuenta que cerrar la
Connection
es extremadamente importante. Si no cierra las conexiones y obtiene muchas de ellas en poco tiempo, entonces la base de datos puede quedarse sin conexiones y su aplicación puede fallar. Siempre adquiera laConnection
en una declaracióntry-with-resources
. O si aún no está en Java 7, ciérrelo explícitamente enfinally
un bloquetry-finally
.finally
cerrar solo es para asegurar que se cierre también en caso de una excepción. Esto también se aplica aStatement
,PreparedStatement
yResultSet
.
Eso fue todo lo que concierne a la conectividad. Puede encontrar here un tutorial más avanzado sobre cómo cargar y almacenar objetos de modelo Java con plena capacidad de funcionamiento en una base de datos con la ayuda de una clase DAO básica.
El uso de un patrón Singleton para la conexión DB es un mal enfoque. Vea entre otras preguntas: http://.com/q/9428573/ . Este es un error # 1 para principiantes.
Código corto y dulce.
try
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver Loaded");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root","");
//Database Name - testDB, Username - "root", Password - ""
System.out.println("Connected...");
}
catch(Exception e)
{
e.printStackTrace();
}
Para el servidor SQL 2012
try
{
String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123";
//KHILAN is Host and 1433 is port number
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("Driver Loaded");
conn = DriverManager.getConnection(url);
System.out.println("Connected...");
}
catch(Exception e)
{
e.printStackTrace();
}
Conexión MySQL JDBC:
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password");
Statement stmt=con.createStatement();
stmt = con.createStatement();
ResultSet rs=stmt.executeQuery("Select * from Table");
MySQL JDBC Connection con useSSL.
private String db_server = BaseMethods.getSystemData("db_server");
private String db_user = BaseMethods.getSystemData("db_user");
private String db_password = BaseMethods.getSystemData("db_password");
private String connectToDb() throws Exception {
String jdbcDriver = "com.mysql.jdbc.Driver";
String dbUrl = "jdbc:mysql://" + db_server +
"?verifyServerCertificate=false" +
"&useSSL=true" +
"&requireSSL=true";
System.setProperty(jdbcDriver, "");
Class.forName(jdbcDriver).newInstance();
Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password);
Statement statement = conn.createStatement();
String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "/"" + letterID + "/"";
ResultSet resultSet = statement.executeQuery(query);
resultSet.next();
return resultSet.getString(1);
}
Puede ver todos los pasos para conectar la base de datos MySQL desde la aplicación Java here . Para otra base de datos, solo necesita cambiar el controlador en el primer paso solamente. Asegúrese de proporcionar la ruta correcta a la base de datos y el nombre de usuario y la contraseña correctos.
Visite here
necesitas tener el tarro de conector mysql en tu classpath.
En Java, la API de JDBC hace todo con bases de datos. utilizando JDBC podemos escribir aplicaciones Java para
1. Envíe consultas o actualice SQL a DB (cualquier base de datos relacional) 2. Recupere y procese los resultados de DB
Con los siguientes tres pasos podemos recuperar datos de cualquier base de datos.
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
Connection
que estaba usando hace algún tiempo, parecía la forma más fácil, pero también había recomendaciones para hacer allí if
declaración era exactamente
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
if (con != null){
//..handle your code there
}
O algo así de esa manera :)
Probablemente hay algún caso, mientras que getConnection
puede devolver null
:)
DriverManager
es una forma bastante antigua de hacer las cosas. La mejor manera es obtener un DataSource
, ya sea buscando uno que el contenedor del servidor de aplicaciones ya haya configurado para usted:
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");
o crear una instancia y configurar uno desde su controlador de base de datos directamente:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");
y luego obtener conexiones de él, igual que arriba:
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
Código corto
public class DB {
public static Connection c;
public static Connection getConnection() throws Exception {
if (c == null) {
Class.forName("com.mysql.jdbc.Driver");
c =DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASE", "USERNAME", "Password");
}
return c;
}
// Send data TO Database
public static void setData(String sql) throws Exception {
DB.getConnection().createStatement().executeUpdate(sql);
}
// Get Data From Database
public static ResultSet getData(String sql) throws Exception {
ResultSet rs = DB.getConnection().createStatement().executeQuery(sql);
return rs;
}
}
String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase";
String user = "username";
String password = "password";
// Load the Connector/J driver
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Establish connection to MySQL
Connection conn = DriverManager.getConnection(url, user, password);