java - 如何执行 MySQL sql '开始...结束;' 使用 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,我们可以从一个特定的模板表中下载所有数据而无需任何条件,在此一步,我会做分页查询来读取
数据。
解决方案
推荐阅读
- java - 如何从 ArrayList 填充 JComboBox
- python - Python - Tkinter 如何在按下按钮后关闭窗口?
- ios - UIView 中的 Xcode 错误预期声明
- azure - 如何在powershell中循环遍历2个数组?
- php - PHP 表单电子邮件 - 发送前等待 x 小时
- sass - 在 Vue.js 中使用 vue.config.js 修复 sass-loader 错误
- python - 从一个容器运行命令到另一个容器
- c++ - 如何防止 gcc 预处理 shebang 行?
- excel - Excel VBA 和图表。Y轴标签问题
- cordova - 使用 Cordova startapp 打开 Gmail