如何修复此数据库查询?

时间:2015-10-24 10:28:43

标签: java html jsp cassandra cql

    // 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,但我似乎无法实现这一点。

2 个答案:

答案 0 :(得分:2)

DataStax Cassandra Java驱动程序文档有一个标题为Four Simple Rules For Coding With The Driver的部分,您应该仔细阅读。在本文档中,准备语句一节描述了使用它们的优点:

  

使用预准备语句可提供多种好处。准备好了   语句在Cassandra节点上进行解析和准备并准备就绪   为了将来的执行。绑定参数时,只有这些(和   查询ID)通过网络发送。这些性能提升加起来   重复使用相同的查询(具有不同的参数)。

在任何情况下,如果您要使用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));

答案 1 :(得分:0)

您的查询中登录的是什么? 您可以尝试将查询更改为: ResultSet results = sess.execute ("SELECT first_name FROM userprofiles WHERE login = ' + username + '" ); 如果login与userprofiles表中的用户名相同。