user1813228
user1813228

Reputation:

How to generate a sql from the inputs to the method

I have my below method which will accept two parameters-

final String userId- Primary Key for the database

final Collection<String> attributeNames- list of column names that I want to retrieve

Below is the code

public Map<String, String> getAttributes(final String userId, final Collection<String> attributeNames) {

     //Below line doesn't works out the way I wanted
     String query="SELECT" +attributeNames.toString()+ ", * from test where id = "+userId+ ";";
     ResultSet result = CassandraDatastaxConnection.getInstance().getSession().execute(query);
     for (Row rows: result){
         System.out.println(rows.getString("key"));
     } 

    return attributes;
}

let's take an example, userId as 40

Sample attributeNames will look like this-

[account, behavior, segmentation]

Now I need to generate a SQL corresponding to the inputs. So for above example, sql should look like this-

SELECT account, behavior, segmentation from test where id = "40";

How can I generate a SQL like this from the above inputs? Thanks for the help.

Upvotes: 1

Views: 73

Answers (2)

tausun
tausun

Reputation: 2162

Change this function

public Map<String, String> getAttributes(final String userId, final Collection<String> attributeNames) {
 //Below line doesn't works out the way I wanted
 String query="SELECT" +attributeNames.toString()+ ", * from test where id = "+userId+ ";";
 ResultSet result = CassandraDatastaxConnection.getInstance().getSession().execute(query);
 for (Row rows: result){
     System.out.println(rows.getString("key"));
 } 

return attributes;
}

to this

public Map<String, String> getAttributes(final String userId, final Collection<String> attributeNames) {

 //Below line doesn't works out the way I wanted
 StringBuilder sb = new StringBuilder(attributeNames.size());

 for(int i = 0; i<attributeNames.size();i++)
 {
     sb.append(attributeNames.get(i));
     if(i != attributeNames.size() - 1)
          sb.append(",");
 }
 String query="SELECT" +sb.toString()+ " from test where id = "+userId+ ";";
 ResultSet result = CassandraDatastaxConnection.getInstance().getSession().execute(query);
 for (Row rows: result){
     System.out.println(rows.getString("key"));
 } 

return attributes;
}

The modified function runs a loop through the attribute names and constructs the query part as name1, name2, name3, etc and then adds it to the query body. Hope this solves your problem.

Upvotes: 0

Pradeep Pati
Pradeep Pati

Reputation: 5919

You can use something like attributeNames.toString().substring(1, attributeNames.toString().length()-1)

Upvotes: 1

Related Questions