【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 (寒冰小澈)

浙公网安备 33010602011771号