0

ReadTableConnectionInfoなどのテーブルに関する詳細を含むという名前のクラスがtableNameありますcolumns。からの列値を使用してランダム選択 SQL を生成することになっているマルチスレッド コードを作成しましたtable.getColumns()

table1に次のような8つの列があるとします-

ID
CREATION
DATE
ACCOUNT
ADVERTISE
SELLERS
GEOGRAPHIC
DEMOGRAPHIC

以下は、列を使用してランダム選択SQLを生成しようとしているコードです。これtableReadTableConnectionInfoオブジェクトです。

@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 classtableNameとを保持する私のものです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;
    }
}

generateRandomSQLここで、リストからメソッドでランダム選択 SQL を生成する必要がありますtable.getColumns()。私のすべての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を構築するのを手伝ってくれる人はいますか? どんな提案でも大いに役立ちます。

4

2 に答える 2

0

そんな感じ :

   String colPart="SELECT ID, CREATION_DATE, LAST_MODIFIED_DATE"
   Random rNo=new Random();
   int noOfCols=columns.size();
   int colCount=rNo.nextInt(noOfCols-3);
   for(int i=0;i<colCount;i++){
   string colToAdd=columns.get(3+rNo.nextInt(noOfCols-3));
   if(!colPart.contains(colToAdd))    
       colPart+=","+colToAdd;
   }        
    final String sql =colPart+" from "+table.getTableName+" where id = ?";
于 2013-02-24T08:02:49.587 に答える
0
private String generateRandomSQL(ReadTableConnectionInfo table) {
    Random r = new Random(table.getColumns.size());
    int rNumber = r.nextInt();

    List<String> suffledColumns = new ArrayList<String>(table.getColumns());
    Collections.shuffle(suffledColumns);

    String columnsList = "";

    for(int i = 0 ; i < rNumber ; i ++){
        columnsList += ("," + shuffledColumns.get(i));
    }

    final String sql = "SELECT ID, CREATION_DATE, LAST_MODIFIED_DATE" + columnsList +"  from " + table.getTableName() + " where id = ?";

        return sql;
}
于 2013-02-24T07:54:11.090 に答える