Я столкнулся с «ошибкой/функцией» при синтаксическом анализе 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
Ошибка синтаксического анализатора параметров SQL ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1731347308
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)
Подробнее здесь: [url]https://stackoverflow.com/questions/73850588/sql-paramter-parse-bug[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия