从Linux(Ubuntu)机器访问iSeries上的DB2数据库的最简单方法?

问题描述:

我想在iSeries(...或“System i”或“AS/400”...)机器上运行SQL查询作为Nagios检查的一部分,但尚未找到合适的接口连接方式数据库呢。从Linux(Ubuntu)机器访问iSeries上的DB2数据库的最简单方法?

IBM建议使用System i Access for Linux与的ODBC驱动程序,但由于这两个系统对我来说都是新手,所以我想知道是否有其他方法来执行此操作。

涉及telnetexpect的黑客都很好。 :-)

我认为这将是最简单的...
同为Linux访问,但它是开源版本:JTOpen

取自iSeries Information Center的示例:

// Connect to the server. 
Connection c = DriverManager.getConnection("jdbc:as400://mySystem"); 

// Create a Statement object. 
Statement s = c.createStatement(); 

// Run an SQL statement that creates 
// a table in the database. 
s.executeUpdate("CREATE TABLE MYLIBRARY.MYTABLE (NAME VARCHAR(20), ID INTEGER)"); 

// Run an SQL statement that inserts 
// a record into the table. 
s.executeUpdate("INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('DAVE', 123)"); 

// Run an SQL statement that inserts 
// a record into the table. 
s.executeUpdate("INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('CINDY', 456)"); 

// Run an SQL query on the table. 
ResultSet rs = s.executeQuery("SELECT * FROM MYLIBRARY.MYTABLE"); 

// Close the Statement and the 
// Connection. 
s.close(); 
c.close(); 

发现在Nagios的交换:
DB2 Checker
Download DB2 Checker

未经测试...

我在我的磁盘上有此源。这是一个很好的例子。为了清楚起见,我确实在源代码中更改了机器,目录和表名。希望能帮助到你。它使用JTOpen项目中的JDBC驱动程序。

请注意,使用此特定驱动程序,您可以像访问其他数据库一样访问iSeries DB2数据库。另外,iSeries上的DB2数据库只是IBM Universal Database的一个版本。但是,即使使用JDBC驱动程序,您也可以执行iSeries的特定技巧。但是,如果你只想保持SQL默认值,那也没关系。

import java.sql.*; 

public class TestSQL { 

public static void main(String[] args) { 

    try { 
    DriverManager 
    .registerDriver(new com.ibm.as400.access.AS400JDBCDriver()); 
    Connection conn = DriverManager 
    .getConnection("jdbc:as400://YOURISERIES/YOURLIBRARY"); 
    Statement select = conn.createStatement(); 
    ResultSet rs = select.executeQuery("select * from whatever"); 

    ResultSetMetaData rsmd = rs.getMetaData(); 
    while (rs.next()) { 
    for (int x=1; x <= rsmd.getColumnCount(); x++) { 
    System.out.print(rs.getString(x)); 
    } 
    System.out.println(); 
    } 
    } catch (Exception e) { 
    System.out.println("error: " + e.getMessage()); 
    } 
    System.exit(0); 
} 
}