【问题标题】:Running shell command though jdbc通过 jdbc 运行 shell 命令
【发布时间】:2019-02-05 03:34:33
【问题描述】:

是否可以通过 java 代码中的 jdbc 运行 linux shell 命令以及如何运行? 我一直在尝试这个:

Class.forName("com.mysql.jdbc.Driver");
        connect = DriverManager.getConnection("jdbc:mysql://" + this.host + "/" + this.db + "?", properties);
        statement = connect.createStatement();
        String sql = "\\! touch /home/dbsms/testfile";
        statement.execute(sql);

但我收到“您的 SQL 语法有错误;”错误。我尝试这个的原因: MySQL 服务器在受保护(无互联网)网络上的机器上运行。我的 java 应用程序旨在操作数据库。它是一个文档管理数据库。因此,一旦将新文档插入数据库,我需要通知用户。同一网络上还有另一台能够发送 SMS 的机器。我需要做的是创建一个包含 SMS 文本并命名为电话号码的文件,SMS 机器上的守护程序将接收并处理它。我知道有一些库可以让我通过 ssh 在远程计算机上执行 shell 命令,但如果可能的话,我想使用 jdbc。

【问题讨论】:

  • 使用 jdbc,我们有一个数据库连接,我们必须给出一个有效的 sql 语句才能执行。
  • 不知道执行从 sql 运行的 shell 脚本。但我可以帮助您从 java 代码中执行相同的操作。
  • 所以没有“\!命令”是可能的吗?
  • 那太好了@Abhijit Pritam Dutta
  • 如果任何有权访问数据库的人都可以在数据库服务器上运行 shell 命令,这确实是一个严重的安全问题。

标签: java mysql bash shell jdbc


【解决方案1】:

使用 jdbc,我们有一个数据库连接,我们必须给出一个有效的 sql 语句才能执行。所以你得到了上述错误。

但是,使用 java 你可以执行 shell 命令。 This article 会帮助你。

【讨论】:

  • 嗯是的,这是真的。但是我需要在远程机器上创建一个文件,而不是在本地机器上。不过还是谢谢你
  • @AndrijaPetrovic 然后,您可以使用 JSch 库(jcraft.com/jsch)。或者,正如我提到的,将 ssh 命令与 Runtime.exec("ssh ....") 一起使用,然后使用它来执行您需要的命令
【解决方案2】:

不,JDBC 用于在数据库中执行 SQL 语句。

Java 可以运行操作系统级别的命令,但它们仅限于运行 JVM 的机器。

在我看来(我可能是错的)你想在服务器上运行它们,而不是你的本地机器。如果是这种情况,那么您需要打开到服务器的远程连接,可能使用 SSH 或类似的方式远程运行您的命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多