Java Database Connectivity (JDBC)
Взаимодействие СУБД с приложениями на Java JDBC предполагает, что база данных, с которой взаимодействует программа, является реляционной и использует SQL для запросов. Типы JDBC-драйверов: 1. Драйвер, реализующий методы JDBC вызовами функций ODBC. Это так называемый мост (bridge) JDBC-ODBC. Непосредственную связь с базой при этом осуществляет драйвер ODBC. 2. Драйвер, реализующий методы JDBC вызовами функций API самой СУБД. 3. Драйвер, реализующий методы JDBC вызовами функций сетевого протокола, независимого от СУБД. Этот протокол должен быть, затем, реализован средствами СУБД. 4. Драйвер, реализующий методы JDBC вызовами функций сетевого протокола СУБД.
Установка соединения с базой данных import java.sql.*; public class JDBCConnection { public JDBCConnection() { } public static void main(String[] args) { try { //Загрузка класса драйвера Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //Указать источник данных ODBC String sourceURL = "jdbc:odbc:Data"; //Установить соединение с базой данных Connection databaseConnection = DriverManager.getConnection(sourceURL); System.out.println("The database connection is " + databaseConnection); }catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch (SQLException sqle) { System.err.println(sqle); } Connection qon = DriverManager.getConnection(url, login, password); The database connection is мостик JDBC-ODBC, драйвер, который поставляется вместе с JDK
Создание источника данных
Создание таблицы в базе данных public class TestBD{ public TestBD() { } public static void main(String[] args) { String createtab; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String sourceURL = "jdbc:odbc:Data"; Connection dbConn = DriverManager.getConnection(sourceURL); //Создать предложение Statement st = dbConn.createStatement(); //Создаем таблицу try { st.execute("drop table Data"); } catch (SQLException e) { System.out.println("table doesn't need to be dropped."); } Методы интерфейса ResultSetMetaData позволяют узнать количество полученных столбцов, их имена и типы, название таблицы, имя ее владельца и прочие сведения о представленных в объекте ResultSet сведениях. Если объект st получен методом: Statement st = dbCon.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_OPDATABLE);
Создание таблицы в базе данных //Добавление таблицы createtab = "CREATE TABLE Data(CustID int PRIMARY KEY, " + "LastName VARCHAR(30), FirstName VARCHAR(30), " + "destination VARCHAR(30))"; st.executeUpdate(createtab); System.out.println("Table Data created."); //Закрыть соединение dbConn.close(); }catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch (SQLException sqle) { System.err.println(sqle); } catch (Exception e) { System.err.println(e); } } SQL-операторы INSERT, UPDATE, DELETE, CREATE TABLE и другие в простых случаях ВЫПОЛНЯЮТСЯ методом executeUpdate ().
Заполнение базы данных public class TestTable { public TestTable() { } public static void main(String[] args) { try {... Statement st1 = dbConn.createStatement(); String sql; //Добавить информацию в базу sql = "INSERT INTO Data VALUES(1, 'Иванов', 'Иван', 'Описание')"; st1.executeUpdate(sql); …. System.out.println("Table Data populated"); dbConn.close(); }catch(ClassNotFoundException cnfe) { System.err.println(cnfe); } catch (SQLException sqle) { System.err.println(sqle); } catch (Exception e) { System.err.println(e); } }
Запросы к базе данных import java.util.*; public class TestTable implements java.io.Serializable { private int custID; private String lastName, firstName, destination; public String toString() { String outString; outString = "custID = " + this.custID + "\n"; outString += "lastName = " + this.lastName + "\n"; outString += "firstName = " + this.firstName + "\n"; outString += "destination = " + this.destination + "\n"; return outString; } public String retrieveFromDB() { java.sql.Connection dbConn = null; Statement st1 = null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String sourceURL = "jdbc:odbc:Data"; dbConn = DriverManager.getConnection(sourceURL); st1 = dbConn.createStatement(); String getString = "SELECT * FROM Data "; ResultSet results = st1.executeQuery(getString); while (results.next()) { custID = results.getInt("custID"); lastName = results.getString("lastName"); firstName = results.getString("firstName"); destination = results.getString("destination"); System.out.println(this); } return "Successful Retrieval"; } catch (Exception e) { return "UnSuccessful Retrieval"; } finally { try { if (st1 != null) st1.close(); if (dbConn != null) dbConn.close(); } catch (SQLException sqle) { } } public static void main(String[] args) { TestTable ttr = new TestTable(); System.out.println("The contents of the database:"); System.out.println(ttr.retrieveFromDB()); } } custID = 1 lastName = Иванов firstName = Иван destination = Описание … custID = 5 lastName = Петренко firstName = Александр destination = Описание1 Successful Retrieval
Запросы к базе данных String getString = "SELECT * FROM Data WHERE CustID=3"; ResultSet results = statement1.executeQuery(getString); while (results.next()) { custID = results.getInt("custID"); lastName = results.getString("lastName"); firstName = results.getString("firstName"); destination = results.getString("destination"); System.out.println(this); } return "Successful Retrieval"; } catch (Exception e) { return "UnSuccessful Retrieval"; } finally { try { if (statement1 != null) statement1.close(); if (dbConn != null) dbConn.close(); } catch (SQLException sqle) { } } public static void main(String[] args) { TestTable ttr = new TestTable(); System.out.println("The contents of the database:"); System.out.println(ttr.retrieveFromDB()); } } The contents of the database: custID = 3 lastName = Сидоров firstName = Сидр destination = Описание новое Successful Retrieval
Изменение данных в таблице public class TestTableAlteration extends JFrame implements ActionListener { private int custID; private String lastName, firstName, destination; JTextField tfCustID = new JTextField(20); JTextField tfLastName= new JTextField(20); JTextField tfFirstName= new JTextField(20); JTextField tfDestination= new JTextField(20); JLabel lCustID = new JLabel("CustID"); JLabel lLastName = new JLabel("LastName"); JLabel lFirstName = new JLabel("FirstName"); JLabel lDestination = new JLabel("Destination"); JButton btnRetrieve= new JButton("Найти"); JButton btnStore= new JButton("Обновить"); java.sql.Connection dbConn = null; Statement st1 = null; public TestTableAlteration() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p1 = new JPanel(); p1.add(lCustID); p1.add(tfCustID); p1.add(lLastName); p1.add(tfLastName); p1.add(lFirstName); p1.add(tfFirstName); p1.add(lDestination); p1.add(tfDestination); p1.add(btnRetrieve); p1.add(btnStore); btnRetrieve.addActionListener(this); btnStore.addActionListener(this); getContentPane().add(p1); setTitle("Altering Table Data"); setBounds( 100, 100, 315, 300); setVisible(true); } public void actionPerformed(ActionEvent ae) { if (ae.getActionCommand().equals("Найти")) { if (tfCustID.getText().equals("")) System.out.println("please enter a CustID"); else { this.custID = Integer.parseInt(tfCustID.getText()); retrieveFromDB(); tfLastName.setText(lastName); tfFirstName.setText(firstName); tfDestination.setText(destination); } } if (ae.getActionCommand().equals("Обновить")) { if (tfCustID.getText().equals("")) System.out.println("please enter a CustID"); else { updateDB(); } } }
Изменение данных в таблице public String updateDB() { try { connectToDB(); lastName = tfLastName.getText(); firstName = tfFirstName.getText(); destination = tfDestination.getText(); String updateString; updateString = "Update Data " + "SET lastName = '" + lastName + "' " + "WHERE CustID = " + custID; st1.executeUpdate(updateString); updateString = "Update Data " + "SET firstName = '" + firstName + "' " + "WHERE CustID = " + custID; st1.executeUpdate(updateString); updateString = "Update Data " + "SET destination = '" + destination + "' " + "WHERE CustID = " + custID; st1.executeUpdate(updateString); return "Successful Update"; } catch (Exception e) { System.out.println("Exception was thrown: " + e.getMessage()); return "UnSuccessful Retrieval"; } finally { try { if (st1 != null) st1.close(); if (dbConn != null) dbConn.close(); } catch (SQLException sqle) { System.out.println("SQLException during close(): " + sqle.getMessage()); } }
Изменение данных в таблице public String retrieveFromDB() { try { connectToDB(); String getString = "SELECT * FROM Data " + "WHERE CustID = " + custID; ResultSet results = st1.executeQuery(getString); lastName = "record not found"; firstName = ""; destination = ""; while (results.next()) { lastName = results.getString("lastName"); firstName = results.getString("firstName"); destination = results.getString("destination"); } return "Successful Retrieval"; } catch (Exception e) { System.out.println("Exception was thrown: " + e.getMessage()); return "UnSuccessful Retrieval"; } finally { try { if (st1 != null) st1.close(); if (dbConn != null) dbConn.close(); } catch (SQLException sqle) { System.out.println("SQLException during close(): " + sqle.getMessage()); } } }
Изменение данных в таблице private void connectToDB() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String sourceURL = "jdbc:odbc:Data"; dbConn = DriverManager.getConnection(sourceURL); st1 = dbConn.createStatement(); } catch (Exception e) { System.out.println("Exception was thrown: " + e.getMessage()); } public static void main(String[] args) { TestTableAlteration tta = new TestTableAlteration(); }