【问题标题】:select multiple IDs from database using java使用java从数据库中选择多个ID
【发布时间】:2017-04-16 14:26:15
【问题描述】:

我有一个表格,我可以像这样选择一个条目:

SELECT * FROM `table` WHERE `id` = 1;

我知道我可以像这样通过多个 id 轻松选择条目:

SELECT * FROM `table` WHERE `id` IN (1,2,3);

但现在我已经在 J​​ava 中使用 MariaDB/J 连接器实现了这个,使用 java.sql 类:

public ArrayDeque<DataType> getItems(long... ids) {
    ArrayDeque<DataType> deque = new ArrayDeque<DataType>();
    PreparedStatement st = null;
    ResultSet resultSet = null;
    try {
        st = getConnection().prepareStatement("SELECT * FROM `table` WHERE `id` = ?;");
        st.setLong(1, id);
        resultSet = st.executeQuery();
        while (resultSet.next()) {
            deque.add(parseResultSetToDataType(resultSet));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        close(resultSet, st);
    }
    return deque;
}

现在,基本上我需要为要插入的每个变量添加一个?。由于所选 ID 的数量可能会有所不同,因此我无法在其中放置静态 IN (?,?,?)。我想到的肮脏解决方案是根据long... ids 的大小生成(?,?,?)——但有没有更好、“更清洁”的解决方案?

【问题讨论】:

  • 除了在 JDBC 之上使用一个库来为你做这件事,没有。
  • PreparedStatement 有一个setArray 方法,可用于某些数据库的此目的。不幸的是,包括 MySql 在内的一些数据库驱动程序不支持它。
  • this,这可能会有所帮助,因为那里解释的选项很少。

标签: java mysql mariadb


【解决方案1】:
    PreparedStatement statement = connection.prepareStatement("Select * from table where id in (?)");
    Array array = statement.getConnection().createArrayOf("int", new Object[]{1, 2,3});
    statement.setArray(1, array);

【讨论】:

  • MySql的jdbc驱动不支持setArray方法
  • 好问题 - 您为什么不尝试一下并告诉我们?
猜你喜欢
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多