Exécution d'un programme java sur redshift


Par exemple, j'ai codé le code php suivant et exécuté sur redshift comme ci-dessous.

<?php

$connect = pg_connect("host=xx.xxxx.us-east-1.redshift.amazonaws.com port=xxxx dbname=testdb user=xxxx password=xxxxxx");

$query = "select name, email from mytable LIMIT 7";
$result = pg_query($connect,$query);
while(($row = pg_fetch_array($result)) != null) {
        $name = $row[0];
        $email = $row[1];

        echo $name." <<>> ".$email." <<>> ";
}
?>

J'ai enregistré le fichier php ci-dessus et exécuté de la manière ci-dessous.

myuser@ip-20-143-43-144:/home/myuser$ php runquery.php     <Enter>

Ensuite, il me donne la sortie.

Je veux tester la même chose avec java. J'ai donc pris l'exemple d'aws et enregistré au même emplacement.

public class ConnectToCluster {

    static final String dbURL = "jdbc:postgresql://xxxx.xxxxx.us-east-1.redshift.amazonaws.com:xxxx/testdb";
    static final String MasterUsername = "XXXX";
    static final String MasterUserPassword = "XXXXXX";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
           //Dynamically load postgresql driver at runtime.
           Class.forName("org.postgresql.Driver");

           //Open a connection and define properties.
           System.out.println("Connecting to database...");
           Properties props = new Properties();

           //Uncomment the following line if using a keystore.
           //props.setProperty("ssl", "true");  
           props.setProperty("user", MasterUsername);
           props.setProperty("password", MasterUserPassword);
           conn = DriverManager.getConnection(dbURL, props);

           //Try a simple query.
           System.out.println("Listing system tables...");
           stmt = conn.createStatement();
           String sql;
           sql = "select * from information_schema.tables;";
           ResultSet rs = stmt.executeQuery(sql);

           //Get the data from the result set.
           while(rs.next()){
              //Retrieve two columns.
              String catalog = rs.getString("table_catalog");
              String name = rs.getString("table_name");

              //Display values.
              System.out.print("Catalog: " + catalog);
              System.out.println(", Name: " + name);
           }
           rs.close();
           stmt.close();
           conn.close();
        }catch(Exception ex){
           //For convenience, handle all errors here.
           ex.printStackTrace();
        }finally{
           //Finally block to close resources.
           try{
              if(stmt!=null)
                 stmt.close();
           }catch(Exception ex){
           }// nothing we can do
           try{
              if(conn!=null)
                 conn.close();
           }catch(Exception ex){
              ex.printStackTrace();
           }
        }
        System.out.println("Finished connectivity test.");
     }
 }

J'ai également enregistré ce fichier .java au même endroit. Alors, quelqu'un peut-il me dire comment exécuter ce fichier java sur commande comme je l'ai fait pour php.

Author: rick, 2014-01-20

1 answers

(1) Téléchargez un pilote JDBC postgresql à partir du lien suivant et placez-le dans le même répertoire de ConnectToCluster.Java.

(2) Ajoutez les lignes manquantes(importer la bibliothèque java) dans l'en-tête du fichier java.

 import java.sql.*;
 import java.util.*;

 public class ConnectToCluster {
 ...

(3) Exécutez la commande suivante.

 javac ConnectToCluster.java && java -cp .:postgresql-8.4-703.jdbc4.jar ConnectToCluster 
 1
Author: Masashi Miyazaki, 2014-01-20 21:24:08