Lançons PostgreSQL sur Java.
Un pilote JDBC est requis en tant qu'API Java standard pour accéder au RDB de PostgreSQL.
Tout d'abord, à partir du téléchargement.
https://jdbc.postgresql.org/download.html#current
Ici, ** postgresql-42.2.5.jar ** est utilisé.
Placez-le n'importe où sous ce projet (est-il facile à comprendre à l'intérieur de lib /
?)
Cependant, tel quel, il n'est pas possible de savoir où il se réfère, il est donc nécessaire de définir le chemin.
Si mac
Cliquez sur
postgresql-42.2.5.jar
** Onglet Projet ** -> ** Propriétés ** -> ** Chemin de construction Java ** -> ** Bibliothèque ** -> * * Ajouter un JAR externe ** -> Trouvezpostgresql-42.2.5.jar
et ouvrez-> ** Appliquer et fermer **
OK si postgresql-42.2.5.jar
est référencé dans la bibliothèque de référence dans
Cette fois, nous réutiliserons tous ceux que nous avons utilisés auparavant.
Les utilisateurs sont les suivants
terminal
customer=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+---------+-------+-----------------------
customer | sf213471118 | UTF8 | C | C |
Le tableau utilise le tableau ** client **
terminal
customer=# \d
List of relations
Schema | Name | Type | Owner
--------+----------+-------+-------------
public | customer | table | sf213471118
Le contenu de la ** table client ** est le suivant
terminal
customer=# SELECT * FROM customer;
id | name | gender | age
-----------------+----------+--------+-----
10001 |Taro Tanaka| m | 31
10002 |Hanako Nakamura| w | 44
10003 |Ichiro Sato| m | 20
10004 |Aya Uchida| w | 18
10005 |Jiro Takahashi| m | 56
10006 |Satoru Nakazato| m | 34
(6 rows)
Je laisserai un endroit dont je veux me souvenir en écrivant.
.java
public static void main(String[] args) throws Exception {
try {
System.out.println("DB access start");
PostgreSQL_test.dbConnect();
} catch (Exception e) {
System.out.println("error main()");
e.printStackTrace();
} finally {
System.out.println("DB access finished");
}
}
La gestion des exceptions est décrite par try-catch (-finally)
.
Dans cet exemple, seul l'emplacement de l'erreur peut être spécifié car il s'agit de ʻException e`, mais il est également possible de saisir instantanément le contenu de l'erreur en modifiant la condition de capture et en écrivant en parallèle.
Par exemple
.java
try {
file_reader = new FileReader(customer);
~
} catch (FileNotFoundException f) { //Erreur de recherche de fichier
System.out.println("cannot find file");
f.printStackTrace();
} catch (IOException i) { //Erreur d'entrée / sortie de fichier
System.out.println("in/out error");
i.printStackTrace();
} finally {
try {
if(file_reader != null) {
file_reader.close();
}
} catch (IOException i) { //Erreur lors de la fermeture du fichier
System.out.println(i);
i.printStackTrace();
}
}
S'il y a un flux
① essayer --catch --catch
nouveau FileReader (client)
mais que vous ne trouvez pas le nom du fichierIl est ramifié en tenant compte des deux.
② enfin - essayez - attraper
Seulement détecté.
Il existe de nombreuses exceptions autres que FileNotFoundException
et ʻIOException, mais vous pouvez attraper toutes les erreurs avec ʻException
(bien que je ne puisse penser qu'à l'emplacement indiqué dans le programme ci-dessus. )
Vous devez initialiser le pilote JDBC avant de vous connecter à la base de données.
Dans le cas de PostgreSQL, écrivez comme suit
.java
Class.forName("org.postgresql.Driver").newInstance();
De plus, il est nécessaire d'utiliser la méthode ** getConnection ** que la classe ** DriverManager ** a en standard pour établir la connexion DB.
.java
connection = DriverManager.getConnection( <URL> , <USER>, <PASSWORD>);
L'URL s'écrit jdbc: postgresql: // <emplacement>: <numéro de port> / <nom de la base de données>
.
Cette fois, je l'ai mis ci-dessous.
endroit | numéro de port | Nom de la base de données |
---|---|---|
localhost | 5432 | customer |
Concernant la déconnexion, assurez-vous d'utiliser ** enfin ** au cas où.
.java
rs.close(); //rs est une variable dans l'interface ResultSet
Lors de l'envoi de SQL vers DB, vous devez d'abord créer une instruction à l'aide de la méthode ** createStatement ** définie dans l'interface ** Connection ** (doit être écrite comme un ensemble lors de l'envoi de SQL).
.java
statement = con.createStatement();
Lorsque ce qui précède est terminé, écrivez une requête pour l'instruction SQL
.java
resultset = stm.executeQuery(" <Instruction SQL> ");
Vous pouvez traiter ligne par ligne avec la méthode ** next () ** de l'interface ** ResultSet **.
.java
while (rs.next()) {
System.out.println(rs.getInt("<column>"));
System.out.println(rs.getString("<column>"));
}
PostgreSQL_test.java
package customer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class PostgreSQL_test {
public static void main(String[] args) throws Exception {
try {
System.out.println("DB access start");
PostgreSQL_test.dbConnect();
} catch (Exception e) {
System.out.println("error main()");
e.printStackTrace();
} finally {
System.out.println("DB access finished");
}
}
private static void dbConnect() throws Exception {
Connection con = null;
Statement stm = null;
ResultSet rs = null;
int num = 1;
String url = "jdbc:postgresql://localhost:5432/customer";
String user = "sf213471118";
String password = ""; //Aucun mot de passe n'a été défini cette fois
try {
Class.forName("org.postgresql.Driver").newInstance();
con = DriverManager.getConnection(url, user, password);
stm = con.createStatement();
rs = stm.executeQuery("SELECT * FROM customer");
while (rs.next()) {
System.out.println("[" + num + "Article]");
num++;
System.out.println("id : " + rs.getString("id"));
System.out.println("name : " + rs.getString("name"));
System.out.println("gender : " + rs.getString("gender"));
System.out.println("age : " + rs.getInt("age"));
}
} catch(SQLException e) {
System.out.println("error dbConnect()");
e.printStackTrace();
}finally {
try {
if ((rs != null)||(stm != null)||(con != null)) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Si vous déplacez ceci, ce qui suit sera retourné.
JavaConsole
DB access start
[1er cas]
id : 10001
name :Taro Tanaka
gender : m
age : 31
[2e]
id : 10002
name :Hanako Nakamura
gender : w
age : 44
[3e cas]
id : 10003
name :Ichiro Sato
gender : m
age : 20
[4e]
id : 10004
name :Aya Uchida
gender : w
age : 18
[5e]
id : 10005
name :Jiro Takahashi
gender : m
age : 56
[6e]
id : 10006
name :Satoru Nakazato
gender : m
age : 34
DB access finished
Si c'était vrai, je voulais afficher le nombre actuel de cas avec rs.next ()
, mais je n'ai pas bien compris, donc je l'ai sorti avec un soupir. .. ..
~~ Je serais très heureux si quelqu'un pouvait m'apprendre comment le faire ~~
Merci pour votre commentaire. Je l'ai corrigé comme suit.
① Recevez le nombre d'essais de la partie boucle avec rs.getRow ()
PostgreSQL_test.java
while (rs.next()) {
System.out.println("[" + rs.getRow() + "Article]"); /*Partie de correction*/
System.out.println("id : " + rs.getString("id"));
System.out.println("name : " + rs.getString("name"));
System.out.println("gender : " + rs.getString("gender"));
System.out.println("age : " + rs.getInt("age"));
}
② Correction de l'omission de fermeture
PostgreSQL_test.java
try {
if ((rs != null)||(stm != null)||(con != null)) {
rs.close();
stm.close(); /*Partie de correction*/
con.close(); /*Partie de correction*/
}
} catch (Exception e) {
e.printStackTrace();
}
Merci encore.
Recommended Posts