Re: Jaw drop: JDBC will let you update rows with the wrong data type (within reason)

Charles Wilt <[email protected]> Wed, 6 Oct 2021 17:19:36 -0600
Newsgroups gmane.comp.lang.as400.java
Message-ID <CAJ=Tnc5APcfQ_guuuaEUXXyEzuna==opKa6CpH+Rt7obEbrdbg@mail.gmail.com>
Yep this, autocasting by the db...

Charles

On Wed, Oct 6, 2021 at 2:19 PM Niels Liisberg <nli-y1igGha7WhZnI0JKdf8LmQC/[email protected]> wrote:

> I think it is the auto-cast in Db2 that kicks in. And why statement 3
> fails. For that it can not cast the current object value.
>
>
> ons. 6. okt. 2021 kl. 21.58 skrev David Gibbs via JAVA400-L <
> [email protected]>:
>
> > Folks:
> >
> > I just encountered a situation where JDBC allowed me to update rows in a
> > table where the values did not match the column definition.
> >
> > As long as you use the setObject method, you can set a numeric column to
> > a string value and a character column with a numeric value.
> >
> > The value contents have to match the column definition, but it doesn't
> > seem to care what the data type being passed in.
> >
> > For instance:
> >
> > You create a table as such ...
> >
> > create table testtab1 (
> >    decfield decimal(8,0),
> >    charfield char(10)
> > )
> >
> > ... and then run code like this ...
> >
> > try (
> >    Connection conn = DriverManager.getConnection(url, props);
> >    PreparedStatement stmt = conn.prepareStatement("insert into
> > dxglib/testtab1 (decfield,charfield) values(?,?)");
> > ) {
> >
> >    stmt.setObject(1, 1);
> >    stmt.setObject(2, "xyz");
> >    stmt.executeUpdate();
> >
> >    stmt.setObject(1, "2");
> >    stmt.setObject(2, 3);
> >    stmt.executeUpdate();
> >
> >    stmt.setObject(1, "A");
> >    stmt.setObject(2, 3);
> >    stmt.executeUpdate();
> >
> > } catch (Exception e) {
> >    e.printStackTrace();
> > }
> >
> > .. the first two updates will work fine, but the 3rd will fail.
> >
> > david
> > --
> > I'm riding in the American Diabetes Association's Tour de Cure to raise
> > money for diabetes research, education, advocacy, and awareness.  You
> > can make a tax-deductible donation to my ride by visiting
> > https://mideml.diabetessucks.net.
> >
> > You can see where my donations come from by visiting my interactive
> > donation map ... https://mideml.diabetessucks.net/map (it's a geeky
> > thing).
> > --
> > This is the Java Programming on and around the IBM i (JAVA400-L) mailing
> > list
> > To post a message email: [email protected]
> > To subscribe, unsubscribe, or change list options,
> > visit: https://lists.midrange.com/mailman/listinfo/java400-l
> > or email: JAVA400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org
> > Before posting, please take a moment to review the archives
> > at https://archive.midrange.com/java400-l.
> >
> > Help support midrange.com by shopping at amazon.com with our affiliate
> > link: https://amazon.midrange.com
> >
> --
> This is the Java Programming on and around the IBM i (JAVA400-L) mailing
> list
> To post a message email: [email protected]
> To subscribe, unsubscribe, or change list options,
> visit: https://lists.midrange.com/mailman/listinfo/java400-l
> or email: JAVA400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org
> Before posting, please take a moment to review the archives
> at https://archive.midrange.com/java400-l.
>
> Help support midrange.com by shopping at amazon.com with our affiliate
> link: https://amazon.midrange.com
>
-- 
This is the Java Programming on and around the IBM i (JAVA400-L) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org
Before posting, please take a moment to review the archives
at https://archive.midrange.com/java400-l.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com