2014-05-13 55 views
1

我想檢索MS Access列的列描述我能夠檢索數據庫的所有列像字段名稱,數據類型。我如何檢索從MS ACCESS數據庫使用Java的列描述

我需要使用Java描述列數據。

請給點建議或指導。

注:我用這個代碼來獲取列名

public ArrayList<String> fetchtable(String value) 
{  
    try 
    { 
     makeConnection(); 
     String str1="Select * from "+ value; 
     ResultSet rs = st.executeQuery(str1); 
     rsmd = rs.getMetaData(); 
     NumOfCol= rsmd.getColumnCount(); 
     for(int i=1;i<=NumOfCol;i++) 
     { 
      ColumnName = rsmd.getColumnName(i); 
      System.out.println(ColumnName); 
      columns.add(ColumnName); 
     }  
     //System.out.println("Columns Valuessss is:" +columns);   
     }catch(Exception ae){ 
      ae.printStackTrace(); 
     } 
     return columns; 
    } 

回答

1

我知道檢索字段的說明是通過Microsoft DAO的唯一途徑。要做到這一點的方法之一就是讓Java程序

  • 寫一個小的VBScript,
  • 執行它,並
  • 捕獲結果,

是這樣的:

package com.example.getaccessfielddescription; 

import java.io.*; 

public class Main { 

    public static void main(String[] args) { 
     // test data 
     String dbFileSpec = "C:\\Users\\Public\\Database1.accdb"; 
     String tableName = "Clients"; 
     String fieldName = "LastName"; 

     String vbsFilePath = System.getenv("TEMP") + "\\GetAccessFieldDescription.vbs"; 
     File vbsFile = new File(vbsFilePath); 
     PrintWriter pw; 
     try { 
      pw = new PrintWriter(vbsFile); 
      pw.println("Set dbe = CreateObject(\"DAO.DBEngine.120\")"); 
      pw.println("Set db = dbe.OpenDatabase(\"" + dbFileSpec + "\")"); 
      pw.println("Set fld = db.TableDefs(\"" + tableName + "\").Fields(\"" + fieldName + "\")"); 
      pw.println("WScript.Echo fld.Properties(\"Description\").Value"); 
      pw.println("Set fld = Nothing"); 
      pw.println("Set db = Nothing"); 
      pw.println("Set dbe = Nothing"); 
      pw.close(); 

      Process p = Runtime.getRuntime().exec("cscript /nologo \"" + vbsFilePath + "\""); 
      p.waitFor(); 
      BufferedReader rdr = 
        new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String fieldDescription = rdr.readLine(); 

      vbsFile.delete(); 

      System.out.println(fieldDescription); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+0

你的方法非常好,我只是想知道這種方法是否也適用於servlet。謝謝 – user3599755

+0

@ user3599755如果您正在討論在Web服務器上使用上述方法,那麼可能會出現一些需要解決的權限問題。通常禁止運行Web服務器的帳戶運行任意代碼。 –

相關問題