Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb839e65

Browse files
authored
Merge pull request#1563 from lowcoder-org/fix/sql_order_param
Fix sql execution with orderby parameter.
2 parentsa2d94a4 +26bf298 commitb839e65

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

‎server/api-service/lowcoder-plugins/sqlBasedPlugin/src/main/java/org/lowcoder/plugin/sql/GeneralSqlExecutor.java‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,46 @@ private Pair<Statement, Boolean> getStatementAndExecute(Connection connection, S
148148
if (statementInput.isPreparedStatement()) {
149149
Stringsql =statementInput.getSql();
150150
List<Object>params =statementInput.getParams();
151+
152+
intorderByIndex = -1;
153+
StringsortValue =null;
154+
for (inti =0;i <params.size();i++) {
155+
Objectparam =params.get(i);
156+
if (paraminstanceofMap<?, ?>map &&map.containsKey("sort")) {
157+
orderByIndex =i;// Index of the ? to replace (0-based)
158+
sortValue =String.valueOf(map.get("sort"));// e.g., "ASC" or "DESC"
159+
break;
160+
}
161+
}
162+
163+
if (orderByIndex >=0 &&sortValue !=null) {
164+
// Validate sortValue to prevent SQL injection
165+
if (!sortValue.equalsIgnoreCase("ASC") && !sortValue.equalsIgnoreCase("DESC")) {
166+
sortValue ="ASC";// Default to ASC if invalid
167+
}
168+
169+
// Split the SQL at the ? placeholders
170+
String[]sqlParts =sql.split("\\?", -1);
171+
if (orderByIndex <sqlParts.length -1) {
172+
// Rebuild the SQL, replacing the ? at orderByIndex with sortValue
173+
StringBuildernewSql =newStringBuilder();
174+
for (inti =0;i <sqlParts.length;i++) {
175+
newSql.append(sqlParts[i]);
176+
if (i <sqlParts.length -1) {
177+
if (i ==orderByIndex) {
178+
newSql.append(sortValue);// Insert ASC or DESC
179+
}else {
180+
newSql.append("?");// Keep other placeholders
181+
}
182+
}
183+
}
184+
sql =newSql.toString();
185+
186+
// Remove the Map from params since it's no longer a bind parameter
187+
params.remove(orderByIndex);
188+
}
189+
}
190+
151191
varstatement =connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
152192

153193
bindPreparedStatementParams(statement,params);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp