自己要写一个对数据库操作封装的模块,对外界提供接口。由于使用的数据库
不一样,可能是oracle,db2,sql server。如何屏蔽数据库的差异,提供一个固定
的接口。hibernate有方言可以屏蔽数据库的不同,但我们公司不用hibernate。
高手解答。
不一样,可能是oracle,db2,sql server。如何屏蔽数据库的差异,提供一个固定
的接口。hibernate有方言可以屏蔽数据库的不同,但我们公司不用hibernate。
高手解答。
解决方案 »
- mybatis 为什么得不到返回的主键
- Spring的事务能不能保证数据库的数据正确?
- Struts2 action 区分是手机浏览器进来还是从电脑进来
- jsp 調用 asp.net 的webservice 時!java.lang.NullPointerException 錯誤??
- 如何固定若干PC, 除固定的PC 外,不能 Login, 提高安全性
- tiles框架调试问题
- 在JSP中查询并在当前页面中显示值用request可以吗?
- Hibernate中list会加载数据到缓存,而不利用缓存是什么意思
- strutst:return mapping.findForward("welcome1111")时出错
- JNDI?
- 谁帮我看看从循环出来的单选框中怎么取值啊
- 类型转换?
操作类的不要涉及到特定的数据库的类的使用。比如Oracle的STRUCT等等。
参考:
<?xml version="1.0" encoding="UTF-8" ?>
<global>
<category code="cartoon1" type="db">
<param name="eid" value="CARTOON"/>
<param name="expire" value="60000"/>
<param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<param name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE"/>
<param name="uname" value="cartoon"/>
<param name="pass" value="oracle"/>
<param name="sharemin" value="1"/>
<param name="sharemax" value="2"/>
<param name="standardmin" value="1"/>
<param name="standardmax" value="2"/>
<param name="stmax" value="10"/>
<param name="psmax" value="10"/>
<param name="csmax" value="10"/>
</category>
<category code="cartoon2" type="db">
<param name="eid" value="CARTOON"/>
<param name="expire" value="60000"/>
<param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<param name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE"/>
<param name="uname" value="cartoon"/>
<param name="pass" value="oracle"/>
<param name="sharemin" value="1"/>
<param name="sharemax" value="2"/>
<param name="standardmin" value="1"/>
<param name="standardmax" value="2"/>
<param name="stmax" value="10"/>
<param name="psmax" value="10"/>
<param name="csmax" value="10"/>
</category>
</global>再加一个 category就可以再配一个数据库连接,分别有自己的连接池管理。
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class DBCon {
public static String driver="oracle.jdbc.driver.OracleDriver";
public static String url="jdbc:oracle:thin:@192.168.0.174:1521:ORCL";
public static String user="scott";
public static String pwd="tiger";
public static Connection getConnection(){
try {
Class.forName(driver);
Connection con=DriverManager.getConnection(url, user, pwd);
System.out.println("con success");
return con;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void close(Connection con,Statement stm,ResultSet rs){
if(con!=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stm!=null){
try {
stm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
DBCon.getConnection();
}
}
1.将数据库连接设置的参数由硬编码改为配置文件/资源文件(大家通常已经这么做了)
2.把一些常见sql操作封成不同的接口,有不同的实现类,以区别sql上的差异,比如某个接口专门提供按下标取数据的服务,那么他的Mysql实现类就可以在内部写成limit x,y,sqlserver的实现类就可以写成top...等
好好研究JDBC底层代码。有成果时拿出来给大家分享!
有没有提高重用的方法呢?