75 lines
2.9 KiB
Java
75 lines
2.9 KiB
Java
package tctable;
|
||
|
||
import java.io.IOException;
|
||
import java.io.OutputStream;
|
||
import java.sql.*;
|
||
import java.util.HashMap;
|
||
import java.util.Map;
|
||
|
||
//В андроид не используется данный класс
|
||
public class TCTableTools {
|
||
|
||
//Записать таблицу в OutputStream
|
||
public static boolean getTCTableFromResultSet(String name, int id, ResultSet rs, OutputStream os){
|
||
TCTable tbl=new TCTable(name,id);
|
||
try {
|
||
ResultSetMetaData rsmd = rs.getMetaData();
|
||
for(int i=1;i<=rsmd.getColumnCount();i++)
|
||
{
|
||
TCField field = new TCField(rsmd.getColumnName(i), rsmd.getColumnTypeName(i));
|
||
tbl.addField(field);
|
||
}
|
||
tbl.getHeader(os);
|
||
while (rs.next())
|
||
{
|
||
for(int i=1;i<=rsmd.getColumnCount();i++)
|
||
{
|
||
if(rsmd.getColumnTypeName(i).equals("geometry")) { //Геометрию не сохраняю пока не знаю как лучьше сохранять
|
||
tbl.fields.get(i - 1).setValue(null);
|
||
}else {
|
||
tbl.fields.get(i - 1).setValue(rs.getString(i));
|
||
}
|
||
}
|
||
tbl.getCol(os);
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//Напиши функцию: Получить ассоциативный массив название полей таблицы и их тип
|
||
public static Map<String, String> getTableSchema(Connection connection, String schemaName, String tableName) {
|
||
Map<String, String> schemaMap = new HashMap<>();
|
||
String query = """
|
||
SELECT c.column_name,
|
||
CASE
|
||
WHEN t.typtype = 'e' THEN 'enum'
|
||
WHEN t.typname = 'USER-DEFINED' THEN
|
||
(SELECT pt.typname FROM pg_type pt WHERE pt.oid = c.udt_name::regtype::oid)
|
||
ELSE t.typname
|
||
END as data_type
|
||
FROM information_schema.columns c
|
||
JOIN pg_type t ON c.udt_name = t.typname
|
||
WHERE c.table_schema = ?
|
||
AND c.table_name = ?
|
||
""";
|
||
try (PreparedStatement statement = connection.prepareStatement(query)) {
|
||
statement.setString(1, schemaName);
|
||
statement.setString(2, tableName);
|
||
try (ResultSet resultSet = statement.executeQuery()) {
|
||
while (resultSet.next()) {
|
||
String columnName = resultSet.getString("column_name");
|
||
String columnType = resultSet.getString("data_type");
|
||
schemaMap.put(columnName, columnType);
|
||
}
|
||
}
|
||
} catch (SQLException e) {
|
||
e.printStackTrace();
|
||
}
|
||
return schemaMap;
|
||
}
|
||
|
||
}
|