使用JDBC无法正确查询数据库。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JDBC无法正确查询数据库。相关的知识,希望对你有一定的参考价值。

我试图使用用户的输入更新数据库,并将其保存在jtable中,然后使用jtable更新数据库,但我无法获取和更新数据库中的第二行。

请提供一个解决方案,先谢谢你。

        try {

            Class.forName("com.mysql.jdbc.Driver");
            con = myconnection.getConnection();

            String name;

            for (int i = 0; i < jTable2.getRowCount(); i++) {
                name = (String) jTable2.getModel().getValueAt(i, 0);
                String abcd = "select * from medicine where Name=? ";
                stmt = conn.prepareStatement(abcd);

                stmt.setString(1, name);
                rs = stmt.executeQuery();
                if (rs.next()) {

                    name = (String) jTable2.getModel().getValueAt(i, 0);
                    String stock = rs.getString("qty");
                    int nowstock = Integer.parseInt(stock);
                    int qty1 = Integer.parseInt(jTable2.getValueAt(i, 2).toString());

                    int newstock = nowstock - qty1;//Integer.parseInt(jTable2.getValueAt(i, 2).toString());
                    String sqlupdate = "UPDATE medicine SET qty='" + newstock + "'WHERE Name='" + name + "' ";  //
                    stmt = conn.prepareStatement(sqlupdate);
                    stmt.executeUpdate();

                }

            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Bill.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Bill.class.getName()).log(Level.SEVERE, null, ex);
        }
答案

select没有任何作用,你可以直接迭代所有名字并更新。

for (int i=0; i < jTable2.getRowCount(); i++) {
    String name = (String) jTable2.getModel().getValueAt(i, 0);
    int qty1 = Integer.parseInt(jTable2.getValueAt(i, 2).toString());
    String update = "UPDATE medicine SET qty = qty - ? WHERE Name = ?";
    PreparedStatement ps = conn.prepareStatement(update);
    ps.setInt(1, qty1);
    ps.setString(2, name);
    ps.executeUpdate();
}

如果你的JTable有超过10个左右的名字 那么一个更有效的方法是用一个单次更新的方式来完成 WHERE IN 子句,包含表中出现的所有名称,即

UPDATE medicine SET qty = qty - ? WHERE Name IN (...);

以上是关于使用JDBC无法正确查询数据库。的主要内容,如果未能解决你的问题,请参考以下文章

使用片段时 Intellij 无法正确识别 Thymeleaf 模型变量

带有边距和页面转换器的片段内的 ViewPager 无法正确呈现

无法在 ipython 中正确创建 spark 上下文以链接到 MySQL - com.mysql.jdbc.Driver

部分代码片段

嵌套片段数据在中继中始终相同

Relay.js 没有正确解析组合片段