当前位置: 首页 > 知识库问答 >
问题:

如何在jdbc中按id进行搜索

沈德寿
2023-03-14
public Item findById(String id) {
        Item result = null;

        String s = "SELECT id, key, name, creat, description FROM trackersql WHERE id = :id";

        try (Connection connection = init()) {
            PreparedStatement statement = connection.prepareStatement(s);

            ResultSet resultSet = statement.executeQuery();

            while(resultSet.next()) {
                Item item = new Item();

                statement.setString(1, id);
                statement.setString(2, item.getKey());
                statement.setString(3, item.getName());
                statement.setLong(4, item.getCreat());
                statement.setString(5, item.getDescription());
                statement.executeUpdate();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return result;
    }
try {
            DriverManager.registerDriver(new org.postgresql.Driver());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        TrackerSQL trackerSQL = new TrackerSQL();
        Item item1 = new Item("1", "1", "test1", 1, "test1");

        trackerSQL.init();

        System.out.println(trackerSQL.findById(item1.getId()));

但我得到以下错误:

我错在哪里?

共有1个答案

傅恺
2023-03-14

JDBC不知道命名参数。使用重新使用:id。而且您从不绑定参数

String s = "SELECT id, key, name, creat, description FROM trackersql WHERE id = ?";
try (Connection connection = init()) {
    PreparedStatement statement = connection.prepareStatement(s);
    statement.setString(1,id)
    ResultSet resultSet = statement.executeQuery();

您的代码中还有一个错误:

            statement.setString(1, id);
            statement.setString(2, item.getKey());
            statement.setString(3, item.getName());
            statement.setLong(4, item.getCreat());
            statement.setString(5, item.getDescription());
            statement.executeUpdate();

必须是

          Item item = new Item();

            item.setId(1, rs.getString(1));
            item.setKey(2, rs.getString(2));
          return item;
 类似资料:
  • 问题内容: 我正在尝试在名为“ abc”的字段中搜索“ efg” c是Collection对象。我没有任何结果。我究竟做错了什么? 问题答案: 您正在生成,但查询应如下所示: 因此,尝试将代码更新为: 请记住,要使用搜索,您需要指定一个索引。查阅说明如何使用该文档的文档:http : //docs.mongodb.org/manual/reference/operator/query/text/

  • 我正在尝试使用vespa构建打字头搜索。由于有很多数据,我不想使用流媒体模式。通配符搜索是我期望看到的,但它看起来仅限于流模式(正则表达式和 match:子字符串仅适用于流模式)。任何关于如何实现它或自定义的指针将不胜感激。

  • 问题内容: 如何在JDBC中获取插入ID? 问题答案: 如果它是自动生成的密钥,那么你可以使用它。你需要Statement使用与用于相同的名称进行调用INSERT。首先,你需要创建用于通知JDBC驱动程序以返回键的语句。 这是一个基本示例: 请注意,你是否依赖JDBC驱动程序。当前,大多数最新版本都可以使用,但是如果我没错,Oracle JDBC驱动程序仍然有些麻烦。MySQL和DB2已经支持它很

  • 我想用Java中的JDBC在数据库中插入一条记录(在我的例子中是Microsoft SQL Server)。同时,我想获得insert ID。如何使用JDBC API实现这一点?

  • 使用JDBC准备语句创建多参数搜索,以防止SQL注入攻击,提高性能。因为我在网上找不到最好的方法。 我试着自己实现如下。 null

  • 我有一个用例,我需要找到客户的分页列表,其中客户看起来像这样: 然后我有了我的存储库界面 我的界面扩展了分页和排序存储库以提供可分页的结果。 我还有一个输入框,用户可以在其中放置任何字符串。现在我想给他一个结果页面,其中包含其中一个字段(任何客户字段)中的输入字符串。 我不想使用命名查询。有没有一种聪明的方法,我可以通过分页和排序存储库来实现这一点,或者我是否需要使用规范接口并实现分页?