【问题标题】:How can I retrieve a column description from MS ACCESS database using Java如何使用 Java 从 MS ACCESS 数据库中检索列描述
【发布时间】:2014-05-13 08:56:16
【问题描述】:

我正在尝试使用能够检索数据库的所有列(如字段名称、数据类型)来检索 MS Access 列的列描述。

我需要使用 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;
    }

【问题讨论】:

    标签: java ms-access jdbc ms-access-2007 jdbc-odbc


    【解决方案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();
            }
        }
    
    }
    

    【讨论】:

    • 您的方法非常好,我只想知道这种方法是否也适用于 servlet。谢谢
    • @user3599755 如果您正在谈论在 Web 服务器上使用上述方法,那么可能需要解决一些权限问题。通常禁止运行 Web 服务器的帐户运行任意代码。
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2022-09-29
    • 2017-08-17
    相关资源
    最近更新 更多