Columns information is read by thin-client only after the first data
request, so you need to read at least one row to get columns.

вт, 3 нояб. 2020 г. в 09:31, Ilya Kazakov <[email protected]>:

> Hello, Shravya! It is very interesting! I am trying to reproduce your
> case, and what I see. I can see column names in the thin client only after
> query execution.
>
> For example:
>
> ClientConfiguration clientConfig = new 
> ClientConfiguration().setAddresses("127.0.0.1");
> try(IgniteClient thinClient = Ignition.startClient(clientConfig)){
>     SqlFieldsQuery sql = new SqlFieldsQuery("SELECT * FROM T1");
>     FieldsQueryCursor cursor = thinClient.query(sql);
>     cursor.getAll();
>     int count = cursor.getColumnsCount();
>     System.out.println(count);
>     List<String> columnNames = new ArrayList<>();
>     for (int i = 0; i < count; i++) {
>         String columnName = cursor.getFieldName(i);
>         columnNames.add(columnName);
>     }
>     System.out.println("columnNames:::"+columnNames);
> }
>
>
> But if this is the correct behavior I do not know yet, I will try to find
> out.
>
> --------------------------------
> Ilya Kazakov
>
> вт, 3 нояб. 2020 г. в 12:51, Shravya Nethula <
> [email protected]>:
>
>> Hi,
>>
>> *For Ignite thick client, the column names for a given sql query are
>> coming up as expected with the following code:*
>> public class ClientNode {
>>
>>     public static void main(String[] args) {
>>         IgniteConfiguration igniteCfg = new IgniteConfiguration();
>>         igniteCfg.setClientMode(true);
>>
>>         Ignite ignite = Ignition.start(igniteCfg);
>>         *IgniteCache foo **= ignite.getOrCreateCache("foo");*
>>
>>         SqlFieldsQuery sql = new SqlFieldsQuery("SELECT * FROM person");
>>         *FieldsQueryCursor cursor = foo.query(sql);*
>>         int count = cursor.getColumnsCount();
>>         List<String> columnNames = new ArrayList<>();
>>
>>         for (int i = 0; i < count; i++) {
>>           String columnName = cursor.getFieldName(i);
>>           columnNames.add(columnName);
>>         }
>>         System.out.println("columnNames:::"+columnNames);
>>
>>  } }
>>  *Output:*
>>  *columnNames:::[ID, NAME, LAST_NAME, AGE, CITY_ID, EMAIL_ID]
>> *
>> *On the other hand, for thin client, the column names are coming up as empty 
>> list.*
>> The following is the code:
>> public class ClientNode {
>>
>>     public static void main(String[] args) {
>>         ClientConfiguration clientConfig = new ClientConfiguration();
>>         cc.setUserName("username");
>>         cc.setUserPassword("password");
>>
>>         *IgniteClient thinClient = Ignition.startClient(clientConfig);*
>>
>>         SqlFieldsQuery sql = new SqlFieldsQuery("SELECT * FROM person");
>>         *FieldsQueryCursor cursor = thinClient.query(sql);*
>>         int count = cursor.getColumnsCount();
>>         List<String> columnNames = new ArrayList<>();
>>
>>         for (int i = 0; i < count; i++) {
>>           String columnName = cursor.getFieldName(i);
>>           columnNames.add(columnName);
>>         }
>>         System.out.println("columnNames:::"+columnNames);
>>
>>  } }
>>
>> *Output:**columnNames:::[ ]*
>>
>> While using IgniteCache.query(SqlFieldsQuery), the column names are
>> coming up. But while using IgniteClient.query(SqlFieldsQuery), the
>> column names are not coming up. Are we missing any configurations? Is there
>> something wrong in the code? And also is there anyway in which we can
>> identify the datatype of columns given in the query! We are looking for
>> the datatype of the columns in the query but not the datatype of columns in
>> the table!
>>
>> Any help here will be much appreciated!
>> Thanks in advance!
>>
>>
>>
>> Regards,
>>
>> Shravya Nethula,
>>
>> BigData Developer,
>>
>>
>> Hyderabad.
>>
>>

Reply via email to