2016-03-28 10 views
0

OracleとPostgreSQLの2つのデータベースに対して簡単なアプリケーションを作成したいと思います。すべてのデータベースに1つのJavaコードを使用する方法はありますか?私はこれを試しました:Java Prepared statements for PostgreSQL

public String init() 
{ 
    String user_name = null; 
    try 
    { 
     Context ctx = new InitialContext(); 
     if (ctx == null) 
      throw new Exception("Boom - No Context"); 

     DataSource ds = (DataSource) ctx.lookup("jdbc/DefaultDB"); 

     if (ds != null) 
     { 
      Connection conn = ds.getConnection(); 

      if (conn != null) 
      { 
       Statement stmt = conn.createStatement(); 
       ResultSet rst = stmt.executeQuery("select id, user_name from user where username = " + user); 
       if (rst.next()) 
       { 
        user_name = rst.getString("user_name"); 
       } 
       conn.close(); 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return user_name; 
} 

私はこのコードで準備文をどのように使用できますか?

+0

これまでに何を試しましたか? 'select id、user_name from user =? 'のSQLを使い、適切に文を準備し、パラメータを設定して実行できるはずです。あなたの難しさが準備されたステートメント*を使うことにあるのか、それとも移植可能なステートメントを使うのかは明らかではありません。あなたは明確にできますか? (実際には、データベースに 'user_name'と' username'という列はありますか?) –

+1

プリペアドステートメントの基本については、http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.htmlを参照してください。 –

答えて

0

は、これは非常に広範な質問ですが、マルチデータベースの互換性への通常のアプローチは2つあり:リソースファイル内

  1. 置き、すべてのSQL文とランタイム
  2. 文をで適切なリソースをロードまたは論理構造が異なる場合(異なるパラメータなどが必要)、両方のデータベースのロジックを記述し、使用しているデータベースに応じて正しいパスを選択します。

いくつかのデータベース抽象化レイヤー(Hibernate、Spring JDBC)は、多くの作業に役立ちますが、依然としてそれらの違いとコードを十分に認識する必要があります。

あなたは、単一のJava-コードによって、複数のデータベースを扱うことができ
0

が、 次のように、データベースの個別の接続ごと

  1. はセットアップすることが

必要がありますcodePreparedStatementを同様に使用できます。

String selectSQL = "select id, user_name from user where username = ?" 
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL); 

preparedStatement.setString(1, "userName"); 

ResultSet rs = preparedStatement.executeQuery(selectSQL);