【问题标题】:Connect BigSQL using Python through Java通过 Java 使用 Python 连接 BigSQL
【发布时间】:2017-05-04 14:33:13
【问题描述】:

我正在尝试将 python 连接到 BigSQL。我有一个 java 代码可以将 python 连接到 BigSQL 并从 BigSQL 检索数据。下面是我的示例代码

 public class Hello {

  public static void main(String[] args) {
    try(Connection con = DriverManager.getConnection("connection details")) {

Class.forName("com.ibm.db2.jcc.DB2Driver");
    Statement stmt = con.createStatement();
    System.out.println("Connected to BigSQL");      
    ResultSet result = stmt.executeQuery("select *  from table limit 10");
    while (result.next()) {
      //Retrieve by com_name
      String com_name = result.getString(1);
      //Retrieve by family
      String family = result.getString(2); 
      //Retrieve by sci_name
      String sci_name = result.getString(3);
      //Retrieve by symbol
      String symbol = result.getString(4);
      //Retrieve by synonym
      String synonym = result.getString(5);
     System.out.println(com_name+":"+family+":"+sci_name+":"+symbol+":"+synonym);
    }

    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } 
  }

}  

我编写了一个 python 代码来使用我的 python 调用这个 java 代码

import os
import os.path,subprocess
from subprocess import STDOUT,PIPE
path='Location where my .java file is'
os.chdir(path)
def compile_java(java_file):
    subprocess.check_call(['javac', java_file])


def execute_java(java_file):
    java_class,ext = os.path.splitext(java_file)
    cmd = ['java', java_class]

compile_java('Hello.java')      
execute_java("Hello")

我的 python 代码运行成功,但我无法检索

中提到的 java 输出
System.out.println(com_name+":"+family+":"+sci_name+":"+symbol+":"+synonym);

你能帮帮我吗?

提前致谢

【问题讨论】:

  • 为什么要从 python 执行 Java 代码?你可以改用 Jython 或 bash 吗?
  • 其实根据我的项目要求,我只需要使用python
  • execute_java 什么都不做......你应该在那里添加 subprocess.check_call。
  • 你能给我一些代码sn-p吗?使用 java 代码的简单 java 代码(如“Hello world”)与我的 execute_java 一起使用,它还在控制台中打印“Hello World”。
  • @MauriceMeyer 可以 subprocess.check_call 与 Java 代码一起使用吗?我需要将我的 java 代码粘贴到 subprocess.check_call() 中吗?

标签: java python bigsql


【解决方案1】:

您需要执行对 java 的调用并使用check_output 来获取 java 输出。 check_call 只是返回返回码:

def execute_java(java_file):
    java_class,ext = os.path.splitext(java_file)
    cmd = ['java', java_class]
    print(cmd)
    javaStdout =subprocess.check_output(['java', java_class])
    print ('>>', javaStdout)

execute_java("HelloWorld")

回报:

['java', 'HelloWorld']
>> b'Hello World!\n'

【讨论】:

  • 谢谢@Maurice Meyer 使用check_output,我得到了输出>> b'' 对于最上面的帖子中提到的java代码但是我期待10行输出格式为com_name+":"+ family+":"+sci_name+":"+symbol+":"+同义词。知道为什么会这样吗?当我使用带有 java 命令的命令提示符运行 java 代码时,我得到 10 行输出 com_name+":"+family+":"+sci_name+":"+symbol+":"+synonym 格式
  • 我使用的是:System.out.println("Hello World!"); 并从控制台运行它。您可以尝试 shell=True 并按照docs 中的定义打印 stderr
  • 感谢@Maurice Meyer。它有帮助
猜你喜欢
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
相关资源
最近更新 更多