Подключение Java к базе данных MySQL
Как вы подключаетесь к базе данных MySQL в Java?
Ответы
Ответ 1
DriverManager
- довольно старый способ делать вещи. Лучше всего получить DataSource
, либо посмотрев, что ваш контейнер сервера приложений уже настроен для вас:
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");
или создать экземпляр и настроить его непосредственно из драйвера базы данных:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");
а затем получить от него соединения, такие же, как указано выше:
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
Ответ 2
Вот пошаговое объяснение, как установить MySQL и JDBC и как его использовать:
-
Download и установите сервер MySQL. Просто делайте это обычным способом. Помните номер порта, когда вы его изменили. Он по умолчанию 3306
.
-
Download драйвер JDBC и поместив путь к классам, извлеките ZIP файл и поместите содержащий JAR файл в пути к классам. Спецификатор JDBC для конкретного поставщика - это конкретная реализация JDBC API (учебник здесь).
Если вы используете IDE, например Eclipse или Netbeans, вы можете добавить его в путь к классам, добавив JAR файл в качестве библиотеки в путь сборки в свойствах проекта.
Если вы делаете это "plain vanilla" в командной консоли, вам нужно указать путь к JAR файлу в аргументе -cp
или -classpath
при выполнении вашего Java-приложения.
java -cp .;/path/to/mysql-connector.jar com.example.YourClass
.
находится там, чтобы добавить текущий каталог в путь к классам, чтобы он мог найти com.example.YourClass
, а ;
- это разделитель класса, как и в Windows. В Unix и клоны следует использовать :
.
-
Создайте database в MySQL. Позвольте создать базу данных javabase
. Вы, разумеется, хотите World Domination, поэтому также используйте UTF-8.
CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Создать пользователя для Java и grant он имеет доступ к. Просто потому, что использование root
является плохой практикой.
CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Да, java
- это имя пользователя, а password
- пароль здесь.
-
Определить URL-адрес JDBC. Для подключения базы данных MySQL с использованием Java вам нужен URL-адрес JDBC в следующем синтаксисе:
jdbc:mysql://hostname:port/databasename
-
hostname
: имя хоста, в котором установлен сервер MySQL. Если он установлен на том же компьютере, где вы запускаете Java-код, вы можете просто использовать localhost
. Он также может быть IP-адресом, например 127.0.0.1
. Если вы столкнулись с проблемами подключения и с помощью 127.0.0.1
вместо localhost
решили это, у вас возникла проблема в конфигурации вашей сети/DNS/хоста.
-
port
: порт TCP/IP, в котором слушает сервер MySQL. Это по умолчанию 3306
.
-
databasename
: имя базы данных, к которой вы хотите подключиться. Это javabase
.
Итак, конечный URL-адрес должен выглядеть так:
jdbc:mysql://localhost:3306/javabase
-
Проверьте подключение к MySQL с помощью Java. Создайте простой Java-класс с помощью метода main()
для проверки соединения.
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);
}
Если вы получаете SQLException: No suitable driver
, то это означает, что либо драйвер JDBC не был полностью загружен, либо неправильный URL JDBC (т.е. он не был распознан ни одним из загруженных драйверов). Как правило, драйвер JDBC 4.0 должен быть автоматически загружен, когда вы просто бросаете его в путь к классам времени выполнения. Чтобы исключить одно и другое, вы всегда можете вручную загрузить его, как показано ниже:
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);
}
Обратите внимание, что вызов newInstance()
не. Это просто исправить старую и багги org.gjt.mm.mysql.Driver
. Объяснение здесь. Если эта строка выбрасывает ClassNotFoundException
, то JAR файл, содержащий класс драйвера JDBC, просто не помещается в путь к классам.
Обратите внимание, что вам не нужно загружать драйвер каждый раз перед подключением. Только один раз во время запуска приложения достаточно.
Если вы получаете SQLException: Connection refused
или Connection timed out
или специфический для MySQL CommunicationsException:
Communications link failure
, то это означает, что БД недоступно. Это может иметь одну или несколько следующих причин:
- Неверный IP-адрес или имя хоста в URL-адрес JDBC.
- Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером.
- Номер порта отсутствует или неверен в URL-адресе JDBC.
- Сервер DB не работает.
- Сервер DB не принимает соединения TCP/IP.
- У сервера БД закончились соединения.
- Что-то между Java и DB блокирует соединения, например. брандмауэр или прокси.
Чтобы решить тот или иной, выполните следующие советы:
- Проверьте и протестируйте их с помощью
ping
.
- Обновите DNS или используйте IP-адрес в URL-адрес JDBC.
- Проверьте его на основе
my.cnf
базы данных MySQL.
- Запустите БД.
- Убедитесь, что mysqld запущен без
--skip-networking option
.
- Перезагрузите базу данных и исправьте свой код соответственно, чтобы он закрывал соединения в
finally
. - Отключите брандмауэр и/или настройте брандмауэр/прокси для разрешения/пересылки порта.
Обратите внимание, что закрытие Connection
имеет значение чрезвычайно. Если вы не закрываете соединения и не получаете их много за короткое время, тогда в базе данных могут отсутствовать соединения, и ваше приложение может сломаться. Всегда приобретайте Connection
в try-with-resources
statement. Или, если вы еще не на Java 7, явно закройте его в finally
блока try-finally
. Закрытие в finally
заключается в том, чтобы обеспечить закрытие, а также в случае исключения. Это также относится к Statement
, PreparedStatement
и ResultSet
.
Это было так далеко, что касается подключения. Вы можете найти здесь более продвинутое руководство по загрузке и хранению полнофункциональных объектов модели Java в базе данных с помощью базового класса DAO.
Использование шаблона Singleton для соединения с БД является плохим подходом. См. Также другие вопросы: fooobar.com/questions/5888/.... Это ошибка первого запуска.
Ответ 3
Инициализировать константы базы данных
Создать постоянное имя базы данных, имя пользователя, пароль, URL и драйверы, лимит опроса и т.д.
// 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
Инициализировать соединение и свойства
Как только соединение будет установлено, его лучше сохранить для повторного использования.
// 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) {
// Java 7+
e.printStackTrace();
}
}
return connection;
}
Отключить базу данных
Как только вы закончите работу с базой данных, просто закройте соединение.
// disconnect database
public void disconnect() {
if (connection != null) {
try {
connection.close();
connection = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Все вместе
Используйте этот класс MysqlConnect
непосредственно после изменения имени_базы, имени пользователя и пароля и т.д.
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();
}
}
}
}
Как использовать?
Инициализировать класс базы данных.
// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();
Где-то еще в вашем коде...
String sql = "SELECT * FROM `stackoverflow`";
try {
PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql);
... go on ...
... go on ...
... DONE ....
} catch (SQLException e) {
e.printStackTrace();
} finally {
mysqlConnect.disconnect();
}
Это все :) Если что-то улучшить, отредактируйте его! Надеюсь, что это будет полезно.
Ответ 4
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);
Ответ 5
Здесь минимально необходимо получить данные из базы данных 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();
Добавьте обработку исключений, конфигурацию и т.д..
Ответ 6
Вы можете увидеть все шаги для подключения базы данных MySQL из приложения Java здесь. Для другой базы данных вам просто нужно изменить драйвер только на первом шаге. Убедитесь, что вы предоставили правильный путь к базе данных и исправли имя пользователя и пароль.
Посетите http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA
Ответ 7
Короткие и слабые коды.
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();
}
Для SQL Server 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();
}
Ответ 8
вам нужно иметь jar-соединитель mysql в вашем пути к классам.
в Java JDBC API делает все с базами данных. с помощью JDBC мы можем писать Java-приложения на
1. Отправлять запросы или обновлять SQL до DB (любая реляционная база данных)
2. Получить и обработать результаты из DB
с тремя шагами мы можем получить данные из любой базы данных
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");
}
Ответ 9
Connection
Я использовал некоторое время назад, это выглядело как самый простой способ, но также были рекомендации сделать там if
statement-exact
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
if (con != null){
//..handle your code there
}
Или что-то вроде этого:)
Вероятно, есть какой-то случай, а getConnection
может возвращать null
:)
Ответ 10
Соединение с MySQL JDBC с использованиемSSL.
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);
}
Ответ 11
Соединение с 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");
Ответ 12
Сокращенный код
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;
}
}