java - 如何使用 Java 从 MS ACCESS 数据库检索列描述

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

我正在尝试使用“我能够检索数据库的所有列(如字段名称、数据类型)”来检索 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;
    }

最佳答案

我知道检索字段描述的唯一方法是通过 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();
        }
    }

}

关于java - 如何使用 Java 从 MS ACCESS 数据库检索列描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23626781/

相关文章:

database - 需要 MS Access Relationship 帮助

sql - Access中的多个LEFT JOIN

c# - 如何从 C# 中的 Access 数据库检索列描述?

java - SQLite 连接列表

java - Scala 隐式 Long 到可序列化

java - 使用 Swagger 注释显示自定义 HashMap 键

java - 按钮> ListView >新 Activity ,有什么建议吗?

java - Glassfish 4.1 在使用 ear/ejb/web 模块时无法运行 RestFul 服务

jdbc - 在 Jetty 中配置 JNDI 资源 SQL

java - 如何在mysql服务器中动态分配表名