2017-05-09 79 views
0
results = statement.executeQuery("SELECT * FROM " + database + ".dbo." + tablename); 
    ResultSetMetaData metaData = results.getMetaData(); 

    if (metaData != null) { 
     System.out.println(database + ".dbo." + tablename+"ColumnCount()"+metaData.getColumnCount()); 
      for (int i = 1; i < metaData.getColumnCount(); i++) { 
       columnMap.put(metaData.getColumnName(i), metaData.getColumnTypeName(i)); 
      } 
     } 
+0

,但如果我使用int我= 0在for循環我越來越importColumnCount()30 無效的列索引0. –

+0

實際列是30在該表中,我需要把它們放在地圖,但一列是因爲使用int i = 1 for循環,懇求e建議如何獲得30個列名? –

回答

0

由於ResultSetMetaData是基於1的列表,因此會出現該錯誤。

更改您的代碼爲:

results = statement.executeQuery("SELECT * FROM " + database + ".dbo." + tablename); 
    ResultSetMetaData metaData = results.getMetaData(); 

    if (metaData != null) { 
     System.out.println(database + ".dbo." + tablename+"ColumnCount()"+metaData.getColumnCount()); 
      for (int i = 1; i <= metaData.getColumnCount(); i++) { 
       columnMap.put(metaData.getColumnName(i), metaData.getColumnTypeName(i)); 
      } 
     } 

以下是使用ResultSetMetaData的示例:通過使用此代碼,查詢返回29個記錄

https://examples.javacodegeeks.com/core-java/sql/resultsetmetadata/java-sql-resultsetmetadata-example/

+0

謝謝Avitus,它的工作。 我應該使用i <= metaData.getColumnCount(); –