2012-02-03 16 views
1

私は変数を持つSQL文をWHEREとして実行するには?

int userid = take user input; 

のようないくつかのJavaコードを持っているし、SQL文の次の実行、今

 Class.forName(dbdriver); 
     conn = DriverManager.getConnection(url, username, password); 
     st = conn.createStatement(); 

     st.executeUpdate("select * from person where uid = userid"); 

、私は返された結果がnullあるかわかりません。私はwhere uid = useridがリテラルuid値 "userid"を検索しているので間違った結果を与えていると思います。実際には、ユーザーが提供するuid値について、personテーブルから情報を取得したいと考えています。誰も私にこれを解決する方法を助けることができますか?

+0

クエリを実行する実際のJavaコードを表示できますか? 'userid'の値を問合せにどのように渡すかは、JDBCコールの作成方法に大きく依存します。 –

+0

コードとスタックトレースを表示します。 – RanRag

+0

実行している実際のコードを含めることができますか? –

答えて

5
ResultSet rs = stmd.executeQuery("select * from person where uid = "+ userid); 

while (rs.next()) { 
    System.out.println("Name= " + rs.getString(1)); 

}

+4

孤児ブラケットtho –

+0

これはSQLインジェクションの危険があります。代わりにUser Jasonwが答えます。 – Pablo

5

この質問に関するコードブロック全体を貼り付けることができますか?データベースは、uidはあなたが準備を使用する必要があります

3

正しい結果を返します。同じユーザーIDを、提出された一枚の以上のレコードを持っている場合は、次の は私の提案

int userid = get user id ; 
Connection connection = get connection ; 
String sql = "select * from person where uid=?"; 
PreparedStatement pstmt = connection.prepareStatement(sql); 
pstmt.setInt(1,userid); 

ですSQLインジェクションからあなたを守ります。また、SQL文が実行される前に、それが確実に出力されるように、単純なロギングを追加することもできます。以下はサンプルクラスですが、あなたの状況で自由に変更することができます。

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 


public class DBAccess 
{ 
    PreparedStatement pstmt; 
    Connection con; 

    DBAccess() throws Exception 
    { 
     String dbdriver = ""; 
     String url = ""; 
     String username = ""; 
     String password = ""; 

     Class.forName(dbdriver); 

     con = DriverManager.getConnection(url, username, password); 
    } 

    public Person getPerson(int userid) throws Exception 
    { 
     pstmt = con.prepareStatement("select * from person where uid = ?"); 
     pstmt.setInt(1, userid); 
     System.out.println("sql query " + pstmt.toString()); 
     ResultSet rs = pstmt.executeQuery(); 
     if (rs.next()) 
     { 
      Person person = new Person(); 
      person.setName(rs.getString("name")); 
      return person; 

     } 
     return null;   
    } 

} 
-1

int user_id = 2003; //入力変数を取得することもできます

文字列sql = "SELECT * FROM雇用WHERE id =";

resultSet = statement.executeQuery(sql + user_id);

関連する問題