2009-09-04 19 views
0

Je souhaite exécuter une requête SQL sur une machine iSeries (... ou "System i" ou "AS/400" ...) dans le cadre d'une vérification Nagios, mais je n'ai pas trouvé de moyen d'interface approprié la base de données pour le moment.Le moyen le plus simple d'accéder à une base de données DB2 sur iSeries à partir d'une machine Linux (ubuntu)?

IBM suggère d'utiliser le pilote ODBC de System i Access for Linux avec unixODBC, mais comme les deux systèmes sont nouveaux pour moi, j'aimerais savoir s'il existe d'autres façons de le faire.

Hacks impliquant telnet et expect sont parfaitement bien. :-)

Répondre

2

Je pense que ce serait le plus simple ...
même que l'accès pour Linux, mais il est la version de code source libre: JTOpen

exemple tiré de 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(); 
0

J'avais cette source sur mon disque. C'est un bon exemple. Pour plus de clarté, j'ai changé la machine, le catalogue et le nom de la table dans la source. J'espère que cela aide. Il utilise le pilote JDBC du projet JTOpen.

Notez qu'avec ce pilote spécifique, vous pouvez accéder à la base de données iSeries DB2 comme n'importe quelle autre base de données. En outre, la base de données DB2 sur l'iSeries n'est qu'une des versions d'IBM Universal Database. Cependant, vous pouvez faire des astuces spécifiques à iSeries, même avec le pilote JDBC. Mais si vous voulez rester par défaut SQL seulement, c'est bien aussi.

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); 
} 
}