2012-08-12 61 views
0

可能重复:
Update a record if ID exist else Insert values更新,如果ID在数据库中可用,否则插入

我想如果不存在其他记录在数据库中插入值更新的值。但是,这不起作用。我已经写了下面的代码:

注意:(。。版主,这是一个重复的问题,我问几个小时前,我不能够编辑以前的一个道歉,如果任何不便,要求您删除)

<% 
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
Connection conn = DriverManager.getConnection("jdbc:sqlserver://10.222.10.19:1433", "sa", "admin1"); 



String empId = request.getParameter("empid"); 
String fName = request.getParameter("fName"); 
String lName = request.getParameter("lName"); 


String sqlCheck = "Select * from [UAP].[dbo].[UAP_EMPLOYEE] where EMP_EMPLOYEE_ID = "empId" "; 
PreparedStatement prpStatementCheck = conn.prepareStatement(sqlCheck); 
prpStatementCheck.setInt(1, Integer.parseInt(empId)); 
prpStatementCheck.setString(2, fName); 
prpStatementCheck.setString(3, lName); 
ResultSet rsCheck=prpStatementCheck.executeQuery(); 
String check=null; 
boolean exists = false; 

while(rsCheck.next()) 
{ 

     Statement stmt = conn.createStatement(); 
     String sql= "UPDATE [UAP].[dbo].[UAP_EMPLOYEE] SET EMP_EMPLOYEE_ID="+empId+", EMP_FNAME='"+fName+"', EMP_LNAME='"+lName+"' WHERE EMP_EMPLOYEE_ID= ?"; 
     stmt.executeUpdate(sql); 
     exists = true; 

    } 
if(!exists) 
    { 
     String sql2 = "INSERT INTO [UAP].[dbo].[UAP_EMPLOYEE] (EMP_EMPLOYEE_ID, EMP_FNAME, EMP_LNAME) VALUES (?,?,?)"; 
      PreparedStatement prpStatement1 = conn.prepareStatement(sql2); 
      prpStatement1.setInt(1, Integer.parseInt(empId)); 

      prpStatement1.setString(2, fName); 
      prpStatement1.setString(3, lName); 

      prpStatement1.execute(); 
      prpStatement1.close(); 

    } 

%>

回答

1

由于EMP_EMPLOYEE_ID是你需要使用一个整数字段:

prpStatementCheck.setInt(1, Integer.parseInt(empId)); 

此外,您还可以去除围绕这一领域的报价为UPDATE STRI NG:

String sql= "UPDATE [UAP_EMPLOYEE] SET EMP_EMPLOYEE_ID=" + empId + ", EMP_FNAME='" + fName+"', EMP_LNAME='" + lName + "' WHERE EMP_EMPLOYEE_ID= " + empId; 

再次为prpStatement1:发生

prpStatement1.setInt(1, Integer.parseInt(empId)); 
+0

例外处理JSP页/dynatree/dbconnection.jsp在管线26 23:\t 24:\t字符串sqlCheck =“SELECT * FROM [UAP]。[dbo]。[UAP_EMPLOYEE] where EMP_EMPLOYEE_ID ='“+ empId +”'“; 25:\t PreparedStatement prpStatementCheck = conn.prepareStatement(sqlCheck); 26:\t prpStatementCheck.setString(1,empId); 27:\t prpStatementCheck.setString(2,fName); 28:\t prpStatementCheck.setString(3,lName); 29:\t ResultSet rsCheck = prpStatementCheck.executeQuery(); 索引1超出范围。 – Nash 2012-08-13 00:15:38

+0

此错误表明旧语法仍在使用,例如引号EMP_EMPLOYEE_ID,没有PreparedStmt placeolders,'?'等。 – Reimeus 2012-08-13 01:01:00

+0

即使在按照您的建议更改prpStatement之后也会出现同样的错误。发生
例外处理JSP页/dynatree/dbconnection.jsp在管线26 23:\t 24:\t字符串sqlCheck =“SELECT * FROM [UAP] [DBO] [UAP_EMPLOYEE]其中EMP_EMPLOYEE_ID =。。 “+ EMPID +” “; 25:\t PreparedStatement prpStatementCheck = conn.prepareStatement(sqlCheck); 26:\t prpStatementCheck.setInt(1,Integer.parseInt(empId)); 27:\t prpStatementCheck.setString(2,fName); 28:\t prpStatementCheck.setString(3,lName); 29:\t ResultSet rsCheck = prpStatementCheck.executeQuery(); – Nash 2012-08-13 06:33:38

相关问题