如何在 jdbc 的语句中使用 DECLARE 子句?
How can I use DECLARE clause in a statement on jdbc?
我目前正尝试在 jdbc 的 preparedStatement 中使用 DECLARE 子句。我写的代码是:
statement.executeUpdate(" declare @variable int set @variable = "+timer+" INSERT INTO table1 values (ip, protocol, counter, timer) SELECT ip,protocol,counter,@variable FROM table2 ORDER BY counter DESC LIMIT 5 OFFSET 0 ;");
我想要得到的是创建一个新的 table(即 table1),其中包括来自 table2 的前 5 个(例如,每 5 秒) , 具有预定义的间隔。间隔是定时器变量。定时器变量通过方法传递。
注意:我不知道使用 preparedStatement 是否有任何不同。我都试过了。
假设您需要从 select 创建一个新的 table,那么您应该改用此查询:
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";
假设您已经创建了 table 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();
我目前正尝试在 jdbc 的 preparedStatement 中使用 DECLARE 子句。我写的代码是:
statement.executeUpdate(" declare @variable int set @variable = "+timer+" INSERT INTO table1 values (ip, protocol, counter, timer) SELECT ip,protocol,counter,@variable FROM table2 ORDER BY counter DESC LIMIT 5 OFFSET 0 ;");
我想要得到的是创建一个新的 table(即 table1),其中包括来自 table2 的前 5 个(例如,每 5 秒) , 具有预定义的间隔。间隔是定时器变量。定时器变量通过方法传递。
注意:我不知道使用 preparedStatement 是否有任何不同。我都试过了。
假设您需要从 select 创建一个新的 table,那么您应该改用此查询:
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";
假设您已经创建了 table 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();