1

私はこれを持っています:

public static void createTemporaryTable() {
        Statement s = null;
        sentence = "CREATE TEMPORARY TABLE Book (ISBN int NOT NULL, " +
                "title varchar(45), author varchar(45), price double, PRIMARY KEY  (`ISBN`));";

        try {
            s = Conexion.getInstancia().createStatement();
            s.executeUpdate(sentence);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                s.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

それで:

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

}
4

2 に答える 2

1

接続が閉じられると、一時テーブルは自動的に削除されます。

詳細については、MySQLCREATETABLEのドキュメントを参照してください。

テーブルを作成するときにTEMPORARYキーワードを使用できます。TEMPORARYテーブルは現在の接続にのみ表示され、接続が閉じられると自動的に削除されます。これは、2つの異なる接続が、互いに競合したり、同じ名前の既存の非TEMPORARYテーブルと競合したりすることなく、同じ一時テーブル名を使用できることを意味します。(既存のテーブルは、一時テーブルが削除されるまで非表示になります。)

作業を行うための一時テーブルを作成する場合は、作業の開始時に作成し、それに対してUPDATE/SELECTステートメントを実行する必要があります。接続を閉じると自動的にドロップされ、同じ一時テーブル名を使用する他の接続と競合することはありません。

于 2012-04-13T15:23:54.853 に答える
1

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

于 2012-04-13T15:24:21.590 に答える