我试图在属性文件的帮助下解决这个问题,但在属性文件中,我们只能处理数据库驱动程序问题.如果我想将MySQL切换到Oracle数据库,我需要更改我的所有查询.问题是如何在JDBC中使查询独立?
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class DBIndependencyExample {
public static void main(String[] args) {
try {
Properties pros = new Properties();
InputStream fis = new FileInputStream(
"D:\\Programs\\Eclipse\\DBIndependecyByPropertiesFile\\src\\connectdb.properties");
pros.load(fis);
String Drivername = pros.getProperty("k1");
//System.out.println(Drivername);
String url = pros.getProperty("k2");
String un = pros.getProperty("k3");
String pw = pros.getProperty("k4");
Class.forName(Drivername);
Connection con = DriverManager.getConnection(url, un, pw);
System.out.println("Driver Is Loaded With" + Drivername);
System.out.println("Connection is Opened");
Statement smt = con.createStatement();
String sql = pros.getProperty("k5");
//System.out.println(sql);
ResultSet rs = smt.executeQuery(sql);
while (rs.next()) {
System.out.println("username is:" + rs.getString(1) + " password is:" + rs.getString(2));
}
con.close();
System.out.println("Connection is closed");
fis.close();
} catch (Exception e) {
e.printstacktrace();
}
}
}
//MysqL Connectivity
//Start Properties File Code
k1=com.MysqL.jdbc.Driver
k2=jdbc:MysqL://localhost:3306/practice
k3=root
k4=root
k5=select * from student
//Oracle Connectivity
k1=oracle.jdbc.driver.OracleDriver
k2=jdbc:oracle:thin:@localhost:1521/orcla
k3=scott
k4=manish
k5=select * from dept
解决方法:
If i want to switch my MysqL to oracle database i need to change my
all query.
如果您的SQL查询仅依赖于ANSI sql而从不依赖于专有特定项(函数,关键字和…),那么您应该能够在不对查询进行任何更改的情况下从DBMS切换到另一个DBMS.
请注意,Hibernate不会将DBMS特性转换为另一个,例如将在Oracle中编写的DUAL表上的查询转换为MysqL方式.
Hibernate确保您的SQL查询在您不创建本机查询时可移植,Hibernate仍然提供这种可能性.
Here是最初版本的信息技术的原始sql ANSI草案和here下载链接 – 数据库语言 – sql – 第1部分:框架(sql /框架)