// 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 :(得分: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表中的用户名相同。