@@ -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