JDBC
From AsIsWiki
Forum |
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();
Во всех перечисленных примерах для каждого запроса открывается и закрывается соединение с базой данных.
Можно ограничиться одним подключением к базе в начале сессии и закрыть соединение при выходе из программы.