1. Сначала объясните, что такое JDBC
Прежде чем я увидел это существительное с первого взгляда, я почувствовал, что необходимо знать, что это за полное английское название. Подключение базы данных Java, которая буквально переводится в базу данных подключенной Java. По словам прямо, я хочу предоставить набор промежуточных ссылок для подключения кода и базы данных Java, чтобы он мог управлять базой данных непосредственно с помощью кода Java.
2. Суть JDBC
Это решение Java для доступа к базам данных. Он надеется получить доступ к различным базам данных таким же образом для достижения интерфейса операции Java, который не связан с конкретной базой данных.
JDBC - это по сути набор стандартизированных интерфейсов. Различные производители баз данных реализуют этот интерфейс в соответствии с их собственными характеристиками базы данных, и нам не нужно заботиться о конкретных методах реализации.
Основные интерфейсы, реализованные производителями баз данных в JDBC, следующие:
DriverManager: управление водителем
Связь,
DatabaseMetAdata: подключиться к интерфейсу
Заявление,
Подготовлено
CallableStatement: Интерфейс объекта оператора
Результат,
ResultsetMetadata: интерфейс результатов
3. Как работает JDBC
Программист вызывает часть, реализованную базовым производителем базы данных.
То есть: 1) реализовать первый шаг соединения через интерфейс соединения
2) Передача операторов SQL через результаты оператора
3) Основной процесс сохранения результатов возврата базы данных в интерфейс набора результатов может быть обобщен как:
1) Загрузите драйвер и создайте соединение
2) Создать объект оператора
3) Выполнить операторы SQL
4) Отправить набор результатов
5) Закройте соединение
Ниже я возьму базу данных Oracle, которую я узнал и сотрудничал с Eclips в качестве примера, чтобы объяснить, как реализовать JDBC
1) Загрузка драйвера
Используемый метод: class.forname ("Driver");
Что я знаю о том, как получить этот драйвер: расширить пакет JDBC JAR, если я использую ojdbc6.jar, найдите Oracle.jdbc.driver, найдите Oracledriver, затем щелкните правой кнопкой мыши и вставьте ее в цитаты, такие как: class.forname («oracle.jdbc.driver.oracledriverriver»);
2) Создать соединение
Используемый метод: conn = drivermanager.getConnection ("jdbc: oracle: thin: @ip адрес: 1521: orcl", "Учетная запись базы данных", "Пароль базы данных");
Например: conn = DriverManager.getConnection ("JDBC: Oracle: Thin:@172.16.3.8: 1521: ORCL", "JSD1601", "JSD1601");
3) Создать объект оператора
Используемый метод: оператор STMT = conn.createStatement ();
Следует отметить, что соединение, созданное на втором этапе, используется для вызова метода
Вызовите метод executeUpdate и передайте в него оператор SQL, чтобы выполнить написанный оператор SQL. Здесь следует отметить, что типы SQL, которые может выполнить метод execututeUpdate, вводятся, обновляются, удаляют
Например: оператор STMT = conn.createStatement ();
String sql = "Вставка в EMP_JIAWENZHE (EMPNO, ENAME, SAL, DEPTNO) Значения (1000, 'JIA WENZHE', 1500,10)";
int i = stmt.executeupdate (sql);
Возвращение, которое я здесь - это количество затронутых рядов. Мы можем судить, является ли операция успешной в зависимости от количества затронутых строк.
4) Возвращенный набор результатов в основном относится к операции выбора (не упоминается здесь)
5) Наконец, закрыть соединение
Например: conn.close ();
Перечислите целый код, включая комментарии:
Пакет jdbc_day01; import java.sql.*;/*** Демонстрируйте операции шагов JDBC* 1. Загрузите драйвер* 2. Создайте соединение* 3. Создание объекта оператора* 4. Отправить оператор SQL* 5. Если отправка оператора SELECT, обработка результата* 6. Закройте соединение* @author jiawenzHe***/public class jdbc. Main (String [] args) Throws SQLexception {// Требования: Создать сотрудника, номер сотрудника, имя сотрудника, зарплата, номер департамента // 1, соединение Conn = null; try {class.forname ("oracle.jdbc.driver.oracledriver"); System.out.println ("успешно загрузка драйвера"); // 2. conn = DriverManager.getConnection ("JDBC: Oracle: Thin:@172.16.3.8: 1521: ORCL", "JSD1601", "JSD1601"); System.out.println (conn.getClass (). GetName ()); // 3. // Объект заявления Заказ. Отправить и выполнить оператор SQL/ * * int TruckupDate (String SQL); * Отправить вставку, обновление, оператор удаления* возвращаемое значение int представляет количество строк, влияющих на таблицу базы данных*/ оператор STMT = conn.createStatement (); String sql = "вставьте в emp_jiawenzhe (empno, ename, sal, deptno)" + "значения (1000, 'wang xiaoer', 1500,10)"; int i = stmt.executeupdate (sql); if (i> 0) {System.out.println ("Сохранить успешно!"); }} catch (classnotfoundexception e) {e.printstacktrace (); // 1. Запишите журнал // 2. Уведомить вызывающего абонента, чтобы выбросить новое Runtimeexception («ошибка драйвера загрузить», E); } наконец {// закройте соединение if (conn! = null) {try {conn.close (); } catch (sqlexception e) {e.printstacktrace (); }}}}}}} ПРИМЕЧАНИЕ. Пакет JAR, который можно использовать в базе данных Oracle: OJDBC14.jar/ojdbc6.jar (Oracle12c использует это)
Пакет JAR, который можно использовать в базе данных MySQL: MySQL-Connector-Java-5.0.4-bin.jar
Загрузка класса драйвера:
Class.forname ("com.mysql.jdbc.driver"); 1. Введение метода упаковки
Больше всего меня касалось того, что когда я пишу определенную серию кодов, если есть повторное использование кода, я обязательно выберу метод для инкапсуляции кода в определенной степени, от инкапсуляции метода для инкапсулирования класса. Ранее упомянутое использование JDBC для операций базы данных (добавление, удаление и модификация, поскольку запрос включает в себя работу набора результатов и объявлен отдельно) делится на четыре процесса:
1) Загрузка драйвера
2) Создать соединение
3) Создать объект оператора и отправить SQL
4) Закройте соединение
Другими словами, когда мы выполняем любую работу базы данных, мы должны выполнить вышеуказанные шаги, что приводит к избыточности кода. Таким образом, мы предложили инкапсулировать эти общие шаги в класс, чтобы он мог стать классом инструментов для моего использования.
2. Три версии инкапсуляции
Версия 1
Когда я учился, я постепенно инкапсулировал эти классы постепенно и постепенно улучшал их, потому что если начинающему предложено, если начинающему трудно принять окончательную версию инкапсуляции, начинающему трудно принять. Я объясню первое, то есть самый простой метод инкапсуляции:
Ранее вы узнаете, что независимо от того, как вы хотите управлять базой данных, загрузка драйвера очень важна, и драйвер загрузки в основном включает в себя объявления, имя драйвера, IP -адрес, номер порта, имя учетной записи базы данных, пароль и т. Д., И суть - это строки, поэтому я определяю эти строки отдельно, как показано ниже:
частная статическая строка DriverClass = "oracle.jdbc.driver.oracledriver"; частная статическая строка url = "jdbc: oracle: thin: losthost: 1521: orcl"; частная статическая строка user = "System"; частная статическая строка пароль = "123";
Таким образом, при создании соединения я могу напрямую получить имя переменной, чтобы заменить длинную строку. При загрузке драйвера метод класс.
Как показано ниже:
static {try {class.forname (DriverClass); } catch (classnotfoundexception e) {e.printstacktrace (); бросить новое runtimeexception («ошибка драйвера загрузки», E); }}Для создания соединения мы называем метод GetConnection DriverManager и вкладываем в него соответствующее имя пользователя и пароль. Мы вставляем этот метод непосредственно в метод, который я определил, а затем напрямую вызовут мой метод для создания соединения. Следует отметить, что возвращающим значением метода является объект соединения, который легко понять, потому что мы хотим получить этот объект типа соединения, как показано ниже:
public Static Connection getConnection () Throws SQLexception {Connection conn = DriverManager.getConnection (URL, пользователь, пароль); вернуть Конн; }Затем создайте объект оператора и отправьте SQL. Конечно, SQL - единственное особое место здесь, потому что то, что нужно сделать SQL, очень отличается, поэтому этот шаг не должен быть инкапсулирован.
Наконец, закройте соединение, которое называется методом Close (), как показано ниже
public static void close (connect conn) {if (conn! = null) {try {conn.close (); } catch (sqlexception e) {e.printstacktrace (); бросить новое runtimeexception («ошибка закрытия соединения», e); }}}}Общая первая версия пакета заключается в следующем:
Package JBBC_DAY01; Import Java.Sql.connection; Import Java.Sql.drivermanager; Import java.sql.sqlexception;/** * Используется для управления соединениями * @author jiawenzhe * */public class dbutil {private Static Striverclass = "oracle.jdbc.driver.orcliver. частная статическая строка url = "jdbc: oracle: thin: losthost: 1521: orcl"; частная статическая строка user = "System"; частная статическая строка пароль = "123"; // 1. Загрузка драйвера static {try {class.forname (DriverClass); } catch (classnotfoundexception e) {e.printstacktrace (); бросить новое runtimeexception («ошибка загрузки драйвера», e); }}} // 2. Создайте соединение/** Как определить метод, который может создать подключение* Тип возврата значения: есть ли результат операции, если есть, тип результата - это тип возвращаемого значения* Список параметров:* Есть ли неопределенные данные в функции метода участвуют в операции, если есть, это параметр*/ public static connectececonnection () throws sqlexctood {connectconceploceportcome. вернуть Конн; } // 3. Закрыть соединение Public static void Close (соединение conn) {if (conn! = Null) {try {conn.close (); } catch (sqlexception e) {e.printstacktrace (); бросить новое runtimeexception («ошибка закрытия соединения», e); }}}}}Просто инкапсулируйте это, а затем вызовите класс инкапсуляции непосредственно при выполнении операций SQL. Все, что вам нужно написать, это создать объект вашего выписки и отправить свой оператор SQL
Версия 2
Фактически, версия 2 очень похожа на версию 1, чтобы восполнить один из недостатков версии 1, то есть при изменении базы данных пароли учетной записи различных баз данных разные, поэтому вам необходимо изменить пароль учетной записи и IP -адрес. Я ранее инкапсулировал их в класс инструментов в форме строки, что означает, что мы должны изменить класс инструментов каждый раз, когда мы меняем базу данных, что очень неуместно. Таким образом, мы предложили метод улучшения для размещения этих данных подключения в файл конфигурации, и класс инструментов считывает этот файл конфигурации. Мы можем напрямую изменить файл конфигурации при его изменении.
Прежде чем представить эту версию, я представил новый класс, свойства, которые представляют собой файл, который может читать и читать содержимое файла конфигурации в форме потока, а затем возвращать его в класс инструментов.
Во -первых, я приведу пример файла конфигурации. На самом деле, это не должно быть объяснено. Это ясно с первого взгляда, как показано ниже:
jdbc.driverclass = oracle.jdbc.driver.oracledriverjdbc.url = jdbc: oracle: thin: localhost: orcljdbc.user = systemjdbc.password = 123
Фронт - это ключ, следующее значение, и предыдущее значение ключа определяется нами, как и определение имени переменной, последующее значение - это фактическая ситуация нашей базы данных. Что нам нужно для обращения особого внимания, так это то, что имя суффикса этого файла конфигурации должно закончиться .properties, потому что таким образом можно прочитать класс свойств.
Примеры этого раздела следующие:
static {try {// Загрузить свойства файла свойства POP = new Properties (); pop.load (dbutil2.class.getClassloader (). getResourCeasStream ("db.properties")); url = pop.getProperty ("jdbc.url"); DriverClass = pop.getProperty ("jdbc.driverclass"); user = pop.getProperty ("jdbc.user"); пароль = pop.getProperty ("jdbc.password"); Class.forname (DriverClass); } catch (classnotfoundexception e) {e.printstacktrace (); бросить новое runtimeexception («ошибка драйвера загрузки», E); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); }}Метод загрузки () должен прочитать его, или его можно считать загрузкой файла конфигурации. Просто помните все это предложение, не углубляясь в его значение. GetProperty () получает соответствующее значение через ключ, которая очень похожа на форму получения значения для набора пары клавиш.
Общий код заключается в следующем:
Пакет jbbc_day01; import java.io.fileinputstream; import java.io.ioexception; импорт java.io.inputstream; import java.sql.connection; импорт java.sql.drivermanager; import java.sql.sqlexection; Сохраняется в файле свойств * @author jiawenzhe * */public class dbutil2 {private Static String DriverClass; частная статическая строковая URL; частная статическая строковая пользователь; частная статическая строка пароль; // 1. Загрузить драйвер static {try {// Загрузить свойства файла свойства POP = new Properties (); pop.load (dbutil2.class.getClassloader (). getResourCeasStream ("db.properties")); url = pop.getProperty ("jdbc.url"); DriverClass = pop.getProperty ("jdbc.driverclass"); user = pop.getProperty ("jdbc.user"); пароль = pop.getProperty ("jdbc.password"); Class.forname (DriverClass); } catch (classnotfoundexception e) {e.printstacktrace (); бросить новое runtimeexception («ошибка драйвера загрузки», E); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} // 2. Создайте соединение/** Как определить метод, который может создать подключение* Тип возврата значения: есть ли результат операции, если есть, тип результата - это тип возвращаемого значения* Список параметров:* Есть ли неопределенные данные в функции метода участвуют в операции, если есть, это параметр*/ public static connectececonnection () throws sqlexctood {connectconceploceportcome. вернуть Конн; } // 3. Закрыть соединение Public static void Close (соединение conn) {if (conn! = Null) {try {conn.close (); } catch (sqlexception e) {e.printstacktrace (); бросить новое runtimeexception («ошибка закрытия соединения», e); }}}}}