Skip to content

Commit ceaeede

Browse files
committed
🚧 Add insert batch
1 parent 533e974 commit ceaeede

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

src/main/java/fr/maxlego08/sarah/RequestHelper.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import fr.maxlego08.sarah.database.Schema;
44
import fr.maxlego08.sarah.logger.Logger;
5+
import fr.maxlego08.sarah.requests.InsertBatchRequest;
56
import fr.maxlego08.sarah.requests.UpsertBatchRequest;
67

78
import java.sql.SQLException;
@@ -118,4 +119,9 @@ public void upsertMultiple(List<Schema> schemas) {
118119
UpsertBatchRequest request = new UpsertBatchRequest(schemas);
119120
request.execute(this.connection, this.connection.getDatabaseConfiguration(), this.logger);
120121
}
122+
123+
public void insertMultiple(List<Schema> schemas) {
124+
InsertBatchRequest request = new InsertBatchRequest(schemas);
125+
request.execute(this.connection, this.connection.getDatabaseConfiguration(), this.logger);
126+
}
121127
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package fr.maxlego08.sarah.requests;
2+
3+
import fr.maxlego08.sarah.DatabaseConfiguration;
4+
import fr.maxlego08.sarah.DatabaseConnection;
5+
import fr.maxlego08.sarah.conditions.ColumnDefinition;
6+
import fr.maxlego08.sarah.database.Executor;
7+
import fr.maxlego08.sarah.database.Schema;
8+
import fr.maxlego08.sarah.logger.Logger;
9+
10+
import java.sql.Connection;
11+
import java.sql.PreparedStatement;
12+
import java.sql.ResultSet;
13+
import java.sql.SQLException;
14+
import java.sql.Statement;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
18+
public class InsertBatchRequest implements Executor {
19+
20+
private final List<Schema> schemas;
21+
22+
public InsertBatchRequest(List<Schema> schemas) {
23+
this.schemas = schemas;
24+
}
25+
26+
@Override
27+
public int execute(DatabaseConnection databaseConnection, DatabaseConfiguration databaseConfiguration, Logger logger) {
28+
if (schemas.isEmpty()) {
29+
return 0;
30+
}
31+
32+
Schema firstSchema = schemas.get(0);
33+
StringBuilder insertQuery = new StringBuilder("INSERT INTO " + firstSchema.getTableName() + " (");
34+
StringBuilder valuesQuery = new StringBuilder("VALUES ");
35+
36+
List<Object> values = new ArrayList<>();
37+
List<String> placeholders = new ArrayList<>();
38+
List<String> columnNames = new ArrayList<>();
39+
40+
for (ColumnDefinition column : firstSchema.getColumns()) {
41+
columnNames.add(column.getSafeName());
42+
}
43+
44+
insertQuery.append(String.join(", ", columnNames)).append(") ");
45+
46+
for (Schema schema : schemas) {
47+
List<String> rowPlaceholders = new ArrayList<>();
48+
for (ColumnDefinition column : schema.getColumns()) {
49+
rowPlaceholders.add("?");
50+
values.add(column.getObject());
51+
}
52+
placeholders.add("(" + String.join(", ", rowPlaceholders) + ")");
53+
}
54+
55+
valuesQuery.append(String.join(", ", placeholders));
56+
insertQuery.append(valuesQuery);
57+
58+
String finalQuery = databaseConfiguration.replacePrefix(insertQuery.toString());
59+
if (databaseConfiguration.isDebug()) {
60+
logger.info("Executing SQL: " + finalQuery);
61+
}
62+
63+
try (Connection connection = databaseConnection.getConnection();
64+
PreparedStatement preparedStatement = connection.prepareStatement(finalQuery, Statement.RETURN_GENERATED_KEYS)) {
65+
66+
int index = 1;
67+
for (Object value : values) {
68+
preparedStatement.setObject(index++, value);
69+
}
70+
71+
int updatedRows = preparedStatement.executeUpdate();
72+
73+
try (ResultSet generatedKeys = preparedStatement.getGeneratedKeys()) {
74+
if (generatedKeys.next()) {
75+
return generatedKeys.getInt(1);
76+
}
77+
}
78+
return updatedRows;
79+
} catch (SQLException exception) {
80+
exception.printStackTrace();
81+
return -1;
82+
}
83+
}
84+
}

0 commit comments

Comments
 (0)