假设您需要从一个选择中创建一个新表,那么您应该改用这个查询:
CREATE TABLE table1 SELECT ip,protocol,counter,@variable FROM table2 ORDER BY counter DESC LIMIT 5 OFFSET 0
但是,如果您在 Java 中执行此操作并使用 PreparedStatement,那么您可以将 @variable 的值作为参数传递,从而摆脱之前的查询。因此,您的查询在 Java 代码中将如下所示:
String sql =
"CREATE TABLE table1"
+ " SELECT ip,protocol,counter,?"
+ " FROM table2"
+ " ORDER BY counter DESC"
+ " LIMIT 5 OFFSET 0";
假设您已经创建了表 table1,并且您只是将来自 table2 的最新结果添加到其中,那么查询将如下所示:
INSERT INTO table1 values (ip, protocol, counter, timer) SELECT ip,protocol,counter,@variable FROM table2 ORDER BY counter DESC LIMIT 5 OFFSET 0
同样,您可以将@variable 的值作为参数传递。查询在 Java 代码中将如下所示:
String sql =
"INSERT INTO table1 (ip, protocol, counter, timer)"
+ " SELECT ip,protocol,counter,?"
+ " FROM table2"
+ " ORDER BY counter DESC"
+ " LIMIT 5 OFFSET 0";
然后,您将像这样准备查询:
PreparedStatement pstmt = con.prepareStatement(sql);
//setting your variable as the parameter in the query
pstmt.setString(1, timer);
最后,你将使用PreparedStatement#execute 或PreparedStatement#executeUpdate:
//the former query is a DDL query
pstmt.execute();
//the latter query is a DML query
pstmt.executeUpdate();