2009-11-09 139 views
0

我尝试这段代码这是在mssqlserver中传递值的问题我将值传递给另一页中的页面听到nrno是值来到其他页面但是听到错误是java.sql.SQLException:无效的列名' nrno”。sql server datainsert错误

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>Untitled</title> 
</head> 
<body> 
<%@ page import="java.sql.*" %> 
<%@ page import="java.io.*" %> 

<% 
String AppURL = request.getContextPath() ; 
String thisFile = AppURL+request.getServletPath() ; 
int nrno = 0; 
try 
{ 
nrno = Integer.parseInt(request.getParameter("rno")); 
} 
catch(NumberFormatException ex) 
{ 
    nrno = 0; 
} 
%> 
<td>this is in roolno :- <%=nrno%> </td><br> 
<% 
Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/sample", "sa", "sa1234"); 
java.sql.Statement stmt = conn.createStatement(); 
      try 
      { 
     int val = stmt.executeUpdate("INSERT student (name,rno) VALUES('nikki',+ nrno)"); 
      out.println("1 row affected"); 
     } 
     catch (SQLException s) 
      { 
     System.out.println("SQL statement is not executed!"); 
     } 
stmt.close(); 
conn.close(); 
%> 
</body> 
</html> 
+0

PSL使用代码格式化 – KB22 2009-11-09 11:33:30

回答

1

你不需要以下吗?

int val = stmt.executeUpdate("INSERT student (name,rno) VALUES('nikki'," + nrno + ")"); 

在您的示例代码上面你不插入价值nrno,而是实际的字符串nrno本身(因为它是双引号)。

的快进,我调查PreparedStatements,这样你可以做到以下几点:

PreparedStatement pstmt = con.prepareStatement("INSERT student (name,rno) VALUES(?,?)"); 
    pstmt.setString(1, 'nikki'); 
    pstmt.setInt(2, nrno); 

,并避免类似上述情况,加上可能的SQL注入问题讨厌引述的问题(我知道上面可能是一个锻炼或类似的,但它是一件好事,要知道)。

0

修改它,

int val = stmt.executeUpdate("INSERT student (name,rno) VALUES('nikki'," + nrno 
+ ")");