Java 从序列中获取下一个值
我这里有一些代码来获取序列的下一个值,但每次都会将记录总数添加到结果中 我只是在学习预先准备好的语句,我想这是一个很小的东西,也许是rset。next()应该是其他的东西吗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
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生锈了。我想我被你所说的增加结果的意思弄糊涂了。