JDBC

From AsIsWiki
Jump to: navigation, search
Forum

Java


Contents

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

В описанном ниже примере выполняется подключение к базе данных, с использованием драйвера 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);
}


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();


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();


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();


UPDATE

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

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

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

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


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