Соединение con = DriverManager.getConnection (& ldquo; jdbc: mysql: // localhost / managementment & rdquo;, & ldquo; root & rdquo;, & ldquo; & rdquo;); НЕ ПОДКЛЮЧИТЬ [дублировать]

Надеюсь, он все равно может помочь кому-то, но вот пакет npm, который я создал:

https://www.npmjs.com/package/ng-node-compile

272
задан cricket_007 7 April 2018 в 19:53
поделиться

12 ответов

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();
179
ответ дан Sean Owen 15 August 2018 в 14:43
поделиться
  • 1
    как другие примеры используют com.mysql.jdbc.Driver? этот метод лучше? – Jason S 21 May 2010 в 04:21
  • 2
    Я думаю, что это старый класс Driver, который работает со старым драйвером. MysqlDataSource реализует javax.sql.DataSource, который является новым механизмом. – Sean Owen 21 May 2010 в 10:00
  • 3
    Привет @SeanOwen Интересно, почему мы закрываем rs и stmt? Почему не только conn? – Kamuran Sönecek 14 April 2016 в 06:37
  • 4
    Возможно, вам следует добавить dataSource.setDatabaseName («база данных»). – Myoch 22 May 2016 в 11:14
  • 5
    Это хорошая практика, чтобы закрыть () вещи явно, хотя это больше кода. Любая хорошая реализация должна будет закрыть ресурсы, когда соединение закроется, да. Рассмотрим другие контексты, в которых вы хотите повторно использовать оператор или соединение. В Java-try-with-resources вы все равно получаете такое поведение: – Sean Owen 29 May 2016 в 13:22

Вот пошаговое объяснение, как установить MySQL и JDBC и как его использовать:

  1. Загрузите и установите сервер MySQL. Просто делайте это обычным способом. Помните номер порта, когда вы его изменили. По умолчанию 3306.
  2. Загрузите драйвер JDBC и поместите в путь к классам, извлеките ZIP-файл и поместите содержащий JAR-файл в путь к классам. Спецификатор JDBC для конкретного поставщика - это конкретная реализация JDBC API ( учебника здесь ). Если вы используете IDE, например Eclipse или Netbeans, вы можете добавить его в путь к классам, добавив JAR-файл в качестве Library в Путь сборки в свойствах проекта. Если вы делаете это «простой ваниль» в командной консоли, вам нужно указать путь к JAR-файлу в аргументе -cp или -classpath при выполнении вашего Java-приложения.
    java -cp .;/path/to/mysql-connector.jar com.example.YourClass
    Здесь есть ., чтобы добавить каталог current в путь к классам, чтобы он мог найти com.example.YourClass, а ; - разделитель классов, как в Windows. В Unix и клоны : должны использоваться.
  3. Создайте базу данных в MySQL. Давайте создадим базу данных javabase. Вы, конечно, хотите World Domination, так что давайте использовать UTF-8.
    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Создайте пользователя для Java и grant для доступа. Просто потому, что использование root является плохой практикой.
    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    
    Да, java - это имя пользователя, а password - пароль здесь.
  5. Определите 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 / hosts. port: порт TCP / IP, в котором слушает сервер MySQL. Это по умолчанию 3306. databasename: имя базы данных, к которой вы хотите подключиться. Это javabase. Итак, конечный URL должен выглядеть так:
    jdbc:mysql://localhost:3306/javabase
  6. Проверьте соединение с 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. Сервер БД отключен. Сервер БД не принимает соединения 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/ . Это ошибка первого запуска.

413
ответ дан Aaron Hall 15 August 2018 в 14:43
поделиться

Соединение 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);
}
4
ответ дан AJC 15 August 2018 в 14:43
поделиться
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);
20
ответ дан heffaklump 15 August 2018 в 14:43
поделиться

вам понадобится 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");
}
3
ответ дан kapil das 15 August 2018 в 14:43
поделиться

Короткие и слабые коды.

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();
    }
3
ответ дан KhiLan PaTeL 15 August 2018 в 14:43
поделиться

Вот минимальный объем данных, необходимых для получения данных из базы данных 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();

Добавлять обработку исключений, конфигурацию и т. д.

13
ответ дан Kilian Foth 15 August 2018 в 14:43
поделиться

Инициализировать константы базы данных

Создать постоянное имя базы данных, имя пользователя, пароль, 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();
}

Это все :) Если что-нибудь улучшить, отредактируйте его! Надеюсь, это полезно.

29
ответ дан Madan Sapkota 15 August 2018 в 14:43
поделиться
  • 1
    Марк, должен ли каждый класс поддерживать собственный отдельный экземпляр MysqlConnect, открытый во все времена - при условии, что им необходимо взаимодействовать с данными? Мне просто интересно, как эта настройка работает между классами. – Michael Sims 19 November 2017 в 17:42

Соединение с 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");  
0
ответ дан Sarat Chandra 15 August 2018 в 14:43
поделиться

Вы можете увидеть все шаги для подключения базы данных MySQL из приложения Java здесь . Для другой базы данных вам просто нужно изменить драйвер только на первом шаге. Убедитесь, что вы предоставили правильный путь к базе данных и исправили имя пользователя и пароль.

Посетите http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA

3
ответ дан xlm 15 August 2018 в 14:43
поделиться

Connection Я использовал некоторое время назад, это выглядело как самый простой способ, но также была рекомендация сделать там if утверждение - точно

Connection con = DriverManager.getConnection(
                     "jdbc:myDriver:DatabaseName",
                     dBuserName,
                     dBuserPassword);
if (con != null){
 //..handle your code there 
}

Или что-то вроде этого путь:)

Возможно, есть какой-то случай, в то время как getConnection может возвращать null:)

2
ответ дан xxxvodnikxxx 15 August 2018 в 14:43
поделиться

Короткие коды

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;
    }
}
0
ответ дан YakovL 15 August 2018 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: