Niedawno zaktualizowałem z sqlite-jdbc-3.7.2.jar do sqlite-jdbc-3.26.0.jar. Zauważyłem, że zapytanie wstawiania w moim kodzie nie działa z wyjątkiem wyjątku „java.sql.SQLException: Wartości niezwiązane z instrukcją”.
Poniżej znajduje się fragment kodu, który działa dobrze dla poprzedniej wersji 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
}
Przeczytałem informacje o wersji https://www.sqlite.org/changes.html i sprawdziłem, że w ramach ulepszeń Planera zapytań niewiele się zmieniło (Planista zapytań bada wartości powiązanych parametrów, aby ustalić, czy częściowe indeks jest użyteczny.). Ale nadal nie jestem pewien, jakie ulepszenie to wpłynęło na mój kod. Czy ktoś może też poprowadzić mnie, jak naprawić powyższy kod?
Dzięki, Ketaki
PreparedStatement pstmt = conn.prepareStatement(sqlStatement))
masz dodatkowy prawy nawias, a tuż pod nim blok otoczony nawiasami klamrowymi, dlaczego? Czy brakuje instrukcji if, która nie pozwala parametrom uzyskać wartości? W każdym razie masz później taką instrukcję if.
somecondition
jest to fałsz, podajesz tylko 3. Na to właśnie narzeka SQLite.