Ошибка синтаксического анализатора параметров SQLJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка синтаксического анализатора параметров SQL

Сообщение Anonymous »

Я столкнулся с «ошибкой/функцией» при синтаксическом анализе SQL (org.httprpc.sql).
Если имя столбца sql содержит:, то это сбивает с толку. парсер и получил ошибку.
например: выберите 1 как «this is:notparam»

Индекс столбца выходит за пределы диапазона: 1, количество столбцы: 0.

Есть ли способ решить эту проблему? На самом деле я не могу избежать : в именах, поскольку в качестве параметров используется множество пользовательских запросов и динамических Excel.
Код:
String sql = reportTab.getSqlStatement();

// Parse SQL paramters
Parameters parameters = Parameters.parse(sql);
// Get connection from pool
Connection connection = getConnectionWithStatus(task,ds);

task.setExecutionStartTime(LocalDateTime.now());

task.setConnection(connection);
PreparedStatement statement = null;
List resultSet = new LinkedList();

try {

statement = connection.prepareStatement(parameters.getSQL());
parameters.apply(statement, paramMap);
task.setPreparedStatement(statement);
ResultSet rs = statement.executeQuery();
List columnNames = getColumnNames(rs);
long rowCount = 0;
task.setCurrentResultSetIndex(rowCount);
while (rs.next()) {

Зависимости Maven:

org.springframework.boot
spring-boot-starter-parent

2.7.0


Драйверы JDBC (у всех один и тот же симптом)

org.postgresql
postgresql



mysql
mysql-connector-java
runtime



com.oracle.database.jdbc
ojdbc8
runtime


Полная трассировка стека:
org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0.
at org.postgresql.jdbc.PgPreparedStatement.setNull(PgPreparedStatement.java:197)
at org.postgresql.jdbc.PgPreparedStatement.setObject(PgPreparedStatement.java:948)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setObject(HikariProxyPreparedStatement.java)
at org.httprpc.sql.Parameters.apply(Parameters.java:66)
at com.happy.python.application.service.data.CJdbcService.executeReportTask(CJdbcService.java:96)
at com.happy.python.application.service.data.CJdbcService.executeReportTask(CJdbcService.java:55)
at com.happy.python.application.data.entity.report.task.ReportTask.extractAndExecuteSingeReportTab(ReportTask.java:436)
at com.happy.python.application.data.entity.report.task.ReportTask.run(ReportTask.java:304)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
java.sql.SQLException: The column index is out of range: 1, number of columns: 0.
at com.happy.python.application.service.data.CJdbcService.executeReportTask(CJdbcService.java:148)
at com.happy.python.application.service.data.CJdbcService.executeReportTask(CJdbcService.java:55)
at com.happy.python.application.data.entity.report.task.ReportTask.extractAndExecuteSingeReportTab(ReportTask.java:436)
at com.happy.python.application.data.entity.report.task.ReportTask.run(ReportTask.java:304)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)


Подробнее здесь: https://stackoverflow.com/questions/738 ... -parse-bug
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»