Получение исключения «java.sql.SQLException: значения, не связанные с оператором» - PullRequest
0 голосов
/ 15 января 2019

Я недавно обновился с sqlite-jdbc-3.7.2.jar до sqlite-jdbc-3.26.0.jar. Я заметил, что запрос вставки в моем коде не выполняется с исключением «java.sql.SQLException: значения, не связанные с оператором».

Ниже приведен фрагмент кода, который отлично работает для предыдущей версии sqlite:

String sqlStatement = "INSERT INTO table_name(id,name,type,author,size) VALUES (?,?,?,?,?)";
try
{
    Connection conn = this.connect(<name>); 
    PreparedStatement pstmt = conn.prepareStatement(sqlStatement))
    {
        pstmt.setInt(1, rs.getInt(<value>));
        pstmt.setString(2, rs.getString(<value>));
        pstmt.setInt(3, rs.getInt(<value>));

        if (somecondition)
        {
            pstmt.setString(4, rs.getString(<Value>));
            pstmt.setInt(5, rs.getInt(<value>));

        }
        pstmt.executeUpdate();
    }
}
catch(Exception e)
{
    //handling of exception goes here
}

Я прочитал примечания к выпуску https://www.sqlite.org/changes.html и проверил, что в рамках усовершенствований планировщика запросов некоторые вещи были изменены (Планировщик запросов проверяет значения связанных параметров, чтобы определить, можно ли использовать частичный индекс. ). Но мне до сих пор не ясно, что это было за улучшение и как оно влияет на мой код. Также кто-нибудь может подсказать мне, как исправить вышеуказанный код?

Спасибо, Ketaki

1 Ответ

0 голосов
/ 18 января 2019

В приведенной выше программе запрос вставки ожидал заполнения 5 значений пользователем. Однако, если (некоторое условие) не выполняется, значения для 4-го и 5-го не вставляются в запрос. Это было проблемой, так как sqlite-jdbc-3.26.0 ожидает, что все значения будут заполнены до выполнения запроса. В этом исправлении я обеспечил заполнение всех значений, даже если «somecondition» ложно, вставив блок else.

Исправлено:

 if (somecondition)
  {
            pstmt.setString(4, rs.getString(<Value>));
            pstmt.setInt(5, rs.getInt(<value>));

  }
  else
  {
            pstmt.setString(4, rs.getString(<default-value>));
            pstmt.setInt(5, rs.getInt(<defaul`enter code here`t-value>));
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...