如何写出能适应不同数据库的SQL查询
Posted 乾学院
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何写出能适应不同数据库的SQL查询相关的知识,希望对你有一定的参考价值。
SQLServer:select CONVERT(varchar(100), '2020-02-05', 23) from USER;
mysql:select DATE_FORMAT('2020-02-05','%Y-%m-%d') from USER;
如果希望应用在不同的数据库之间切换,就需要改写 SQL 语句,很麻烦。
select EID, NAME, BIRTHDAY, WEEKOFYEAR(BIRTHDAY) WEEKS from EMP
3. 在集算器中编写脚本sqltrans.dfx:
A | B | |
1 | =sql.sqltranslate("MYSQL") | /将标准 SQL 转换成符合 MYSQL 语法的 SQL |
2 | =connect("db") | /连接数据库 |
3 | =A2.query@x(A1) | /查询表数据 |
4. 调试执行一下,可以看到A1的格值为
select EID, NAME, BIRTHDAY, WEEK(BIRTHDAY) WEEKS from EMP
已经转换使用 MYSQL 函数的 SQL 语句。
EID | NAME | BIRTHDAY | WEEKS |
1 | Rebecca | 1974-11-20 | 46 |
2 | Ashley | 1980-07-19 | 28 |
… | … |
集算器支持如下这些数据库类型:
数据库 |
ORACLE |
SQLSVR |
DB2 |
MYSQL |
HSQL |
TERADATA |
POSTGRES |
绝大多数常见函数都已经被定义过了,如果需要,还可以自定义函数,详细信息可查询官网上集算器文档中的sqltranslate函数帮助。
public static void testSqltranslate(){>
Connection con = null;
java.sql.PreparedStatement st;
//SQL 语句作为参数
String sql="select EID, NAME, BIRTHDAY, WEEKOFYEAR(BIRTHDAY) WEEKS from EMP";
try{
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
// 调用 sqltrans.dfx, 其中参数为 sql
st =con.prepareCall("sqltrans ?");
st.setObject(1, sql);
st.execute();
// 获取结果集
ResultSet rst = st.getResultSet();
System.out.println(rst);
}catch(Exception e){
System.out.println(e);
}finally{
// 关闭连接
if (con!=null) {
try {
con.close();
}catch(Exception e) {
System.out.println(e);
}
}
}
}
集算器与 JAVA 集成的进一步信息可参考:《》。
乾学院
数据技术与产品的知识分享平台
识别左侧二维码关注乾学院
微信搜一搜 : 乾学院
以上是关于如何写出能适应不同数据库的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章