简体   繁体   English

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

[英]How to getGeneratedKeys() of a table in java

I have a java web project.I have database in Sql Server 2008 with tables person and customer .I am inserting values(username ,paswword,role) in to table person and then take the generated id value 'pid' and insert this with other attributes into table customer .This is my code`/* 我有一个java web项目。我在Sql Server 2008中有表人和 客户的数据库 。我正在将值(用户名,密码,角色)插入到表人中 ,然后将生成的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;
        }    
}

But I am geting error java.lang.UnsupportedOperationException .I think error is due to this line ResultSet rs = ps.getGeneratedKeys(); 但是我发错了java.lang.UnsupportedOperationException 。我认为错误是由于这行ResultSet rs = ps.getGeneratedKeys(); I am a beginner so can anyone tell me how to solve this issue?? 我是初学者所以谁能告诉我如何解决这个问题?

Jdbc driver you are using doesn't support this method. 您正在使用的Jdbc驱动程序不支持此方法。 Widely used MS SQL Server JDBC driver - jTDS supports retrieval of generated keys. 广泛使用的MS SQL Server JDBC驱动程序 - jTDS支持检索生成的密钥。 Here is example of using this driver in similar task. 以下是在类似任务中使用此驱动程序的示例。

To use different driver change these lines: 要使用不同的驱动程序更改这些行:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:OnlineShopping");

In case of jTDS it will be something like this: 在jTDS的情况下,它将是这样的:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM