Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:Azure SQL Database
Ez a cikk bemutatja egy mintaalkalmazás létrehozását, amely Java és JDBC használatával tárolja és kéri le az adatokat az Azure SQL Database-ben.
A JDBC a hagyományos relációs adatbázisokhoz való csatlakozás szabványos Java API-ja.
Előfeltételek
- Egy Azure-fiók. Ha nincs, szerezzen be egy ingyenes próbaverziót.
- Azure Cloud Shell vagy Azure CLI. Az Azure Cloud Shell használatát javasoljuk, mert így automatikusan bejelentkezhet, és minden szükséges eszközt elérhet.
- Támogatott Java Development Kit, 8-es verzió (az Azure Cloud Shell része).
- Az Apache Maven build eszköz.
A munkakörnyezet előkészítése
Környezeti változókkal korlátozzuk a gépelési hibákat, és egyszerűbbé tesszük a következő konfiguráció testreszabását az ön igényeinek megfelelően.
Ezeket a környezeti változókat az alábbi parancsokkal állíthatja be:
AZ_RESOURCE_GROUP=database-workshop
AZ_DATABASE_NAME=<YOUR_DATABASE_NAME>
AZ_LOCATION=<YOUR_AZURE_REGION>
AZ_SQL_SERVER_USERNAME=demo
AZ_SQL_SERVER_PASSWORD=<password>
AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
Cserélje le a helyőrzőket a jelen cikkben használt alábbi értékekre:
-
<YOUR_DATABASE_NAME>: Az Azure SQL Database-kiszolgáló neve. Az Azure-on belül egyedinek kell lennie. -
<YOUR_AZURE_REGION>: A használni kívánt Azure-régió. Alapértelmezés szerint használhatja aeastus, de azt javasoljuk, hogy konfiguráljon egy olyan régiót, amely közelebb van a lakóhelyéhez. Az elérhető régiók teljes listáját a beírással érheti elaz account list-locations. -
<AZ_SQL_SERVER_PASSWORD>: Az Azure SQL Database-kiszolgáló jelszava. A jelszónak legalább nyolc karakterből kell állnia. A karaktereknek a következő kategóriák közül háromból kell állniuk: angol nagybetűk, angol kisbetűk, számok (0-9) és nem alfanumerikus karakterek (!, $, #, %stb.). -
<YOUR_LOCAL_IP_ADDRESS>: A helyi számítógép IP-címe, amelyről a Java-alkalmazást fogja futtatni. Az egyik kényelmes módja annak, hogy megtudja, mi az IP-címe, ha a böngészőjét a whatismyip.akamai.comoldalra irányítja.
Ezután hozzon létre egy erőforráscsoportot a következő paranccsal:
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
| jq
Megjegyzés
A jq segédprogrammal JSON-adatokat jelenítünk meg, és olvashatóbbá tesszük azokat. Ez a segédprogram alapértelmezés szerint telepítve van Azure Cloud Shell. Ha nem tetszik ez a segédprogram, biztonságosan eltávolíthatja az összes általunk használt parancs | jq részét.
Adatbázis létrehozása
Az első dolog, amit létrehozunk, egy logikai kiszolgáló az Azure SQL Database-hez.
Az Azure Cloud Shellbenfuttassa a következő parancsot:
az sql server create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME \
--location $AZ_LOCATION \
--admin-user $AZ_SQL_SERVER_USERNAME \
--admin-password $AZ_SQL_SERVER_PASSWORD \
| jq
Ez a parancs létrehozza az adatbázis logikai kiszolgálóját.
Tűzfalszabály konfigurálása a kiszolgálóhoz
Az Azure SQL Database alapértelmezés szerint védett, mivel olyan tűzfallal rendelkezik, amely nem engedélyezi a bejövő kapcsolatot. Az adatbázis használatához hozzá kell adnia egy tűzfalszabályt, amely lehetővé teszi, hogy a helyi IP-cím hozzáférjen az adatbázis-kiszolgálóhoz.
Mivel a cikk elején konfigurálta a helyi IP-címet, az alábbi parancs futtatásával megnyithatja a kiszolgáló tűzfalát:
az sql server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME-database-allow-local-ip \
--server $AZ_DATABASE_NAME \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS \
| jq
Adatbázis konfigurálása
A korábban létrehozott kiszolgáló üres. Nem rendelkezik a Java-alkalmazással használható adatbázissal. Hozzon létre egy új, az alábbi parancs futtatásával hívott demo adatbázist:
az sql db create \
--resource-group $AZ_RESOURCE_GROUP \
--name demo \
--server $AZ_DATABASE_NAME \
| jq
Új Java-projekt létrehozása
A kedvenc IDE használatával hozzon létre egy új Java-projektet, és vegyen fel egy pom.xml fájlt a gyökérkönyvtárába:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>12.4.2.jre11</version>
</dependency>
</dependencies>
</project>
Ez a fájl egy Apache Maven , amely konfigurálja a projekt használatát:
- Java 17
- Egy friss SQL Server-illesztőprogram Java-hoz
Konfigurációs fájl előkészítése az Azure SQL-adatbázishoz való csatlakozáshoz
Hozzon létre egy src/main/resources/application.properties fájlt, és adja hozzá a következőt:
url=jdbc:sqlserver://$AZ_DATABASE_NAME.database.windows.net:1433;database=demo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
user=demo@$AZ_DATABASE_NAME
password=$AZ_SQL_SERVER_PASSWORD
- Cserélje le a két
$AZ_DATABASE_NAMEváltozót a cikk elején konfigurált értékre. - Cserélje le a
$AZ_SQL_SERVER_PASSWORDváltozót a cikk elején konfigurált értékre.
SQL-fájl létrehozása az adatbázisséma létrehozásához
Adatbázisséma létrehozásához egy src/main/resources/schema.sql fájlt fogunk használni. Hozza létre a fájlt a következő tartalommal:
DROP TABLE IF EXISTS todo;
CREATE TABLE todo (id INT PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
Az alkalmazás kódolása
Csatlakozás az adatbázishoz
Ezután adja hozzá a JDBC-t használó Java-kódot, amely adatokat tárol és kér le az Azure SQL-adatbázisból.
Hozzon létre egy src/main/java/com/example/demo/DemoApplication.java fájlt, amely a következőket tartalmazza:
package com.example.demo;
import java.sql.*;
import java.util.*;
import java.util.logging.Logger;
public class DemoApplication {
private static final Logger log;
static {
System.setProperty("java.util.logging.SimpleFormatter.format", "[%4$-7s] %5$s %n");
log =Logger.getLogger(DemoApplication.class.getName());
}
public static void main(String[] args) throws Exception {
log.info("Loading application properties");
Properties properties = new Properties();
properties.load(DemoApplication.class.getClassLoader().getResourceAsStream("application.properties"));
log.info("Connecting to the database");
Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties);
log.info("Database connection test: " + connection.getCatalog());
log.info("Create database schema");
Scanner scanner = new Scanner(DemoApplication.class.getClassLoader().getResourceAsStream("schema.sql"));
Statement statement = connection.createStatement();
while (scanner.hasNextLine()) {
statement.execute(scanner.nextLine());
}
/*
Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);
todo = readData(connection);
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
deleteData(todo, connection);
*/
log.info("Closing database connection");
connection.close();
}
}
Ez a Java-kód az application.properties és a korábban létrehozott schema.sql fájlokat fogja használni, hogy csatlakozzon az SQL Server-adatbázishoz, és hozzon létre egy sémát, amely tárolja az adatokat.
Ebben a fájlban láthatja, hogy megjegyzéseket fűztünk az adatok beszúrásához, olvasásához, frissítéséhez és törléséhez: ezeket a metódusokat a cikk többi részében kódolva lesznek, és egymás után feloldhatja őket.
Megjegyzés
Az adatbázis hitelesítő adatai az application.properties fájl felhasználói és jelszótulajdonságaibanvannak tárolva . Ezeket a hitelesítő adatokat a rendszer a végrehajtás DriverManager.getConnection(properties.getProperty("url"), properties);során használja, mivel a tulajdonságfájl argumentumként lesz átadva.
Most már végrehajthatja ezt a főosztályt a kedvenc eszközével:
- Az IDE használatával kattintson jobb gombbal a DemoApplication osztályra, és hajtsa végre.
- A Maven használatával futtathatja az alkalmazást a következő végrehajtásával:
mvn package exec:java -Dexec.mainClass="com.example.demo.DemoApplication".
Az alkalmazásnak csatlakoznia kell az Azure SQL Database-hez, létre kell hoznia egy adatbázissémát, majd be kell zárnia a kapcsolatot, ahogy a konzolnaplókban látható:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Closing database connection
Tartományosztály létrehozása
Hozzon létre egy új Todo Java-osztályt az DemoApplication osztály mellett, és adja hozzá a következő kódot:
package com.example.demo;
public class Todo {
private Long id;
private String description;
private String details;
private boolean done;
public Todo() {
}
public Todo(Long id, String description, String details, boolean done) {
this.id = id;
this.description = description;
this.details = details;
this.done = done;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
public boolean isDone() {
return done;
}
public void setDone(boolean done) {
this.done = done;
}
@Override
public String toString() {
return "Todo{" +
"id=" + id +
", description='" + description + '\'' +
", details='" + details + '\'' +
", done=" + done +
'}';
}
}
Ez az osztály egy tartománymodell, amely az todo táblán van leképezve, amelyet a schema.sql szkript végrehajtásakor hoztál létre.
Adatok beszúrása
Az src/main/java/DemoApplication.java fájlban a fő metódus után adja hozzá a következő metódust az adatok adatbázisba való beszúrásához:
private static void insertData(Todo todo, Connection connection) throws SQLException {
log.info("Insert data");
PreparedStatement insertStatement = connection
.prepareStatement("INSERT INTO todo (id, description, details, done) VALUES (?, ?, ?, ?);");
insertStatement.setLong(1, todo.getId());
insertStatement.setString(2, todo.getDescription());
insertStatement.setString(3, todo.getDetails());
insertStatement.setBoolean(4, todo.isDone());
insertStatement.executeUpdate();
}
Most már visszavonhatja a két következő sor kommentelését a main metódusban.
Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);
A főosztály végrehajtásának most a következő kimenetet kell eredményeznie:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Closing database connection
Adatok beolvasása
Olvassuk el a korábban beszúrt adatokat annak ellenőrzéséhez, hogy a kód megfelelően működik-e.
Az src/main/java/DemoApplication.java fájlban a insertData metódus után adja hozzá a következő metódust az adatok adatbázisból való beolvasásához:
private static Todo readData(Connection connection) throws SQLException {
log.info("Read data");
PreparedStatement readStatement = connection.prepareStatement("SELECT * FROM todo;");
ResultSet resultSet = readStatement.executeQuery();
if (!resultSet.next()) {
log.info("There is no data in the database!");
return null;
}
Todo todo = new Todo();
todo.setId(resultSet.getLong("id"));
todo.setDescription(resultSet.getString("description"));
todo.setDetails(resultSet.getString("details"));
todo.setDone(resultSet.getBoolean("done"));
log.info("Data read from the database: " + todo.toString());
return todo;
}
Most már feloldhatja a következő sort a main metódusban:
todo = readData(connection);
A főosztály végrehajtásának most a következő kimenetet kell eredményeznie:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Closing database connection
Adatok frissítése
Frissítsük a korábban beszúrt adatokat.
Még mindig a src/main/java/DemoApplication.java fájlban, a readData metódus után, adja hozzá a következő metódust az adatbázison belüli adatok frissítéséhez:
private static void updateData(Todo todo, Connection connection) throws SQLException {
log.info("Update data");
PreparedStatement updateStatement = connection
.prepareStatement("UPDATE todo SET description = ?, details = ?, done = ? WHERE id = ?;");
updateStatement.setString(1, todo.getDescription());
updateStatement.setString(2, todo.getDetails());
updateStatement.setBoolean(3, todo.isDone());
updateStatement.setLong(4, todo.getId());
updateStatement.executeUpdate();
readData(connection);
}
Most már visszavonhatja a két következő sor kommentelését a main metódusban.
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
A főosztály végrehajtásának most a következő kimenetet kell eredményeznie:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Update data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true}
[INFO ] Closing database connection
Adatok törlése
Végül töröljük a korábban beszúrt adatokat.
Még mindig az src/main/java/DemoApplication.java fájlban, a updateData metódus után adja hozzá a következő metódust az adatbázisban lévő adatok törléséhez:
private static void deleteData(Todo todo, Connection connection) throws SQLException {
log.info("Delete data");
PreparedStatement deleteStatement = connection.prepareStatement("DELETE FROM todo WHERE id = ?;");
deleteStatement.setLong(1, todo.getId());
deleteStatement.executeUpdate();
readData(connection);
}
Most már feloldhatja a következő sort a main metódusban:
deleteData(todo, connection);
A főosztály végrehajtásának most a következő kimenetet kell eredményeznie:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Update data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true}
[INFO ] Delete data
[INFO ] Read data
[INFO ] There is no data in the database!
[INFO ] Closing database connection
Következtetés és erőforrások törlése
Gratulálok! Létrehozott egy Java-alkalmazást, amely JDBC használatával tárolja és kéri le az adatokat az Azure SQL Database-ből.
A rövid útmutató során használt összes erőforrás törléséhez törölje az erőforráscsoportot az alábbi paranccsal:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes