create table IF NOT EXISTS "Users" (
id INT GENERATED ALWAYS AS IDENTITY,
name varchar(255) not null,
PRIMARY KEY(id)
);
create table if not exists "Contacts"(
id int generated always as identity,
"customerId" INT,
"contactName" VARCHAR(255) not null,
phone VARCHAR(15),
email VARCHAR(255),
primary key(id),
constraint fk_customer
foreign key("customerId")
references "Users"(id)
);
insert into "Users"(name) values
('Petya'),
('Vasya'),
('Katya');
insert into "Contacts"("customerId","contactName",phone,email) values
(1,'First','12345672222222','email@kkk.ru'),
(1,'Second','2221234567','email1@kkk.ru'),
(3,'Main','3331234567','email2@kkk.ru');
select * from "Users" u left join "Contacts" c ON c."customerId" = u.id;
select * from "Users" u right join "Contacts" c ON c."customerId" = u.id;
select * from "Users" u inner join "Contacts" c ON c."customerId" = u.id;
select * from "Users" u join "Contacts" c ON c."customerId" = u.id;
select * from "Users" u cross join "Contacts";
join
![[Pasted image 20240922060439.png]]
получить все имена таблиц из базы
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
удаление данных из всех таблиц
//удаляет каскадом все таблицы в базе данных
public void deleteAll(){
//здесь лучше создать запрос подтверждения действия от пользвателя...
while(!_deleteAll()) System.out.println("its deleteAll!");
}
public boolean _deleteAll(){
boolean itsdone=true;
try(Statement stmt = this.connect.conn.createStatement()) {
// SQL-запрос для получения имен всех таблиц
String sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'";
ResultSet resultSet = stmt.executeQuery(sql);
// Выводим имена таблиц
while (resultSet.next()) {
String tableName = resultSet.getString("table_name");
// Если эта таблица зависит от кого-то метод вернёт её же имя
// if (!getDependentTables(tableName).isEmpty())
//если таблица не пустая побуем её удалить, если не получается пробуем следующую
if (!this.select.isEmptyTable(tableName))
{
itsdone=false;
System.out.println(tableName);
//чтобы не закрывался текущий ResultSet
try (Statement deleteStmt = this.connect.conn.createStatement()) {
deleteStmt.execute("DELETE FROM \"" + tableName + "\";");
// deleteStmt.execute("truncate table \"" + tableName + "\";");
} catch (SQLException e){
//если невозможно отчистить таблицу значит на неё кто-то ещё ссыается.
//берём следующую таблицу
continue;
}
} else {
//если это родительская таблица пробуем её отчистить
try{
try (Statement deleteStmt = this.connect.conn.createStatement()) {
deleteStmt.execute("DELETE FROM \"" + tableName + "\";");
// deleteStmt.execute("truncate table \"" + tableName + "\";");
}
}catch (RuntimeException e){
System.out.println(e);
//если не удалось значит ещё есть дочерние таблицы
itsdone=false;
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
// System.out.println(e);
}
return itsdone;
}
public String wrapTwoQuot(String str){
StringBuilder newStr=new StringBuilder();
return (newStr.append("\"").append(str).append("\"")).toString();
}
Проверьте код Java: Убедитесь, что вы правильно передаете SQL-запрос в метод executeQuery(). Вот исправленный пример кода:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class PostgreSQLTablesExample {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/your_database"; // Замените на ваш URL
String user = "your_username"; // Замените на ваше имя пользователя
String password = "your_password"; // Замените на ваш пароль
try (Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement()) {
// SQL-запрос для получения имен всех таблиц
String sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'";
ResultSet resultSet = statement.executeQuery(sql);
// Выводим имена таблиц
while (resultSet.next()) {
String tableName = resultSet.getString("table_name");
System.out.println("Table: " + tableName);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}