应该使用executeUpdate()不需要ResultSet
需要ResultSet
接收的就是executeQuery()
executeUpdate()返回的是个int 想清楚逻辑
这明显是插入语句,应使用executeUpdate()
怎么可能是查询呢?
select @@identity ????
当然是executeUpdate()啦,返回的是影响的行数,int,即如果插入成功返回1,否则返回0。
有"?"要用PreparedStatement,不能用Statement.返回值就一个int,不用ResultSet接受.
我算是明白你的意思了,不过自己没有想过这样用.大不了你分开写好了,在executeUpdate()插入数据,再用executeQuery()读出最后插入的行。
要不用SCOPE_IDENTITY、IDENT_CURRENT 试试?
//解析过程如下:
create table b
(
ids int identity(1,1) primary key,
names varchar(20) not null
)
//源代码.
package com.zte.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class IdentitySQL {
private static final String DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private static final String URL = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs";
private static final String USER = "sa";
private static final String PWD = "";
public IdentitySQL() {
super();
// TODO Auto-generated constructor stub
}
public static Connection getConnection() {
Connection con = null;
try {
Class.forName(DRIVER);
con = DriverManager.getConnection(URL, USER, PWD);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public static void insert(String value) {
try {
String sql = "insert into b values (?); select @@identity;";
PreparedStatement ps = getConnection().prepareStatement(sql);
ps.setString(1, value);
int res=ps.executeUpdate();
System.out.println(res);
}catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
//System.out.println(getConnection());
String value = "test";
insert(value);
}
}
//因为语句是insert ,所以应该使用executeUpdate
若是使用executeQuery;他会将sql当成查询语句,但是根本不识别你这样的sql查询语句。
最好把这个做一个存储过程来处理