【发布时间】:2018-04-18 06:08:01
【问题描述】:
我试图借助属性文件来解决这个问题,但在属性文件中,我们只能处理数据库驱动程序问题。如果我想将我的 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
【问题讨论】:
-
select * from student和select * from dept应该适用于 Oracle 和 MySQL;您是否有更复杂的查询不适用于两种 RDBMS? -
有一些基于 mysql 和 oracle 的特定查询。假设我的应用程序基于 mysql db,我想将我的 db 更改为任何其他 db。在这种情况下,我必须更改整个查询什么我们在我们的应用程序中申请了。我需要可以在我的应用程序中接受任何数据库查询的东西。谢谢
-
我不认为有一个实用程序可以自动将专有语法从一个供应商翻译到另一个供应商。正如其他人指出的那样,您要么需要坚持 ANSI SQL 语法,要么需要针对不同的数据库进行单独的查询。