我有这个:
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的任何错误消息,所以应该创建表,但事实并非如此。
如果我执行相同的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;
}
}
}
答案 0 :(得分:1)
关闭连接时会自动删除临时表。
有关详细信息,请参阅MySQL CREATE TABLE文档:
创建表时可以使用TEMPORARY关键字。 TEMPORARY表仅对当前连接可见,并在关闭连接时自动删除。这意味着两个不同的连接可以使用相同的临时表名,而不会相互冲突或与现有的同名非TEMPORARY表冲突。 (在删除临时表之前,现有表是隐藏的。)
如果要创建临时表以进行某些工作,则应在开始工作时创建它,并对其执行UPDATE / SELECT语句。当您关闭连接时它会自动丢弃,并且它不会与使用相同临时表名的其他连接冲突。
答案 1 :(得分:1)
临时表是每个数据库连接。因此,如果您尝试从另一个连接访问临时表,则不会看到它。