簡體   English   中英

如何執行 MySQL sql '開始...結束;' 使用 JDBC

[英]How to execute MySQL sql 'begin… end;' using JDBC

我正在使用 Mysql 5.7 和 JDBC,我需要在查詢下運行並使用 JDBC 獲取結果數據:

set @rownum := 0;
select *
from (select *, @rownum := @rownum + 1 as rownum from test) t
where t.rownum >= 1
  and t.rownum <= 10;

表結構和初始化 sql:

create table test(id int, name varchar(16));
insert into test(id, name) VALUES (1,'rollsbean');

我嘗試了executeQuery()conn.prepareCall()並運行失敗。

我的測試代碼:

public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://172.16.100.115:3306/valid?user=drpeco&password=DT@Stack#123&serverTimezone=UTC&characterEncoding=UTF-8&useSSL=false");
            String plsql = "set @rownum := 0;\n" +
                    "select *\n" +
                    "from (select *, @rownum := @rownum + 1 as rownum from test) t\n" +
                    "where t.rownum >= 1\n" +
                    "  and t.rownum <= 10;";
            CallableStatement cstmt = conn.prepareCall(plsql1);
            cstmt.execute();
            Object object = cstmt.getObject(1);
//            testExecute();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (conn != null) {
                    conn.close();
                }

            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
stmt = conn.createStatement();
            String plsql = "set @rownum := 0;\n" +
                    "select *\n" +
                    "from (select *, @rownum := @rownum + 1 as rownum from test) t\n" +
                    "where t.rownum >= 1\n" +
                    "  and t.rownum <= 10;";
            rs = stmt.executeQuery(plsql);
            while (rs.next()) {
                Object object = rs.getObject(1);
            }

我想要什么:我想使用 MySQL 自定義變量進行分頁查詢,mysql 5.7 不支持row_number() over ()

問題:如何使用 JDBC 執行這些查詢並獲取結果數據。

附加:如果我使用limit進行分頁查詢,我搜索的目標表沒有特定的列和索引。 深度頁面的效率會很低,所以我想試試row_number ,如果有人有更好的查詢解決方案,請與我分享,我會很高興得到你的回答。

我的要求:正如我在附加中所說,我的應用程序將運行 sql 作業並生成許多帶有數據的模板表,數據取決於 sql,我們可以在沒有任何條件的情況下從一個特定模板表中下載所有數據,在此一步,我會做分頁查詢來閱讀
數據。

將 LIMIT 與兩個參數一起使用。 例如,要返回結果 11-60(其中結果 1 是第一行),請使用:

SELECT * FROM foo LIMIT 10, 50

更多詳情請看這里

為什么不使用偏移量。 我相信這會對你有所幫助。

SELECT id, name FROM any_table LIMIT 15000 OFFSET 15000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM