繁体   English   中英

从Java在MySQL中创建临时表

[英]Create temporary table in MySQL from Java

我有这个:

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执行select * from Book ,MySQL告诉我Book表不存在。 我没有从java获取任何错误消息,因此应该创建表,但事实并非如此。

如果我执行相同的sql语句直接在mysql中创建临时表,它工作正常。

这是我的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;
        }
    }

}

关闭连接时会自动删除临时表。

有关详细信息,请参阅MySQL CREATE TABLE文档:

您可以在创建表时使用TEMPORARY关键字。 TEMPORARY表仅对当前连接可见,并在关闭连接时自动删除。 这意味着两个不同的连接可以使用相同的临时表名,而不会相互冲突或与现有的同名非TEMPORARY表冲突。 (在删除临时表之前,将隐藏现有表。)

如果要创建临时表以进行某些工作,则应在开始工作时创建它,并对其执行UPDATE / SELECT语句。 当您关闭连接时它会自动丢弃,并且它不会与使用相同临时表名的其他连接冲突。

临时表是每个数据库连接。 因此,如果您尝试从另一个连接访问临时表,您将看不到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM