如何在java中获取表的GeneratedKeys()

如何在java中获取表的GeneratedKeys(),java,sql-server-2008,jakarta-ee,jdbc,jdbc-odbc,Java,Sql Server 2008,Jakarta Ee,Jdbc,Jdbc Odbc,我有一个java web项目。我在Sql Server 2008中有数据库,其中有表person和customer。我正在插入值(用户名、密码、角色)进入表person,然后获取生成的id值'pid',并将其与其他属性一起插入表customer。这是我的代码`/* import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; im

我有一个java web项目。我在Sql Server 2008中有数据库,其中有表personcustomer。我正在插入值(用户名、密码、角色)进入表person,然后获取生成的id值'pid',并将其与其他属性一起插入表customer。这是我的代码`/*

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException{
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

 String name=request.getParameter("name");  
 String email=request.getParameter("email");
 String house=request.getParameter("house");
 String street=request.getParameter("street");
 String city=request.getParameter("city");
 String state=request.getParameter("state");
 String phone = "6086492155";
 int pincode=Integer.parseInt(request.getParameter("zip"));
 String username=request.getParameter("username");
 String password=request.getParameter("password");

try{
   Connection con= getConnection(response);
   PreparedStatement ps =con.prepareStatement("insert into person (username,password,role) values(?,?,'normaluser')",Statement.RETURN_GENERATED_KEYS);
   ps.setString(1, username);
   ps.setString(2, password);
   int i=ps.executeUpdate();
   ResultSet rs = ps.getGeneratedKeys();
    if (rs.next()) {
    int pId = rs.getInt(1);

    }
   PreparedStatement ps2= con.prepareStatement("insert into customer (name,email,house,street,city,state,pincode,phone,pid) values(?,?,?,?,?,?,?,?,?,pId)");
    ps.setString(1, name);
   ps.setString(2, email); 
   ps.setString(3, house);
   ps.setString(4, street);
   ps.setString(5, city);
   ps.setString(6, state);
   ps.setInt(7, pincode);
   ps.setString(8, phone);
    int j=ps2.executeUpdate();
   out.println(i);

   con.close();
if(i>0)
{
    out.println("inserted");
}
else
{
 out.println("not inserted");   
}
}
catch(Exception e){
   out.println("not inserted"+e); 
}
}


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

public Connection getConnection (HttpServletResponse response){
     Connection con=null;
        try{
                   PrintWriter out = response.getWriter();

                try{

                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                 con=DriverManager.getConnection("jdbc:odbc:OnlineShopping");;                   
                }
                catch(Exception e){
                   out.println(e.getMessage()); 
                }

        }catch(Exception e){
        }
        return con;
        }    
}
import java.io.IOException;
导入java.io.PrintWriter;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.Statement;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
字符串名称=request.getParameter(“名称”);
字符串email=request.getParameter(“email”);
字符串house=request.getParameter(“house”);
String street=request.getParameter(“street”);
字符串city=request.getParameter(“city”);
字符串状态=request.getParameter(“状态”);
String phone=“608649215”;
int pincode=Integer.parseInt(request.getParameter(“zip”);
字符串username=request.getParameter(“用户名”);
字符串密码=request.getParameter(“密码”);
试一试{
连接con=getConnection(响应);
PreparedStatement ps=con.prepareStatement(“插入到个人(用户名、密码、角色)值(?,,'normaluser')”,语句。返回生成的密钥);
ps.setString(1,用户名);
ps.setString(2,密码);
int i=ps.executeUpdate();
ResultSet rs=ps.getGeneratedKeys();
如果(rs.next()){
int pId=rs.getInt(1);
}
PreparedStatement ps2=con.prepareStatement(“插入客户(姓名、电子邮件、房屋、街道、城市、州、pincode、电话、pid)值(?,,,,,,,,,,,,,,,,,,pid)”;
ps.setString(1,名称);
ps.setString(2,电子邮件);
ps.setString(3,房屋);
ps.setString(街4号);
ps.setString(5,城市);
ps.setString(6,状态);
ps.setInt(7,pincode);
ps.setString(8,电话);
int j=ps2.executeUpdate();
out.println(i);
con.close();
如果(i>0)
{
out.println(“插入”);
}
其他的
{
out.println(“未插入”);
}
}
捕获(例外e){
out.println(“未插入”+e);
}
}
@凌驾
受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
processRequest(请求、响应);
}
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
processRequest(请求、响应);
}
@凌驾
公共字符串getServletInfo(){
返回“简短描述”;
}// 
公共连接getConnection(HttpServletResponse){
连接con=null;
试一试{
PrintWriter out=response.getWriter();
试一试{
forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
con=DriverManager.getConnection(“jdbc:odbc:OnlineShopping”);;
}
捕获(例外e){
out.println(e.getMessage());
}
}捕获(例外e){
}
返回con;
}    
}

但是我正在获取错误java.lang.UnsupportedOperationException我是初学者,有人能告诉我如何解决这个问题吗

您正在使用的Jdbc驱动程序不支持此方法。广泛使用的MS SQL Server JDBC驱动程序-支持检索生成的密钥。是在类似任务中使用此驱动程序的示例

要使用不同的驱动程序,请更改以下行:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:OnlineShopping");
对于JTD,它将是这样的:

Class.forName("net.sourceforge.jtds.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/mydb","login","password");

并非所有JDBC驱动程序都支持此功能。您使用的驱动程序是什么?可能与