- Establishing a Connection
- Using the DriverManager Class
- Specifying Database Connection URLs
- Java DB Database Connection URLs
- MySQL Connector/J Database URL
- Работа с базами данных с помощью JDBC драйвера
- Что такое JDBC?
- Зачем нужен JDBC?
- Шаг 1.
- Шаг 2.
- Шаг 3. Создание таблиц в БД.
- Шаг 4. Добавление новой записи в БД.
- Шаг 5. Получение данных с БД.
- Шаг 6. Удаление данных с БД.
- Шаг 7. Обновление данных в БД.
- Выводы.
- ПОХОЖИЕ ПУБЛИКАЦИИ
- 29 комментариев к статье «Работа с базами данных с помощью JDBC драйвера»
Establishing a Connection
First, you need to establish a connection with the data source you want to use. A data source can be a DBMS, a legacy file system, or some other source of data with a corresponding JDBC driver. Typically, a JDBC application connects to a target data source using one of two classes:
- DriverManager : This fully implemented class connects an application to a data source, which is specified by a database URL. When this class first attempts to establish a connection, it automatically loads any JDBC 4.0 drivers found within the class path. Note that your application must manually load any JDBC drivers prior to version 4.0.
- DataSource : This interface is preferred over DriverManager because it allows details about the underlying data source to be transparent to your application. A DataSource object’s properties are set so that it represents a particular data source. See Connecting with DataSource Objects for more information. For more information about developing applications with the DataSource class, see the latest The Java EE Tutorial.
Note: The samples in this tutorial use the DriverManager class instead of the DataSource class because it is easier to use and the samples do not require the features of the DataSource class.
This page covers the following topics:
Using the DriverManager Class
Connecting to your DBMS with the DriverManager class involves calling the method DriverManager.getConnection . The following method, JDBCTutorialUtilities.getConnection , establishes a database connection:
public Connection getConnection() throws SQLException < Connection conn = null; Properties connectionProps = new Properties(); connectionProps.put("user", this.userName); connectionProps.put("password", this.password); if (this.dbms.equals("mysql")) < conn = DriverManager.getConnection( "jdbc:" + this.dbms + "://" + this.serverName + ":" + this.portNumber + "/", connectionProps); >else if (this.dbms.equals("derby")) < conn = DriverManager.getConnection( "jdbc:" + this.dbms + ":" + this.dbName + ";create=true", connectionProps); >System.out.println("Connected to database"); return conn; >
The method DriverManager.getConnection establishes a database connection. This method requires a database URL, which varies depending on your DBMS. The following are some examples of database URLs:
- MySQL: jdbc:mysql://localhost:3306/ , where localhost is the name of the server hosting your database, and 3306 is the port number
- Java DB: jdbc:derby:testdb;create=true , where testdb is the name of the database to connect to, and create=true instructs the DBMS to create the database. Note: This URL establishes a database connection with the Java DB Embedded Driver. Java DB also includes a Network Client Driver, which uses a different URL.
This method specifies the user name and password required to access the DBMS with a Properties object.
- Typically, in the database URL, you also specify the name of an existing database to which you want to connect. For example, the URL jdbc:mysql://localhost:3306/mysql represents the database URL for the MySQL database named mysql . The samples in this tutorial use a URL that does not specify a specific database because the samples create a new database.
- In previous versions of JDBC, to obtain a connection, you first had to initialize your JDBC driver by calling the method Class.forName . This methods required an object of type java.sql.Driver . Each JDBC driver contains one or more classes that implements the interface java.sql.Driver . The drivers for Java DB are org.apache.derby.jdbc.EmbeddedDriver and org.apache.derby.jdbc.ClientDriver , and the one for MySQL Connector/J is com.mysql.cj.jdbc.Driver . See the documentation of your DBMS driver to obtain the name of the class that implements the interface java.sql.Driver . Any JDBC 4.0 drivers that are found in your class path are automatically loaded. (However, you must manually load any drivers prior to JDBC 4.0 with the method Class.forName .)
The method returns a Connection object, which represents a connection with the DBMS or a specific database. Query the database through this object.
Specifying Database Connection URLs
A database connection URL is a string that your DBMS JDBC driver uses to connect to a database. It can contain information such as where to search for the database, the name of the database to connect to, and configuration properties. The exact syntax of a database connection URL is specified by your DBMS.
Java DB Database Connection URLs
The following is the database connection URL syntax for Java DB:
jdbc:derby:[subsubprotocol:][databaseName][;attribute=value]*
- subsubprotocol specifies where Java DB should search for the database, either in a directory, in memory, in a class path, or in a JAR file. It is typically omitted.
- databaseName is the name of the database to connect to.
- attribute=value represents an optional, semicolon-separated list of attributes. These attributes enable you to instruct Java DB to perform various tasks, including the following:
- Create the database specified in the connection URL.
- Encrypt the database specified in the connection URL.
- Specify directories to store logging and trace information.
- Specify a user name and password to connect to the database.
See Java DB Developer’s Guide and Java DB Reference Manual from Java DB Technical Documentation for more information.
MySQL Connector/J Database URL
The following is the database connection URL syntax for MySQL Connector/J:
jdbc:mysql://[host][,failoverhost. ] [:port]/[database] [?propertyName1][=propertyValue1] [&propertyName2][=propertyValue2].
- host:port is the host name and port number of the computer hosting your database. If not specified, the default values of host and port are 127.0.0.1 and 3306, respectively.
- database is the name of the database to connect to. If not specified, a connection is made with no default database.
- failover is the name of a standby database (MySQL Connector/J supports failover).
- propertyName=propertyValue represents an optional, ampersand-separated list of properties. These attributes enable you to instruct MySQL Connector/J to perform various tasks.
Работа с базами данных с помощью JDBC драйвера
В этом уроке я бы хотел вас научить работать с базами данных MySQL, PostgreSQL, Oracle. А именно как подключится и выполнять SQL запросы к базе с помощью java.
Что такое JDBC?
JDBC Driver – (Java DataBase Connectivity — соединение с базами данных на Java) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql , входящего в состав Java SE.
Зачем нужен JDBC?
JDBC – позволяет получать доступ к БД, а также выполнять к ней SQL запросы.
Шаг 1.
Скачиваем jar файл JDBC драйвера.
Шаг 2.
Подключение к БД Mysql:
Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password"); conn.close();
Подключение к БД PostgreSQL:
Class.forName("org.postgresql.Driver"); Connection connection = DriverManager.getConnection("jdbc:postgresql://hostname:port/dbname","username", "password"); connection.close();
Подключение к БД Oracle:
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mkyong","username","password"); connection.close();
В 1-й строке мы указываем наш JDBC драйвер. Не забудьте добавить его в ClassPath иначе его компилятор его не увидит.
Во 2-й строке JDBC Manager который открывает соединение с базой данных и обеспечит нам дальнейшее обращение к ней.
И последняя строка закрывает соединение с БД.Желательно строку для определения JDBC поместить в блок try для того чтобы контролировать его наличия в вашем приложении.
try < Class.forName("com.mysql.jdbc.Driver"); >catch (ClassNotFoundException e)
Шаг 3. Создание таблиц в БД.
Вынесем в отдельный метод соединение с БД.
private static Connection getDBConnection() < Connection dbConnection = null; try < Class.forName(DB_DRIVER); >catch (ClassNotFoundException e) < System.out.println(e.getMessage()); >try < dbConnection = DriverManager.getConnection(DB_CONNECTION, DB_USER,DB_PASSWORD); return dbConnection; >catch (SQLException e) < System.out.println(e.getMessage()); >return dbConnection; >
Этот метод будет создавать в БД таблицу:
private static void createDbUserTable() throws SQLException < Connection dbConnection = null; Statement statement = null; String createTableSQL = "CREATE TABLE DBUSER(" + "USER_ID NUMBER(5) NOT NULL, " + "USERNAME VARCHAR(20) NOT NULL, " + "CREATED_BY VARCHAR(20) NOT NULL, " + "CREATED_DATE DATE NOT NULL, " + "PRIMARY KEY (USER_ID) " + ")"; try < dbConnection = getDBConnection(); statement = dbConnection.createStatement(); // выполнить SQL запрос statement.execute(createTableSQL); System.out.println("Table \"dbuser\" is created!"); >catch (SQLException e) < System.out.println(e.getMessage()); >finally < if (statement != null) < statement.close(); >if (dbConnection != null) < dbConnection.close(); >> >
и в main методе вызываем метод createDbTable() который создаст таблицу в БД.
public static void main(String[] argv) < try < createDbUserTable(); >catch (SQLException e) < System.out.println(e.getMessage()); >>
В результате вы должны получить:
CREATE TABLE DBUSER( USER_ID NUMBER(5) NOT NULL, USERNAME VARCHAR(20) NOT NULL, CREATED_BY VARCHAR(20) NOT NULL, CREATED_DATE DATE NOT NULL, PRIMARY KEY (USER_ID) ) TABLE "user" IS created!
Шаг 4. Добавление новой записи в БД.
String insertTableSQL = "INSERT INTO DBUSER" + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) " + "VALUES" + "(1,'mkyong','system', " + "to_date('" + getCurrentTimeStamp() + "', 'yyyy/mm/dd hh24:mi:ss'))";
метод который будет возвращать текущую дату и время:
private static String getCurrentTimeStamp()
И выполняем наш SQL запрос который лежит в переменной insertTableSQL
statement.executeUpdate(insertTableSQL);
Шаг 5. Получение данных с БД.
String selectTableSQL = "SELECT USER_ID, USERNAME from DBUSER";
try < dbConnection = getDBConnection(); statement = dbConnection.createStatement(); // выбираем данные с БД ResultSet rs = statement.executeQuery(selectTableSQL); // И если что то было получено то цикл while сработает while (rs.next()) < String userid = rs.getString("USER_ID"); String username = rs.getString("USERNAME"); System.out.println("userid : " + userid); System.out.println("username : " + username); >> catch (SQLException e)
Шаг 6. Удаление данных с БД.
String deleteTableSQL = "DELETE DBUSER WHERE USER_ID = 1";
Выполняем запрос на удаление:
Шаг 7. Обновление данных в БД.
String updateTableSQL = "UPDATE DBUSER SET USERNAME = 'mkyong_new' WHERE USER_ID = 1";
Выполняем запрос на обновление записи:
Выводы.
Все действия с любой базой данных выполняются через SQL запросы, то есть нам достаточно знать SQL для манипуляцией данными в БД.
ПОХОЖИЕ ПУБЛИКАЦИИ
29 комментариев к статье «Работа с базами данных с помощью JDBC драйвера»
Проблема с подключением jdbc к приложению для Android – заголовок комментария. Почему в жизни так бывает … строка Connection connection = DriverManager.getConnection(“jdbc:postgresql://хост:порт/имя_дб”,”пользователь”, “пароль”);
выдаёт ошибку Unhandled exception type SQLException
( строка connection.close(); – выдаёт туже ошибку ) При добавлении строки import java.sql.SQLException; в MainActivity.java
выводит сообщение …
The import java.sql.SQLException is never used При этом файл postgresql-9.2-1002.jdbc4.jar лежит в /libs И в classpath добавлять пробовал, хотя многие источники говорят, что это не обязательно, достаточно держать файл postgresql-9.2-1002.jdbc4.jar в /libs При нажатие ctrl+shift+O Eclips добавляет только: import java.sql.Connection;
import java.sql.DriverManager; А к чему приводит ручное добавление строки import java.sql.SQLException; описано в комментарии чуть выше. Поможете решить проблему?Станислав, потому что для Android так не прокатит. Почитайте это Работа с базой данных SQLite или это Как работать с MySQL в Android? Часть 1.