这个问题要先注意:oracle是不能用语句直接导出的,而常规的导出办法是用cmd的DOS命令来 *** 作,之前我已经试过了,具体代码如下:
try {
//获取备份路径
SystemSetting ss=AppgetSystemSetting("datebase_bak");
String bakpath=ssgetSettingValue();
//判断路径是否存在,不存在创建
javaioFile ff=new javaioFile(bakpath);
if(!ffexists()&&!ffisDirectory()){
ffmkdir();
}
//备份 *** 作开始
String baksql="";//备份语句
String dburl=AppgetConfigValue("dburl");
String dataBaseName="";//数据库名称
//oracle中数据库名放在最后
String[] newDBurlStrings=dburlsplit(":");
dataBaseName=newDBurlStrings[newDBurlStringslength-1]toUpperCase();
Calendar now = CalendargetInstance();
//备份文件名称(数据库名+年月日)
String baknameString=dataBaseName+nowget(CalendarYEAR)+nowget(CalendarMONTH)+nowget(CalendarDAY_OF_MONTH)+"dmp";
//如果已存在当天的备份先删除之前的备份
javaioFile bakfile=new javaioFile(bakpath+baknameString);
if(bakfileexists()){
bakfiledelete();
}
String username=AppgetConfigValue("dbusername");
String password=AppgetConfigValue("dbpassword");
baksql="exp "+username+"/"+password+"@"+dataBaseName+" file="+bakpath+baknameString+" full=y";
//oracle无法用sql语句进行备份只能通过cmd命令备份
Runtime rt = RuntimegetRuntime();
Process p = rtexec(baksql);
//pdestroy();
} catch (Exception e) {
loggerdebug("数据库备份出现异常:"+egetMessage());
return NONE;
}
大致是这样,其他的你修改下就可以了
链接数据库用到JDBC,一般链接数据库都要用到数据库驱动、链接字符串、登录名、登录密码。这4个属性可以提取到一个父类中,每一种数据库写一个类继承父类。要是这些都没问题了,就可以用楼上哥们儿说的,简单工厂模式,简单工厂是用到了java中的多态特性。 import javasqlConnection; public abstract class BaseConnect { public BaseConnect(String driverClass, String url, String loginName, String password) { super(); thisdriverClass = driverClass; thisurl = url; thisloginName = loginName; thispassword = password; } protected String driverClass; protected String url; protected String loginName; protected String password; public abstract void initDriver(); public abstract Connection getConnect(); public abstract void closeConnect(Connection conn); } import javasqlConnection; import javasqlDriverManager; import javasqlSQLException; public class OraclConnect extends BaseConnect { public OraclConnect(String driverClass, String url, String loginName, String password) { super(driverClass, url, loginName, password); // TODO Auto-generated constructor stub } @Override public void initDriver() { try { ClassforName(driverClass); } catch (ClassNotFoundException e) { eprintStackTrace(); } } @Override public Connection getConnect() { try { return DriverManagergetConnection(url, loginName, password); } catch (SQLException e) { eprintStackTrace(); } return null; } @Override public void closeConnect(Connection conn) { try { if (conn != null && !connisClosed()) { connclose(); } } catch (SQLException e) { eprintStackTrace(); } } } 以此类推,上面代码是我随便一写,你自己再改进下。蓝屏
很多朋友在Java开发中 使用Oracle数据库的时候 经常会碰到有ORA : maximum open cursors exceeded 的错误 实际上 这个错误的原因 主要还是代码问题引起的 ora : maximum open cursors exceeded 表示已经达到一个进程打开的最大游标数 这样的错误很容易出现在Java代码中的主要原因是 Java代码在执行conn createStatement()和conn prepareStatement()的时候 实际上都是相当与在数据库中打开了一个cursor 尤其是 如果你的createStatement和prepareStatement是在一个循环里面的话 就会非常容易出现这个问题 因为游标一直在不停的打开 而且没有关闭 一般来说 我们在写Java代码的时候 createStatement和prepareStatement都应该要放在循环外面 而且使用了这些Statment后 及时关闭 最好是在执行了一次executeQuery executeUpdate等之后 如果不需要使用结果集(ResultSet)的数据 就马上将Statment关闭 对于出现ORA 错误这种情况 单纯的加大open_cursors并不是好办法 那只是治标不治本 实际上 代码中的隐患并没有解除 而且 绝大部分情况下 open_cursors只需要设置一个比较小的值 就足够使用了 除非有非常特别的要求 lishixinzhi/Article/program/Oracle/201311/18963
那这样的话,你直接跟我说 你的win7系统有问题不就完了,我还能说什么。。。
既然程序没有问题,别人的可以用,说明应该是你的电脑在win7的配置环境的问题,你可以检查一下,因为你别的程序运行正常,这种可能性不是很大。
或者说你的连接jar包有问题,你试试吧别人的jar包复制一份导入到你的程序中看看,造成这个原因有可能是jar包比较老造成的
以上就是关于java如何将dmp文件导入到oracle数据库中全部的内容,包括:java如何将dmp文件导入到oracle数据库中、java实现从一个远程oracle数据库提取数据,之后写入本地的SQLserver数据库里。、Java开发中使用Oracle数据库的注意事项等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)