【问题标题】:Changing Column Name in MDB file using JDBC java使用 JDBC java 更改 MDB 文件中的列名
【发布时间】:2013-07-14 05:33:00
【问题描述】:

我目前正在用 Java 编写一个 mdb 迁移脚本。这只是在 MDB 文件中添加和修改一些列名。

我创建了新表,这不是问题,但我找不到更改列名的查询

假设我有一个名为Employees 的表,其列有“ID”、“EName”、“Active?”现在我想更改列名“活动?”到“活跃”(即不带问号。)

如何使用 JDBC java 来做到这一点。 谢谢

【问题讨论】:

  • 我不认为Access先生可以做到这一点,所以如果您想更改一次,为什么不在access中手动更改?
  • 原因很简单:多次部署,服务器上没有加载MS访问。
  • 嗯,我的 M$ Access 体验并不多,因为它根本不是一个好的数据库,但看起来你可以通过简单的VB application
  • 我已经完成了,但这对我的情况没有帮助,因为我想更改列名

标签: java ms-access jdbc odbc


【解决方案1】:

实现目标的一种方法是将以下 VBScript 代码保存为 RenameColumn.vbs...

Option Explicit

Dim objArgs, dbPath, tblName, oldColName, newColName
Dim dbe  ' As DAO.DBEngine
Dim db   ' As DAO.Database
Dim fld  ' As DAO.Field

Set objArgs = WScript.Arguments
dbPath = objArgs(0)
tblName = objArgs(1)
oldColName = objArgs(2)
newColName = objArgs(3)

Set dbe = CreateObject("DAO.DBEngine.120")
Set db = dbe.OpenDatabase(dbPath)
Set fld = db.TableDefs(tblName).Fields(oldColName)
fld.Name = newColName
Set fld = Nothing
Set db = Nothing
Set dbe = Nothing

...然后您的 Java 程序可以使用类似这样的代码调用它:

import java.io.*;

public class RenameColumns {

    public static void main(String[] args) {
        String dbPath = "C:\\__tmp\\Database1.accdb";
        String tblName = "Employees";
        String oldColName = "Active?";
        String newColName = "Active";

        String cmd = 
                "cscript C:\\__tmp\\RenameColumn.vbs"
                    + " \"" + dbPath + "\""
                    + " \"" + tblName + "\""
                    + " \"" + oldColName + "\""
                    + " \"" + newColName + "\"";
        try {
            Process p = Runtime.getRuntime().exec(cmd);
            p.waitFor();
            BufferedReader rdr = 
                    new BufferedReader(new InputStreamReader(p.getErrorStream()));
            int errorLines = 0;
            String line = rdr.readLine();
            while (line != null) {
                errorLines++;
                System.out.println(line);  // display error line(s), if any
                line = rdr.readLine();
            }
            if (errorLines == 0) {
                System.out.println("The operation completed successfully.");
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

}

【讨论】:

  • 我还没试过,也没有VB经验。我需要帮助我的数据库有密码如何在这里使用该密码?你能建议吗?
  • @user1614217 要打开受密码保护的数据库,您必须添加一个附加参数来指定密码,然后更新OpenDatabase 调用以将其包含在该方法的Connect 参数中。详情请看herehere
【解决方案2】:

似乎 MS Access does not allow 重命名了列(参考链接 1,2)。唯一的出路是,

  • 将数据备份到不同的表中
  • 删除列
  • 添加具有新名称的列
  • 从备份的表中填充表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多