【发布时间】:2013-02-24 07:35:03
【问题描述】:
我有一个名为ReadTableConnectionInfo 的类,其中包含有关表的详细信息,例如tableName,它是columns。我编写了一个多线程代码,我应该在其中使用来自table.getColumns() 的列值生成一个随机选择 sql。
假设 table1 有 8 列,例如-
ID
CREATION
DATE
ACCOUNT
ADVERTISE
SELLERS
GEOGRAPHIC
DEMOGRAPHIC
下面是我尝试使用列生成随机选择 sql 的代码。这里table 是ReadTableConnectionInfo 对象。
@Override
public void run() {
while (System.currentTimeMillis() <= 30 minutes) {
final String selectSql = generateRandomSQL(table);
preparedStatement = entry.getValue().prepareCall(selectSql);
preparedStatement.setString(id);
rs = preparedStatement.executeQuery();
}
}
/**
* A simple method that will construct the SQL
* and return back
* @param columns
* @return sql
*/
private String generateRandomSQL(ReadTableConnectionInfo table) {
/* generate random columns from
* `table.getColumns`, not sure how to make that
*/
final String sql = "SELECT ID, CREATION_DATE, LAST_MODIFIED_DATE, from "+table.getTableName+" where id = ?";
return sql;
}
下面是我的ReadTableConncectionInfo class,它将保存 tableName 和 columns list
public class ReadTableConnectionInfo {
public String tableName;
public ArrayList<String> columns;
public ArrayList<String> getColumns() {
return columns;
}
public void setColumns(ArrayList<String> columns) {
this.columns = columns;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
}
现在我需要从table.getColumns() 列表中的generateRandomSQL 方法中生成随机选择SQL。在我所有的 SELECT sql 中,我将始终拥有 ID, CREATION and DATE,除此之外,它应该是随机的
示例 SQL 示例-
`SELECT ID, CREATION, DATE, ACCOUNT from table1 where id = ?`
`SELECT ID, CREATION, DATE, ACCOUNT, ADVERTISE from table1 where id = ?`
`SELECT ID, CREATION, DATE, ACCOUNT, SELLERS from table1 where id = ?`
`SELECT ID, CREATION, DATE, GEOGRAPHIC, DEMOGRAPHIC, ADVERTISE from table1 where id = ?`
`Other possible permutations`
任何人都可以帮助我构建带有 ID、CREATION 和 DATE 的随机 SELECT sql 吗?任何建议都会有很大帮助。
【问题讨论】:
-
为什么不直接选择所有列并随机化您从目标代码中提取的列?这会比构建动态 SQL 更好。
-
是的,这是我想到的一个选项。但是我们正在尝试复制生产场景,这意味着人们不会来寻找所有的列。有些人会来找三列,有些人会来找两列,有些人会来找所有列。这就是我尝试构建动态 SQL 的原因。
-
我猜你是想说,我应该选择所有列,然后随机排列顺序对吗?如果是的话,那我基本上不是在找那个。
-
随机列或用户选择的列?
-
@arpit,用户选择的列是什么意思?
标签: java database multithreading jdbc prepared-statement