Skip to content

Commit fd97ad0

Browse files
committed
Update SQL.java
1 parent 8075418 commit fd97ad0

1 file changed

Lines changed: 25 additions & 9 deletions

File tree

  • src/main/java/io/github/intisy/utils/custom

src/main/java/io/github/intisy/utils/custom/SQL.java

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public void createTable(String name, String... columns) {
149149

150150
public ResultSet executeSQL(Statement statement, String sql, String name, Type type) {
151151
try {
152-
logger.debug("Executing " + name + ": '" + sql + "' with type " + type);
152+
logger.debug("Executing " + name + ": \"" + sql + "\" with type " + type);
153153
switch (type) {
154154
case NORMAL:
155155
statement.execute(sql);
@@ -241,7 +241,7 @@ public List<String> selectData(String tableName, String columnToSelect, String..
241241
}
242242

243243
public void updateData(String tableName, String primaryKey, String primaryKeyValue, String... columnsAndValues) {
244-
String sql = buildUpdateStatement(tableName, primaryKey, columnsAndValues);
244+
String sql = buildUpdateStatement(tableName, primaryKey, primaryKeyValue, columnsAndValues);
245245
List<String> results = new ArrayList<>();
246246
try (Statement statement = getConnection().createStatement()) {
247247
executeSQL(statement, sql, "update data", Type.UPDATE);
@@ -358,36 +358,52 @@ private String buildInsertStatement(String tableName, Object... columnsAndValues
358358
return "INSERT INTO " + tableName + " (" + columns + ") VALUES (" + values + ")";
359359
}
360360

361-
private String buildSelectStatement(String tableName, String columnToSelect,
362-
String... whereClause) {
361+
private String buildSelectStatement(String tableName, String columnToSelect, String... whereClause) {
363362
StringBuilder sql = new StringBuilder("SELECT ")
364363
.append(columnToSelect)
365364
.append(" FROM ")
366365
.append(tableName);
367366

368367
if (whereClause.length > 0) {
368+
if (whereClause.length % 2 != 0) {
369+
throw new IllegalArgumentException("WHERE clause parameters must be in column-value pairs.");
370+
}
371+
369372
sql.append(" WHERE ");
370373
for (int i = 0; i < whereClause.length; i += 2) {
371374
if (i > 0) sql.append(" AND ");
372-
sql.append(whereClause[i]).append(" = ?");
375+
376+
// Append the column name and value directly, wrapping values in quotes
377+
sql.append(whereClause[i])
378+
.append(" = '")
379+
.append(whereClause[i + 1].replace("'", "''")) // Escape single quotes
380+
.append("'");
373381
}
374382
}
375383

376384
return sql.toString();
377385
}
378386

379-
private String buildUpdateStatement(String tableName, String primaryKey,
380-
String... columnsAndValues) {
387+
private String buildUpdateStatement(String tableName, String primaryKey, String primaryKeyValue, String... columnsAndValues) {
388+
if (columnsAndValues.length % 2 != 0) {
389+
throw new IllegalArgumentException("Columns and values must be paired.");
390+
}
391+
381392
StringBuilder sql = new StringBuilder("UPDATE ")
382393
.append(tableName)
383394
.append(" SET ");
384395

385396
for (int i = 0; i < columnsAndValues.length; i += 2) {
386397
if (i > 0) sql.append(", ");
387-
sql.append(columnsAndValues[i]).append(" = ?");
398+
399+
// Append column name and value directly, with values wrapped in quotes
400+
sql.append(columnsAndValues[i])
401+
.append(" = '")
402+
.append(columnsAndValues[i + 1].replace("'", "''")) // Escape single quotes
403+
.append("'");
388404
}
389405

390-
sql.append(" WHERE ").append(primaryKey).append(" = ?");
406+
sql.append(" WHERE ").append(primaryKey).append(" = '").append(primaryKeyValue.replace("'", "''")).append("'");
391407
return sql.toString();
392408
}
393409
}

0 commit comments

Comments
 (0)