java
  • sqlite
  • where-clause
  • 2011-08-11 55 views 1 likes 
    1

    好的,所以我试图在Sqlite中存储数据。所以我试图用“行”存储用户的ID。然而,似乎哪里条款让我失望。Sqlite查询问题

    String query = "SELECT * FROM Users WHERE username='Fellixombc"; 
        ResultSet result = this.sqlStatement.executeQuery(query); 
        int userId = 0; 
        while(result.next()) { 
         System.out.println("TRUE"); 
         userId = result.getInt("id"); 
         System.out.println(result.getString("username")); 
        } 
    

    而且不打印。然而,如果我从查询中删除WHERE子句,它将打印出所有的用户名/ id很好,当然也是“真”。

    我缺少一些与Sqlite和它的语法?

    编辑:只是为了澄清不存在与1的ID和用户名Fellixombc 编辑用户列用户:所以我把你的人的建议,并试图准备发言,我的继承人现在代码:

     PreparedStatement sqlStatement = this.sqlConnection.prepareStatement("SELECT * FROM Users WHERE username=?"); 
         sqlStatement.setString(1, "Fellixombc"); 
         ResultSet result = sqlStatement.executeQuery(); 
         int userId = 0; 
         while(result.next()) { 
          System.out.println("TRUE"); 
          userId = result.getInt("id"); 
          System.out.println(result.getString("username")); 
         } 
         result.close(); 
    

    回答

    2

    本质上,你想存储用户名,是否正确?

    您当前的查询将检索有关用户名的所有信息。这是SELECT查询所做的,它将检索。

    如果你需要创建一个新的用户,请使用:

    INSERT INTO Users (username) Values ('Fellixombc'); 
    

    我要告诉你,你可能需要在此查询提供更多的信息,这取决于其他领域的用户表了。

    编辑:

    在SELECT语句,你有一个开放的单引号。

    "SELECT * FROM Users WHERE username='Fellixombc" 
    

    应该

    "SELECT * FROM Users WHERE username='Fellixombc'" 
    

    为了避免问题与SQL注入,考虑prepareStatement功能。

    +0

    嗯,奇怪的是,当我关闭单引号,还有其他想法时仍然不起作用?是的,我将使用prepareStatement,但首先我想让这个工作。还有:我试图检索用户的ID,我没有插入任何东西。编辑:我试图检索Fellixombc的ID,这应该是1. – Fellixombc

    +0

    如果你删除你的where条件,你有没有得到任何记录? – MPelletier

    +0

    是的,我得到我的一个记录,这是记录持有Fellixombc和1的ID。 – Fellixombc

    1

    请尝试对您的用户名字段进行修整。它有可能在数据中有一个虚假空间,导致你的where子句失败。

    "SELECT * FROM Users WHERE trim(username) ='Fellixombc'" 
    

    此外,同意@MPelletier。你一定要使用PreparedStatements。

    +0

    好的,同样,用户名不是我想要访问的变量,它是我尝试访问的字段。还是我完全误解了你?无论如何,看@OP – Fellixombc

    +0

    @Fellixombc - 是的。我意识到它是一个名为Users的sqllite数据库表中的一个字段。您可以在查询中使用trim()函数。请参阅此处 - http://www.sqlite.org/lang_corefunc.html ..名称末尾的空格可能导致不匹配。 – Kal

    +0

    噢好吧,事实证明,这是一个与实际记录= /不管怎么说,对于如此无视你的抱歉!我感谢帮助! – Fellixombc

    相关问题