有一个连接池(Hikari):
public DataSource(String databaseUrl, String user, String password, int dbPoolSize) {
DataSource.databaseUrl = databaseUrl;
DataSource.user = user;
DataSource.password = password;
DataSource.dbPoolSize = dbPoolSize;
ds = new HikariDataSource();
ds.setUsername(user);
ds.setPassword(password);
ds.setMaximumPoolSize(dbPoolSize);
ds.setPoolName("JPAHikariCP");
ds.setMaxLifetime(120000);
ds.setConnectionTimeout(30000);
ds.setIdleTimeout(30000);
ds.setMinimumIdle(5);
if (service.equals(Service.EXPORTER)){
ds.setJdbcUrl(databaseUrl);
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setAutoCommit(false);
ds.setTransactionIsolation(String.valueOf(TRANSACTION_READ_COMMITTED));
ds.addDataSourceProperty("useUnicode", "yes");
ds.addDataSourceProperty("characterEncoding", "utf8");
} else if (service.equals(Service.IMPORTER_POSTGRES)){
ds.setJdbcUrl(databaseUrl);
ds.setDriverClassName("org.postgresql.Driver");
} else if (service.equals(Service.IMPORTER_MSSQL)){
ds.setDataSourceClassName("com.microsoft.sqlserver.jdbc.SQLServerDataSource");
ds.addDataSourceProperty("url", databaseUrl);
} else if (service.equals(Service.IMPORTER_CLICKHOUSE)){
ds.setValidationTimeout(250);
ds.setDriverClassName("ru.yandex.clickhouse.ClickHouseDriver");
ds.setJdbcUrl(databaseUrl);
}
}
……
try {
connection = DataSource.getInstance().getConnection();
if (service.equals(Service.EXPORTER)){
statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
statement.setFetchSize(Integer.MIN_VALUE);
} else if (service.equals(Service.IMPORTER_MSSQL)) {
statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
} else if (service.equals(Service.IMPORTER_CLICKHOUSE) || service.equals(Service.IMPORTER_POSTGRES)) {
statement = connection.createStatement();
}
} catch (SQLException e) {
log.error(e.getCause());
Arrays.stream(e.getStackTrace()).map(toString -> "\u001B[31m" + toString + "\u001B[0m").forEach(log::error);
}
...
public void executeRequest(String request) throws SQLException {
statement.execute(request);
}
我通过执行 INSERT
语句.执行(请求);
如果连接到 Postgres 或 Clickhouse 并且表不包含某些字段,则会返回错误,这是应该的。
如果连接到 mssql 数据库并且表不包含某些字段没有给出任何错误,则数据不会进入表中。与成功插入一样的行为。
用什么给定的问题,在mssql中插入可以连接吗?连接配置错误或数据库端有问题?