2012-04-13 10 views
0

からMySQLで一時テーブルを作成しますは、私は、この持っているJavaの

public class System { 

    public static void main(String[] args) { 
     SqlSentencesList.createTemporaryTable(); 
    } 

} 

をしかし、私はselect * from Bookを実行すると、MySQLはBookテーブルが存在しないと言われます。私は、Javaからエラーメッセージを取得していないので、テーブルを作成する必要がありますが、そうではありません。

mysqlで直接テンポラリテーブルを作成するために同じSQL文を実行すると、正常に動作します。

これは私のConexionクラスです:接続が閉じられたときに

public class Conexion { 

    private static Connection conexion = null; 



    private Conexion() { 

    } 

    public static Connection getInstancia() { 
     if (conexion == null) { 
      try { 
       Class.forName("com.mysql.jdbc.Driver"); 
       conexion = DriverManager.getConnection(
         "jdbc:mysql://localhost/Esquema_VentaLibros","gustavo", "123581321"); 

      } catch (SQLException sqlex) { 
       sqlex.printStackTrace(); 
      } catch(ClassNotFoundException cnfex) { 
       cnfex.printStackTrace(); 
      } 
      return conexion; 
     } 
     else { 
      return conexion; 
     } 
    } 

} 
+0

MySQLとアプリケーションでクエリを直接実行するときに、同じユーザーを使用しますか? –

答えて

1

一時テーブルは自動的に削除されます。テーブルを作成するときは、TEMPORARYキーワードを使用することができます

は詳細についてはMySQL CREATE TABLEマニュアルを参照してください。 TEMPORARYテーブルは現在の接続にのみ表示され、接続が閉じられると自動的に削除されます。これは、2つの異なる接続が、互いに矛盾することなく、または同じ名前の既存の非TEMPORARYテーブルと矛盾することなく、同じ一時テーブル名を使用できることを意味します。 (一時テーブルが削除されるまで、既存のテーブルが隠されています。)

あなたはいくつかの作業を行うために一時テーブルを作成したい場合は、あなたが作業を開始し、あなたのUPDATEを実行するとき、あなたがそれを作成する必要があります/ SELECTそれに対する声明。接続を閉じると自動的に削除され、同じ一時テーブル名を使用する他の接続と競合しません。

+0

しかし、私は接続を閉じるつもりはありません。 –

+0

あなたは 'SELECT * FROM Book'をどこで実行していますか?私はあなたの主な方法でそれを表示されません。 'getInstancia()'から同じ接続を取得している場合、それはまだ見えるはずです。しかし、mysqlコマンドラインや別のプログラムからDBにアクセスすると、DBにアクセスすることはできません。 – Jonathan

1

テンポラリテーブルは、データベース接続ごとにあります。したがって、別の接続から一時テーブルにアクセスしようとすると、そのテーブルは表示されません。

+0

Javaから 'select * from Book'を実行するとうまくいくはずですね。 –

+0

データベース接続の処理方法によって異なります。各クエリの前に新しいものを開きますか?あなたは接続プールを持っていますか? 'Conexion.getInstancia()'はランダムなものを取得しますか?これらのシナリオのそれぞれは、一時テーブルの作成時およびアクセス時に異なる接続を使用する可能性があります。 –

+0

私は文を閉じますが、接続は閉じません。私は私の 'Conexion'クラスを置くでしょう。 –

関連する問題