【问题标题】:Retrieving data from mysql using JDBC使用 JDBC 从 mysql 中检索数据
【发布时间】:2013-11-03 14:24:15
【问题描述】:

我正在尝试使用 JDBC 通过BufferedReader 从 SQL 表中检索一些数据,我为此执行编写的代码:

System.out.println("Type a name");
    String nname = br.readLine();

        Class.forName("com.mysql.jdbc.Driver");
        Connection con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/VetTest", "root", "root");
        Statement stmt=(Statement) con.createStatement();
        String query = "select * from Pet WHERE name LIKE '?%'";
        ResultSet rs=(ResultSet) stmt.executeQuery(query);

        while(rs.next()) 
            System.out.println(rs.getString("name"));

        if (petn.equals(query)) {
        System.out.println("Searching names.." + nname + query);
        }

我不知道我是否做错了,所以总结一下我的问题,我试图检索一些取决于用户在控制台中输入的数据。例如。我正在尝试在我的数据库中搜索名称 Jack 我希望我的应用程序搜索此人的姓名或类似的人名。

当我输入一个宠物名字时,我总是得到的结果(即使这个名字在我的数据库中是可用的):

没有这样的名字

【问题讨论】:

    标签: java mysql sql database jdbc


    【解决方案1】:

    你没有告诉我们问题是什么,但我发现了一个问题:

    WHERE name LIKE '?%'
    

    这是不正确的。子句应该是

    WHERE name LIKE ?
    

    你应该准备一个语句,绑定一个包含通配符(%)的字符串,然后执行这个准备好的语句:

    PreparedStatement stmt = con.prepareStatement("select * from Pet WHERE name LIKE ?");
    stmt.setString(1, name + "%");
    ResultSet rs = stmt.executeQuery();
    

    阅读the tutorial about prepared statements

    【讨论】:

    • 我的问题是我想不出一种方法让 bufferedreader 检查名称(在数据库中和一个用户在控制台中输入)
    • 我无法理解您的评论。你想达到什么目的?把它解释为好像我是一个 5 岁的男孩。用户在电脑前。应该怎么办?
    • 对不起,我的英语不是很好,我想要实现的是当用户在控制台中输入例如名称时,我希望我的应用程序检查该名称是否在数据库与否。
    • 然后执行查询,如果它的结果​​集不为空,那么数据库中包含一个同名的宠物。如果它是空的,那么它不包含具有该名称的宠物。如果结果集为空,rs.next() 将返回 false。如果您希望与输入的名称完全匹配,则不应使用like 和通配符,而应使用=
    • 不好意思打扰了,我还是觉得有点失落,我加了这个方法还是没有结果: if (rs.next()) { petn = rs.getString("petname"); System.out.println("test" + petn); }
    【解决方案2】:

    如果我没记错的话,您想搜索名称,该名称也可能是其他名称的一部分。 例如,如果你输入 Jack

    Jackson,Helen Jack 的值也应该从数据库中检索。然后将查询更改为

    System.out.println("Type a name");
        String nname = br.readLine();
    
            Class.forName("com.mysql.jdbc.Driver");
            Connection con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/VetTest", "root", "root");
            Statement stmt=(Statement) con.createStatement();
            **String query = "select * from Pet WHERE name LIKE '%nname%'";**
            ResultSet rs=(ResultSet) stmt.executeQuery(query);
    
            while(rs.next()) 
                System.out.println(rs.getString("name"));
    
            if (petn.equals(query)) {
            System.out.println("Searching names.." + nname + query);
            }
    

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2011-11-04
      相关资源
      最近更新 更多