90 lines
3.0 KiB
Java
90 lines
3.0 KiB
Java
package tools;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import org.springframework.jdbc.core.RowMapper;
|
|
import tctable.Tools;
|
|
|
|
import java.sql.ResultSet;
|
|
import java.sql.ResultSetMetaData;
|
|
import java.sql.SQLException;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
public class DBTools {
|
|
|
|
public static class JsonRowMapper implements RowMapper<String> {
|
|
|
|
@Override
|
|
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
// Получаем метаданные ResultSet для получения названий столбцов
|
|
int columnCount = rs.getMetaData().getColumnCount();
|
|
for (int i = 1; i <= columnCount; i++) {
|
|
String columnName = rs.getMetaData().getColumnName(i);
|
|
Object columnValue = rs.getObject(i);
|
|
resultMap.put(columnName, columnValue);
|
|
}
|
|
|
|
// Преобразовываем Map в JSON строку
|
|
try {
|
|
return objectMapper.writeValueAsString(resultMap);
|
|
} catch (Exception e) {
|
|
throw new RuntimeException("Failed to convert Map to JSON", e);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public static boolean hasColumn(ResultSet rs, String columnName) throws SQLException {
|
|
ResultSetMetaData metaData = rs.getMetaData();
|
|
int columnCount = metaData.getColumnCount();
|
|
|
|
for (int i = 1; i <= columnCount; i++) {
|
|
if (columnName.equalsIgnoreCase(metaData.getColumnName(i))) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static String getSQLValue(String t, String v) {
|
|
//if($t=='object' && (strtoupper($v)!='NULL' && gettype($v)=='string')) $t='string'; //Если id шники uuid
|
|
|
|
if (t.equals("object") || t.equals("uid")) {
|
|
if (v.isEmpty())
|
|
v = "NULL";
|
|
} else if (t.equals("i4") || t.equals("integer")) {
|
|
if (v.isEmpty())
|
|
v = "NULL";
|
|
} else if (t.equals("f8")) {
|
|
if (v.isEmpty())
|
|
v = "NULL";
|
|
v = Tools.replaceAll(v,",", "."); //The decimal part: point.
|
|
} else if (t.equals("f4")) {
|
|
if (v.isEmpty())
|
|
v = "NULL";
|
|
v = Tools.replaceAll(v,",", "."); //The decimal part: point.
|
|
} else if (t.equals("b")) {
|
|
if (v.isEmpty())
|
|
v = "NULL";
|
|
else if (v.equals("1"))
|
|
v = "true";
|
|
else if (v.equals("0"))
|
|
v = "false";
|
|
} else if (t.equals("string") || t.equals("text") || t.equals("dateTime") || t.equals("date")) {
|
|
if (v.isEmpty()) {
|
|
v = "NULL";
|
|
} else {
|
|
v = Tools.replaceAll(v,"'", "''");
|
|
v = "'" + v + "'";
|
|
}
|
|
} else {
|
|
v = "'" + v + "'";
|
|
}
|
|
return v;
|
|
}
|
|
|
|
}
|