有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java sql server数据插入错误

我尝试了这段代码,这是在mssqlserver中传递值的问题,我在hear中将值从一个页面传递到另一个页面,nrno是值come to other page,但hear错误是java。sql。SQLException:列名“nrno”无效

<!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>

共 (2) 个答案

  1. # 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注入问题(我意识到上面可能是一个练习或类似的问题,但要注意这是一件好事)

  2. # 2 楼答案

    修改它

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