0

我想在 iSeries(...或“System i”或“AS/400”...)机器上运行 SQL 查询作为 Nagios 检查的一部分,但还没有找到合适的方式来连接数据库然而。

IBM 建议使用带有unixODBC的System i Access for Linux的 ODBC 驱动程序,但由于这两个系统对我来说都是新的,我想知道是否有其他方法可以做到这一点。

涉及telnetexpect完全没问题的黑客攻击。:-)

4

3 回答 3

2

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

取自iSeries 信息中心的示例:

 // 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();
于 2009-10-31T20:49:59.133 回答
0

在 Nagios Exchange 找到:
DB2 Checker
下载 DB2 Checker

未经测试...

于 2009-09-07T12:18:35.533 回答
0

我的磁盘上有这个来源。这是一个很好的例子。为清楚起见,我确实更改了源代码中的机器、目录和表名。希望能帮助到你。它使用来自 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);
 }
}
于 2009-11-25T17:19:41.620 回答