Надеюсь, он все равно может помочь кому-то, но вот пакет npm, который я создал:
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();
Вот пошаговое объяснение, как установить MySQL и JDBC и как его использовать:
3306
. -cp
или -classpath
при выполнении вашего Java-приложения. java -cp .;/path/to/mysql-connector.jar com.example.YourClassЗдесь есть
.
, чтобы добавить каталог current в путь к классам, чтобы он мог найти com.example.YourClass
, а ;
- разделитель классов, как в Windows. В Unix и клоны :
должны использоваться. javabase
. Вы, конечно, хотите World Domination, так что давайте использовать UTF-8. CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
root
является плохой практикой. CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Да, java
- это имя пользователя, а password
- пароль здесь. jdbc:mysql://hostname:port/databasename
hostname
: имя хоста, на котором установлен сервер MySQL. Если он установлен на том же компьютере, где вы запускаете Java-код, вы можете просто использовать localhost
. Он также может быть IP-адресом, например 127.0.0.1
. Если вы столкнулись с проблемами подключения и с помощью 127.0.0.1
вместо localhost
решили проблему, у вас возникла проблема в конфигурации вашей сети / DNS / hosts. port
: порт TCP / IP, в котором слушает сервер MySQL. Это по умолчанию 3306
. databasename
: имя базы данных, к которой вы хотите подключиться. Это javabase
. Итак, конечный URL должен выглядеть так: jdbc:mysql://localhost:3306/javabase
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. Сервер БД отключен. Сервер БД не принимает соединения TCP / IP. У сервера БД закончились соединения. Что-то между Java и DB блокирует соединения, например. брандмауэр или прокси. Чтобы решить тот или иной, выполните следующие советы: Проверьте и проверьте их с помощью ping
. Обновите DNS или используйте IP-адрес в URL-адрес JDBC. Проверьте его на основе my.cnf
базы данных MySQL. Запустите БД. Убедитесь, что mysqld запущен без --skip-networking option
. Перезагрузите базу данных и исправьте свой код соответствующим образом, чтобы он закрывал соединения в finally
. Отключите брандмауэр и / или настройте брандмауэр / прокси, чтобы разрешить / переслать порт. Обратите внимание, что закрытие Connection
чрезвычайно важно. Если вы не закрываете соединения и не получаете их много за короткое время, тогда в базе данных могут отсутствовать соединения, и ваше приложение может сломаться. Всегда приобретайте Connection
в инструкции try-with-resources
. Или, если вы еще не на Java 7, явно закрывайте его в finally
блока try-finally
. Закрытие в finally
заключается только в том, чтобы оно было закрыто, а также в случае исключения. Это также относится к Statement
, PreparedStatement
и ResultSet
. Это было так далеко, что касается возможности подключения. Вы можете найти здесь более продвинутое руководство по загрузке и хранению полнофункциональных объектов модели Java в базе данных с помощью базового класса DAO.
Использование шаблона Singleton для соединение с БД является плохим подходом. См. Также другие вопросы: http://stackoverflow.com/q/9428573/ . Это ошибка первого запуска.
Соединение JDBC MySQL с использованием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);
}
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);
вам понадобится 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");
}
Короткие и слабые коды.
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-сервера 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();
}
Вот минимальный объем данных, необходимых для получения данных из базы данных 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();
Добавлять обработку исключений, конфигурацию и т. д.
Инициализировать константы базы данных
blockquote>Создать постоянное имя базы данных, имя пользователя, пароль, 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
Инициализировать Соединение и свойства
blockquote>Как только соединение установлено, его лучше сохранить для целей повторного использования.
// init connection object private Connection connection; // init properties object private Properties properties;
Создать свойства
blockquote>Объект свойства содержит информацию о соединении, проверьте, уже ли он установлен.
// 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; }
Подключить базу данных
blockquote>Теперь подключиться к базы данных с использованием констант и свойств, инициализированных.
// 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; }
Отключить базу данных
blockquote>Как только вы закончите работу с базой данных, просто закройте соединение.
// disconnect database public void disconnect() { if (connection != null) { try { connection.close(); connection = null; } catch (SQLException e) { e.printStackTrace(); } } }
Все вместе
blockquote>Используйте этот класс
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(); } } } }
Как использовать?
blockquote>Инициализировать класс базы данных.
// !_ 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(); }
Это все :) Если что-нибудь улучшить, отредактируйте его! Надеюсь, это полезно.
Соединение с 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 из приложения Java здесь . Для другой базы данных вам просто нужно изменить драйвер только на первом шаге. Убедитесь, что вы предоставили правильный путь к базе данных и исправили имя пользователя и пароль.
Посетите http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA
Connection
Я использовал некоторое время назад, это выглядело как самый простой способ, но также была рекомендация сделать там if
утверждение - точно
Connection con = DriverManager.getConnection(
"jdbc:myDriver:DatabaseName",
dBuserName,
dBuserPassword);
if (con != null){
//..handle your code there
}
Или что-то вроде этого путь:)
Возможно, есть какой-то случай, в то время как getConnection
может возвращать null
:)
Короткие коды
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;
}
}
com.mysql.jdbc.Driver
? этот метод лучше? – Jason S 21 May 2010 в 04:21MysqlDataSource
реализуетjavax.sql.DataSource
, который является новым механизмом. – Sean Owen 21 May 2010 в 10:00rs
иstmt
? Почему не толькоconn
? – Kamuran Sönecek 14 April 2016 в 06:37