выберите значение из задачи sqlserver - PullRequest
0 голосов
/ 09 ноября 2009

У меня есть код записи, слышу, что у меня проблема с выбором значения из sqlserver. Я передаю значение из 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();
java.sql.ResultSet rslt = stmt.executeQuery(" SELECT * FROM student where rno = nrno");
while(rslt.next())
     { 
         int id = rslt.getInt(1);
         int rno = rslt.getInt(4);
         String name = rslt.getString(2); 
         String city = rslt.getString(3);
         out.println(id +"<br>" +" " +name + " "+"<br>" + city +"<br>" + rno + "<br>"); 
     }
rslt.close();
stmt.close();
conn.close();
%>
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 09 ноября 2009
java.sql.ResultSet rslt = stmt.executeQuery(" SELECT * FROM student where rno = nrno");

Вы можете изменить это на

java.sql.ResultSet rslt = stmt.executeQuery (" SELECT * FROM student where rno =" + nrno);

coz "nrno" является переменной ..

Надеюсь, это поможет вам ...

ура

RDJ

2 голосов
/ 09 ноября 2009

проблема здесь:

java.sql.ResultSet rslt = stmt.executeQuery(" SELECT * FROM student where rno = nrno");

это приводит к передаче строки SELECT * FROM student where rno = nrno в sqlServer, а это не то, что вам нужно.

Вы можете изменить его , как указано Ричи на

`java.sql.ResultSet rslt = stmt.executeQuery (" SELECT * FROM student where rno =" +` nrno);

Или лучше использовать параметризованный вызов, так как первый подход может быть склонен к sql Injection

PreparedStatement st = conn.prepareStatement(
            "SELECT * FROM student where rno = ?");
        st.setInt(1, nrno);

В вашем случае вы выполняете синтаксический анализ nrno для int, поэтому, вероятно, нет проблем с внедрением sql, но это в любом случае безопаснее для параметризованного подхода пользователя (скажем, тип параметра изменится на string в некотором будущем выпуске)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...