JDBC

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
 
(One intermediate revision by one user not shown)
Line 4: Line 4:
 
|}
 
|}
 
[[Java]]
 
[[Java]]
 +
  
 
== Соединение с базой данных ==
 
== Соединение с базой данных ==
Line 194: Line 195:
  
 
----
 
----
{|style="float:right"
+
[[Java]] · [http://levelup.asistech.org LevelUp] · [http://lib.asistech.org Library] · [http://forum.asistech.org/viewforum.php?f=11 Forum]
|[http://forum.asistech.org/viewforum.php?f=11 Forum]
+
|}
+
[[Java]] · [http://levelup.asistech.org LevelUp] · [http://lib.asistech.org Library]  
+
 
</div>
 
</div>

Latest revision as of 10:27, 5 April 2015

Forum

Java


Contents

[edit] Соединение с базой данных

В описанном ниже примере выполняется подключение к базе данных, с использованием драйвера JDBC

OS: MacOS Leopard
DB server: MySQL (установлен локально)
DB name: hotel (или любая другая база)

В файле /users/peter/database.properties хранятся параметры соединения:

jdbc.drivers=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/hotel
jdbc.username=peter
jdbc.password=WdAi5Rh
jdbc.codepage=useUnicode=true&characterEncoding=cp1251

Следующий метод выполняет соединение с базой данных:

/**
 * @name Соединение с DB MySQL
 * параметры соединения хранятся в файле database.properties
 */
public static Connection getConnection() throws SQLException, IOException {

    // Читаем файл параметров соединения с базой
    Properties props = new Properties();
    FileInputStream in = new FileInputStream("/users/peter/database.properties");
    props.load(in);
    in.close();

    // Указываем системе драйвер для подключения к базе
    String drivers = props.getProperty("jdbc.drivers");
    if (drivers != null) {
        System.setProperty("jdbc.drivers", drivers);
    }

    // Извлекаем остальные параметры соединения
    String url = props.getProperty("jdbc.url");
    String username = props.getProperty("jdbc.username");
    String password = props.getProperty("jdbc.password");
    String codepage = props.getProperty("jdbc.codepage");

    // Объединяем все параметры в одну строку
    String connection_props = 
        url + "?user=" + username + "&password=" + password + "&" + codepage;

    // Подключаемся к базе
    return DriverManager.getConnection(connection_props);
}


[edit] SELECT

Пример загрузки списка значений из таблицы базы в объект ComboBox:

/**
 * @name Загрузка списка данных из базы в ComboBox
 */
public static void fillComboBox(JComboBox ComboBox, String TableName, String FieldName) {
    try {
        // Устанавливаем соединение
        Connection conn = getConnection();
        Statement stat = conn.createStatement();

        // Формируем строку запроса
        String query = 
            "SELECT " + FieldName + 
            " FROM " + TableName + 
            " ORDER BY " + FieldName;

        // Выполняем запрос
        ResultSet rs = stat.executeQuery(query);

        // Передаем результат запроса в объект ComboBox
        while (rs.next()) {
            ComboBox.addItem(rs.getString(FieldName));
        }

        // Закрываем все соединения
        rs.close();
        stat.close();
        conn.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

Если требуется вернуть единичное значение, то можно поступить так:

Connection conn = getConnection();
Statement stat = conn.createStatement();

String query = "SELECT * FROM TableName WHERE FieldName = '12345'";
ResultSet result = stat.executeQuery(query);
result.next();
int id = result.getInt("id");  
// если stat вернет список значений, то в id будет записано первое из них

stat.close();
conn.close();


[edit] CREATE

Пример создания таблицы NAMES:

Connection conn = getConnection();
Statement stat = conn.createStatement();

String query = "" +
    "CREATE TABLE NAMES (" +
    "    ID INT UNSIGNED NOT NULL AUTO_INCREMENT," +
    "    NAME CHAR(50) NOT NULL DEFAULT ''," +
    "    PRIMARY KEY (ID)) DEFAULT CHARSET=cp1251;" +
    ")";
stat.execute(query);

stat.close();
conn.close();


[edit] INSERT

Пример заполнения таблицы NAMES:

Connection conn = getConnection();
Statement stat = conn.createStatement();

String query = "INSERT INTO NAMES (NAME) VALUES ('Иван')";
stat.execute();
query = "INSERT INTO NAMES (NAME) VALUES ('Петр')";
stat.execute();
query = "INSERT INTO NAMES (NAME) VALUES ('Василий')";
stat.execute();

stat.close();
conn.close();


[edit] UPDATE

Пример изменения значений в таблице NAMES:

Connection conn = getConnection();
Statement stat = conn.createStatement();

String query = "UPDATE NAMES SET NAME='Дмитрий' WHERE NAME='Василий'";
stat.executeUpdate(query);

stat.close();
conn.close();


[edit] DROP

Пример удаления таблицы NAMES:

Connection conn = getConnection();
Statement stat = conn.createStatement();

String query = "DROP TABLE NAMES;";
stat.execute(query);

stat.close();
conn.close();


Во всех перечисленных примерах для каждого запроса открывается и закрывается соединение с базой данных. Можно ограничиться одним подключением к базе в начале сессии и закрыть соединение при выходе из программы.



Java · LevelUp · Library · Forum

Personal tools
Namespaces

Variants
Actions
Navigation
Tools