Как выполнить инструкцию SQL с переменной, как WHERE? - PullRequest
3 голосов
/ 03 февраля 2012

У меня есть некоторый Java-код, например

int userid = take user input;

, а затем выполните следующую инструкцию 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 "идентификатор пользователя".На самом деле, я хочу получить информацию из таблицы person о пользовательских значениях uid.Кто-нибудь может мне помочь, как решить эту проблему?

Ответы [ 4 ]

7 голосов
/ 03 февраля 2012

Вы должны использовать подготовить оператор, так как он защищает вас от 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;        
    }

}
5 голосов
/ 03 февраля 2012
ResultSet rs = stmd.executeQuery("select * from person where uid = "+ userid);

while (rs.next()) {
    System.out.println("Name= " + rs.getString(1));
}
5 голосов
/ 03 февраля 2012

Не могли бы вы вставить весь блок кода по этому вопросу?Следующее - мое предложение

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);

, если в базе данных есть одна или несколько записей, в которых uid представлен равным идентификатору пользователя, который вернет правильный результат

0 голосов
/ 25 февраля 2014

int user_id = 2003;// также можно получить входную переменную

String sql = "SELECT * FROM занятости WHERE id =";

resultSet = Statement.executeQuery (sql + user_id);

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