2015-10-24 2 views
2
// gets user details from jsp form 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    //String forename = request.getParameter("forename"); 

    // sets new user 
    User us = new User(); 
    us.setCluster(cluster); 

    //checks user is valid 
    boolean isValid = us.IsValidUser(username, password); 
    HttpSession session = request.getSession(); 
    System.out.println("Session in servlet " + session); 

    // sets the user details so it can be displayed during session 
    session.setAttribute("userID", username); 


    sess = cluster.connect("instagrim"); 
    ResultSet results = sess.execute ("SELECT first_name FROM userprofiles WHERE login = 'shadowsurge'" ); 

    for (Row row : results) 
    { 
     String userName = (row.getString("first_name")); 
     request.setAttribute("name", userName); 
    } 

Этот код является частью, над которой я сейчас работаю. Я, наконец, смог прочитать данные из моей базы данных Cassandra, но это только когда я указываю определенное условие, такое как "SELECT first_name FROM userprofiles WHERE login = 'shadowsurge'"Как исправить этот запрос в базе данных?

Я пытаюсь создать профиль пользователя, поэтому, очевидно, приведенный выше код не подходит, поскольку мне нужно запрос, чтобы захватить данные, связанные с пользователем, который вошел в систему, а не просто захватить данные для одного пользователя независимо от того, кто вошел в систему.

Любой, кто может с этим справиться? В принципе, я хочу, чтобы запрос захватил first_name, который связан с текущим пользователем, но я не могу понять, что это произойдет.

+0

Итак, вы никогда не пробовали наивную версию '' SELECT first_name FROM userprofiles WHERE login = '"+ имя пользователя +"' "'? Если это сработает, используйте вместо этого «[подготовленный отчет] (http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)». – Tom

+0

Ничего себе, это было так очевидно, почему я этого не сделал. Первый раз, используя Java, JSP, cassandra и т. Д. Я думаю, что я над этим размышляю, но спасибо вам большое! Могу ли я спросить, какова разница между этим путем и делать это в подготовленном заявлении? Я предполагаю, что есть какое-то преимущество в использовании подготовленного заявления или это просто лучшая привычка? – shadowsurge

+0

Подумайте о своем запросе и о том, что произойдет, если я зарегистрирую себя как '' '; DROP TABLE users; - '. Подготовленный оператор избегает SQL-инъекции. – Tom

ответ

0

Что такое логин в вашем запросе? Вы можете попытаться изменить свой запрос на что-то вроде:
ResultSet results = sess.execute ("SELECT first_name FROM userprofiles WHERE login = ' + username + '" ); если логин совпадает с именем пользователя в таблице userprofiles.

2

Документация драйвера Java DataStax Cassandra для Java имеет раздел под названием Four Simple Rules For Coding With The Driver, который вы обязательно должны прочитать. В этом документе раздел «Подготовленные отчеты» описывает преимущества их использования:

Использование подготовленных отчетов предоставляет множество преимуществ. Записанный подготовленный оператор разобран и подготовлен на узлах Cassandra и готов к выполнению в будущем . При связывании параметров по этому каналу отправляются только эти (и идентификатор запроса ). Эти повышения производительности складываются при с использованием тех же запросов (с разными параметрами).

В любом случае, для того, чтобы настроить подготовленное заявление с помощью Cassandra, вам нужно немного изменить код.

sess = cluster.connect("instagrim"); 

//create a Prepared Statement from your session 
PreparedStatement statement = sess.prepare("SELECT first_name FROM userprofiles WHERE login=?"); 

//create a Bound Statement from your above statement object 
BoundStatement boundStatement = new BoundStatement(statement); 

//pass your boundStatement to your sess.execute while binding username to it. 
ResultSet results = sess.execute(boundStatement.bind(username)); 
+0

Это полезно знать! Я чувствую, что в SQL больше нет информации о SQL в сравнении с CQL, или, может быть, я просто не смотрел в нужных местах. Но да, спасибо за это, я обязательно буду читать ссылки, которые вы оба предоставили – shadowsurge

Смежные вопросы