执行executeQuery时,Resultset始终为空

时间:2016-11-04 06:16:59

标签: java jdbc

我目前正在编写一个简单的Java应用程序,它从XLS文件中读取信息,然后将其输入数据库。由于XLS确实有重复的记录,因此我会简单检查XLS文件中的条目是否已存在于数据库中。这是我的代码:

public static void addResult(ArrayList<ArrayList<String>> listResults)
{
    try
    {
        openDatabase();
        stmt = c.createStatement();

        for (int i = 0; i < listResults.size(); i++)
        {
            PreparedStatement stm = c.prepareStatement("SELECT player_name FROM results WHERE player_name=?;");
            stm.setString(1, listResults.get(i).get(ReadResultsFile.NAME));
            System.out.println(stm);
            ResultSet rs = stm.executeQuery();

            if (rs.getRow() <= 0)
            {
                String typeOfPlay = new String();

                if (listResults.get(i).get(ReadResultsFile.TYPE).equals("Simple"))
                {
                    typeOfPlay = "single";
                }
                else if (listResults.get(i).get(ReadResultsFile.TYPE).equals("Double"))
                {
                    typeOfPlay = "double";
                }

                stm = c.prepareStatement("INSERT INTO results (player_name, school_id, " +  typeOfPlay + ", tournament_id) "
                        + "VALUES(?,?,?,?);");

                stm.setString(1, listResults.get(i).get(ReadResultsFile.NAME));
                stm.setString(2, listResults.get(i).get(ReadResultsFile.SCHOOL_ID));
                stm.setInt(3, Integer.parseInt(listResults.get(i).get(ReadResultsFile.SCORE)));
                stm.setString(4, "1");
                stm.executeUpdate();
            }
            else
            {
                String typeOfPlay = new String();

                if (listResults.get(i).get(ReadResultsFile.TYPE).equals("Simple"))
                {
                    typeOfPlay = "single";
                }
                else if (listResults.get(i).get(ReadResultsFile.TYPE).equals("Double"))
                {
                    typeOfPlay = "double";
                }

                stm = c.prepareStatement("UPDATE results SET " + typeOfPlay + "=? WHERE player_name=?;");

                stm.setString(1, typeOfPlay);
                stm.setString(2, listResults.get(i).get(ReadResultsFile.SCORE));
                stm.setString(1, listResults.get(i).get(ReadResultsFile.NAME));
                System.out.println(stm);
                stm.executeUpdate();
            }
        }

        closeDatabase();
    }
    catch (Exception e)
    {
        System.err.println(e.getClass().getName() + ": " + e.getMessage());
        System.exit(0);
    }
}

出现的问题是rs.getRow()函数总是返回-1。我尝试直接在数据库工具中运行SELECT查询,如果已存在类似的条目,则查询返回player_name列。不幸的是,它在Java中也是如此。

我不确定此时该怎么做。

感谢您的任何提示!

1 个答案:

答案 0 :(得分:3)

getRow将无法按照javadocs

运行
  

检索当前行号。第一行是数字1,第二行是数字2,依此类推。

  

ResultSet游标最初位于第一行之前;该   第一次调用方法接下来会使第一行成为当前行

通常使用

while (rs.next ()) {....