gpt4 book ai didi

java - 如何在java中获取表的GenerateKeys()

转载 作者:行者123 更新时间:2023-12-02 07:23:15 24 4
gpt4 key购买 nike

我有一个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;
}
}

但是我收到错误 java.lang.UnsupportedOperationException 。我认为错误是由于这一行 ResultSet rs = ps.getGenerateKeys(); 我是初学者,所以谁能告诉我如何解决这个问题?

最佳答案

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

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

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

如果是 jTDS,它将是这样的:

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

关于java - 如何在java中获取表的GenerateKeys(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com