【问题标题】:Why is my Java program not updating the associated postgresql table?为什么我的 Java 程序没有更新关联的 postgresql 表?
【发布时间】:2015-08-04 11:01:43
【问题描述】:

我的代码有问题让我很困惑。我创建了一个 Java 应用程序来测试在 postgresql 中操作表中的行的不同方法。我能够很好地连接到数据库,但是当我尝试更新表时出现了问题。首先,这是我在执行查询select * from "testTable" order by "p_id" ASC; 后在postgresql 中的表:

             |name       |age        |p_id       |salary
              character   integer     integer    character varying(10)
1            |Bob        |25        |1       |20
2            |Mary       |22        |2       |
3            |Abraham    |55        |3       |22
4            |Ellen      |31        |4       |

我想做的是给玛丽和艾伦发薪水。我使用下面的 Java 代码来尝试完成这个任务:

import java.util.ArrayList;
import org.postgresql.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Arrays;
import java.util.regex.*;
import java.io.IOException;
import java.sql.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.util.*;
public class Test
{
public static void main(String[] args) throws IOException
{
{
    String s1 = "";
    String s2 = "";
    String s3 = ""; 
    String s4 = "";
    try{
        Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/myapp5_development", "alex", "");
        Statement myStmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        ResultSet myRs = myStmt.executeQuery("select \"salary\", \"p_id\" from \"testTable\" where \"salary\" is null order by p_id ASC");
        int counter = 0;
        String[] salaries = {"45", "17"}; 

        while (myRs.next())
        {
            s3 = myRs.getString("p_id");
            s4 = myRs.getString("salary");
            System.out.println("ID: " + s3 +", salary: " + s4);
            myRs.updateString("salary", salaries[counter] );
            System.out.println(salaries[counter]);
            System.out.println(counter);
            counter++;
        }

    }
    catch(Exception exc){
        exc.printStackTrace();
    }
}
}
}

“while”循环中的代码假定遍历表中“salary”值为空的每一行。然后它使用“salaries”数组中的值填充空值。输出显示在循环中找到了具有空薪水值的行,并且计数器正在相应地递增。 “salaries”数组中的相应值也可以根据计数器的值找到。但是,行本身并没有被更新。我应该怎么做才能正确更新表的行?这是控制台的输出:

ID: 2, salary: null
45
0
ID: 4, salary: null
17
1

这是发送相同 SQL 查询时的结果表:

             |name       |age        |p_id       |salary
              character   integer     integer    character varying(10)
1            |Bob        |25        |1       |20
2            |Mary       |22        |2       |
3            |Abraham    |55        |3       |22
4            |Ellen      |31        |4       |

【问题讨论】:

  • 好像你没有提交事务。

标签: java postgresql sql-update row


【解决方案1】:

使用myRs.updateString("salary", salaries[counter] ); 后,您应该像这样使用updateRow() 更新行:

myRs.updateString("salary", salaries[counter] );
myRs.updateRow();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-10-24
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2013-11-21
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多