Java 从序列中获取下一个值

Java 从序列中获取下一个值,java,sql,Java,Sql,我这里有一些代码来获取序列的下一个值,但每次都会将记录总数添加到结果中 我只是在学习预先准备好的语句,我想这是一个很小的东西,也许是rset。next()应该是其他的东西吗 public void add( String title, String actor, String genre ) { try { String sql2 = "Select movie_seq.nextval from Movie"; pstmt = conn.prepareSt

我这里有一些代码来获取序列的下一个值,但每次都会将记录总数添加到结果中

我只是在学习预先准备好的语句,我想这是一个很小的东西,也许是rset。next()应该是其他的东西吗

public void add( String title, String actor, String genre ) {
    try {
        String sql2 = "Select movie_seq.nextval from Movie";
        pstmt = conn.prepareStatement(sql2);

            rset = pstmt.executeQuery();
            int nextVal = 0;
            if(rset.next())
                nextVal = rset.getInt(1);



        String queryString = "Select MovieID, Title, Actor, Genre from Movie";
        pstmt = conn
                .prepareStatement(queryString,
                        ResultSet.TYPE_SCROLL_SENSITIVE,
                        ResultSet.CONCUR_UPDATABLE);
        rset = pstmt.executeQuery();

        rset.moveToInsertRow();
        rset.updateInt(1, nextVal);
        rset.updateString(2, title);
        rset.updateString(3, actor);
        rset.updateString(4, genre);
        rset.insertRow();
        pstmt.executeUpdate();

    } catch (SQLException e2) {
        System.out.println("Error going to previous row");
        System.exit(1);
    }
}

感谢您的帮助。

为什么不使用while而不是if进行迭代呢。像这样的

List lst = new ArrayList();

Someclass sc = new SomeClass(); //object of the class 

    String query = "SELECT * from SomeTable";
                PreparedStatement pstmt = sqlConn.prepareStatement(query);
                ResultSet rs = pstmt.executeQuery();
                Role role = null;
                while (rs.next()) {
                    String one = rs.getString(1);
                    String two = rs.getString(2);
                    boolean  three = rs.getBoolean(3);
                    //if you have setters getters for them 
                               sc.setOne(one);
                               sc.setTwo(two);
                               sc,setThree(three);
                           lst.add(sc)
                                    }
//in the end return lst which is of type List<SomeClass>
            }
List lst=new ArrayList();
Someclass sc=新的Someclass()//类的对象
String query=“SELECT*fromsometable”;
PreparedStatement pstmt=sqlConn.prepareStatement(查询);
结果集rs=pstmt.executeQuery();
Role=null;
while(rs.next()){
字符串一=rs.getString(1);
字符串二=rs.getString(2);
布尔三=rs.getBoolean(3);
//如果你有二传手和接球手
sc.setOne(一);
sc.setTwo(二);
sc,SET三(三);
第一次增补(sc)
}
//最后返回列表类型的lst
}

我想您不需要调用
pstmt.executeUpdate()

如中所述,函数insertRow将该行存储在数据集和数据库中

以下代码显示了添加新行所需的所有操作:

   rset.moveToInsertRow(); // moves cursor to the insert row
   rset.updateString(1, "AINSWORTH"); // updates the
      // first column of the insert row to be AINSWORTH
   rset.updateInt(2,35); // updates the second column to be 35
   rset.updateBoolean(3, true); // updates the third column to true
   rset.insertRow();
   rset.moveToCurrentRow();

你不应该这样做吗

String sql2 = "Select " + movie_seq.nextval + " from Movie";

实际上,您似乎在向SQL查询中传递一个稍微虚假的字符串,这可能是默认的最大索引(不是100%正)。然后rs.next()只是将其递增。

或者,如果您试图读取列表,请创建一个类类型的列表,如列表,并将这些对象添加到该列表中,我必须获取序列的下一个值。您可以每次创建一个新实例,并将其添加到列表中。这种代码的和平效果很好。正是这种平静让我感到不安:String sql2=“Select movie\u seq.nextval from movie”;pstmt=连接准备状态(sql2);rset=pstmt.executeQuery();int nextVal=0;if(rset.next())nextVal=rset.getInt(1);难道您不能直接编写:sql2=“插入电影(电影ID、片名、演员、流派)值(电影_seq.nextval、、、?)”?使用此语句,您可以避免两个select语句和movetoinsertrow。是的,我可以,但我必须以这种方式为大学做。那么您的结果是什么样的呢?我已经在表中使用sql2=“INSERT INTO Movie(MovieID,Title,Actor,GREEP)值(Movie_seq.nextval,,,,?)插入了8条记录;所以下一个数值是9。它第一次起作用,下一条记录插入时,MovieID为9。但是nextval跳到17,然后nextval跳到26。movie_seq.nextval不是一个变量。啊,我的SQL生锈了。我想我被你所说的增加结果的意思弄糊涂了。