Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JDBC从SQL数据库中检索特定数据?_Java_Sql Server_Jdbc_Resultset - Fatal编程技术网

Java 如何使用JDBC从SQL数据库中检索特定数据?

Java 如何使用JDBC从SQL数据库中检索特定数据?,java,sql-server,jdbc,resultset,Java,Sql Server,Jdbc,Resultset,我创建了一个SQL数据库,其中包含三个表:学生表、课程表、学习表。我在向学生和课程添加和检索信息方面没有问题,但当我尝试对研究进行同样的操作时,我会遇到一些问题。我已经把它缩小到如下所示的部分。问题是,我可以添加一个不存在于研究表中的学生(但存在于学生和课程表中),而不会出现问题。但是,如果我已经有一个学生在学习表中,我不想再添加一个条目(即学习一门以上课程的学生),我将一无所获。我尝试过在代码段之外使用许多循环和方法绕过它,但都不起作用。我很确定我已经接近答案了,但我需要帮助才能完成。感谢您的

我创建了一个SQL数据库,其中包含三个表:学生表、课程表、学习表。我在向学生和课程添加和检索信息方面没有问题,但当我尝试对研究进行同样的操作时,我会遇到一些问题。我已经把它缩小到如下所示的部分。问题是,我可以添加一个不存在于研究表中的学生(但存在于学生和课程表中),而不会出现问题。但是,如果我已经有一个学生在学习表中,我不想再添加一个条目(即学习一门以上课程的学生),我将一无所获。我尝试过在代码段之外使用许多循环和方法绕过它,但都不起作用。我很确定我已经接近答案了,但我需要帮助才能完成。感谢您的帮助

public void saveStudies() throws SQLException {

    String checkSql = "select count(*) as count from studies where spnr=?";
    PreparedStatement checkStmt = con.prepareStatement(checkSql);

    String insertSql = "insert into studies (spnr, cid) values (?, ?)";
    PreparedStatement insertStmt = con.prepareStatement(insertSql);

    for(Studies studies: studiess) {
        int spnr = studies.getSpnr();
        int cid = studies.getCid();

        checkStmt.setInt(1, spnr);

        ResultSet checkResult = checkStmt.executeQuery();
        checkResult.next();

        int count = checkResult.getInt(1);

        if(count == 0) {

            System.out.println("Inserting student with pnr: " + spnr + " into course with cid: " + cid);

            insertStmt.setInt(1, spnr);
            insertStmt.setInt(2, cid);

            insertStmt.executeUpdate();
        }
        else {
            System.out.println("A message containing information that says that the student and or course does not exist in the database");
        }

    }

    insertStmt.close();
    checkStmt.close();
}

正如下面所述,我查错了表。解决方案是检查其他两个表(学生和课程),以了解天气情况。我可以在研究表中添加一些条目(需要一个学生和一门课程)。

您意识到这在事务上不安全,对吗?有人可能会在您检查计数和执行插入操作之间插入某些内容。请再次查看您的select查询。请用文字向我们描述它实际的计数情况。@MeBigFatGuy-考虑到应用程序的范围和限制,这个问题不会成为问题。@GordThompson-好吧,它正在创建一个名为“计数”的新列,其中存储特定学生id(称为spnr)的次数出现在研究表中。如果要检查该学生是否存在于其他表中(例如“学生”表),则select查询应检查该表,而不是“研究”表。