2016-10-06 38 views
-1

由於某種原因只返回[COLUMN_NAME]?它連接到在本地主機上運行的MySQL數據庫。我試圖從數據庫表中檢索所有列名,但只返回「[COLUMN_NAME]」?

這裏是我的代碼:

public static String[] getCol() throws Exception { 
    try { 
     Connection con = dbc.getConnection(); 
     PreparedStatement statement = con.prepareStatement("select column_name from information_schema.columns where table_name='particles'"); 
     ResultSet result = statement.executeQuery(); 
     ResultSetMetaData rs = result.getMetaData(); 
     int count = rs.getColumnCount(); 
     String[] ColName = new String[count]; 
     String[] COLS; 
     for (int i=1 ; i <= count; i++) { 
      ColName[i-1] = rs.getColumnName(i); 
     } 
     System.out.println(Arrays.toString(ColName)); 
     return ColName; 
    } catch(Exception e) { 
     System.out.println(e); 
    } 
    return null; 
} 
+0

如果我正確理解你,問題出在SQL中。您只需選擇'column_name',而不是使用'select * ...'。 – streetturtle

+0

重複http://stackoverflow.com/questions/19094999/java-how-to-get-column-name-on-result-set – staszek

+0

絕對不是一個明確的問題 – Drew

回答

0

每個column_name值的將是在單獨一行。從查詢的預期回報率會像

column_name 
----------- 
id 
name 
weight 
charge 
flavor 
spin 

要獲得查詢返回的實際值,則需要通過ResultSet的行旋轉一個結果,就像你從任何其他結果集讀取行你回來了。

您顯示的代碼僅查看分配給resultset中的列的resultsest ...名稱的元數據。在這種情況下,結果集包含一個名稱爲column_name的列。這就是爲什麼你正在觀察你所報告的行爲。

如果您的查詢被寫入

SELECT column_name AS foo 
    FROM information_schema.columns 
    WHERE table_name='particles' 

你會會看到foo作爲列名,而不是column_name

它沒有一點關係都SQL的行的結果集碰巧是列名......至於SQL而言,查詢將返回一組,單列。是的,它恰好是關於表中的列的元數據(因爲您正在針對名爲information_schema.columns的特殊視圖運行查詢),但該查詢的返回結果與運行任何其他查詢返回VARCHAR列的結果沒有區別任何其他表格。例如:

SELECT mystringcol FROM mytable 

如果您在使用您的代碼查詢,對結果集的元數據將是一列,用一個名字mystringcol。而且你的代碼不會對結果集中返回的做任何事情,mystringcol的實際值。

相關問題