【JDBC实战经验】从数据库中随机取出数据的2种方法

*注:conn 表示获取到的数据库连接对象

首先获取数据总条数

private static int getDataNum(Connection conn, String tableName) throws SQLException
{
    PreparedStatement ps = conn.prepareStatement("select count(*) from "+tableName);
    ResultSet getNum = ps.executeQuery();
    if(getNum.next()) return getNum.getInt(1);
    else return -1;
}

通过 count 计算出总的数据条数


方法一:借助 limit

// 随机获取数据法一
public String getRanData(Connection conn) throws SQLException
{
    PreparedStatement ps = conn.prepareStatement("select <dataName> from <tableName> limit ?, 1");
    int dataNum = getDataNum(conn, <dataName>);
    int rand = (int)(Math.random() * dataNum);

    ps.setInt(1, rand);
    ResultSet data = ps.executeQuery();
    if(data.next()) return data.getString(1);
    else return null;
}

这种方法只需要预编译一次,以后配合随机数通过 settInt 修改占位符 ? 的值,即可重复从数据库中随机取出数据

limit ?, 1 中的 1 表示取出 1 条数据
可以修改为更大的值 n 表示取出从该位置开始的 n 条数据,不过需要另加判断防止越界以及 while 循环读取数据


方法二:转化成 ArrayList 通过下标读取

// 随机读取数据法二
public String getRanData(Connection conn) throws SQLException
{
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from <tableName>");
    ArrayList<String> data = new ArrayList<>();
    int dataNum = getDataNum(conn, <tableName>);
    int rand = (int)(Math.random() * dataNum);

    while(rs.next()) data.add(rs.getString(<dataName>));
    return data.get(rand);
}

30 min Get (寒冰小澈)

posted @ 2021-02-28 15:23  IceClean  阅读(60)  评论(0)    收藏  举报