2009-11-09 4 views
0

i avoir le code d'écriture entendre que j'ai problème de la sélection valeur de SQLServer je passe la valeur de nrno est geting par une autre pagesélectionner la valeur du problème de SQLServer

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

Répondre

2

le problème est ici:

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

cela conduit à passer une chaîne SELECT * FROM student where rno = nrno à sqlServer ce qui n'est pas ce que vous voulez.

vous pouvez le modifier as specified by Richie à

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

Ou mieux utiliser l'appel param etr que la première approche peut être sujette à injection sql

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

Dans votre cas, vous parssing nrno int donc probablement il n'y a pas de problème avec l'injection sql mais il est de toute façon préférable à l'approche paramétrée par l'utilisateur (disons que le type de paramètre change en chaîne dans une future version)

+0

+1 pour les requêtes paramétrées (pourrions-nous avoir un exemple rapide?). Construire des chaînes de requête avec des valeurs littérales à partir de variables n'est pas une bonne idée! – bobince

+0

merci pour le commentaire bobince, mis à jour ma réponse pour ajouter l'exemple de code. – kristof

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

Vous pouvez changer cela à

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

coz "nrno" est une variable ..

espoir que cela vous aide ...

acclamations,

RDJ

Questions connexes