精华内容
下载资源
问答
  • java连接Oracle数据库

    万次阅读 多人点赞 2018-10-26 11:33:57
    连接数据库有多种方式,对于初学者连接数据库,这里介绍两种方法及两种连接配置方式 方法一 运用statement  1、创建一个JDBC-statement项目 2、导包 --把连接数据库的驱动包导入 oracle驱动包可以在Oracle...

    连接数据库有多种方式,对于初学者连接数据库,这里介绍两种方法及两种连接配置方式

    方法一  运用statement 

    1、创建一个JDBC-statement项目

    2、导包 --把连接数据库的驱动包导入

    oracle驱动包可以在Oracle安装位置找到,也可以自己去下载

    路径就是 app\计算机用户名\product\11.2.0\dbhome_1\jdbc\lib

    mysql驱动包也可以自己去下载

    我的Oracle驱动包在这个位置

    导入驱动包,在右键build Path

     

    2、加载驱动包,与数据库建立连接

    (创建一个Conn类用于数据库的连接)

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;

    public class Conn {
        static String driverClass="oracle.jdbc.driver.OracleDriver"; //oracle的驱动
        static String url="jdbc:oracle:thin:@localhost:1521:gfs";  //连接oracle路径方式 “”gfs“”是要建立连接的数据库名 1521端口
        static String user="system";   //user是数据库的用户名
        static String password="HeXu0607";  //用户登录密码
        
       public static Connection getconn() {  //为了方便下面的讲解,这里专门建立了一个用于数据库连接的一个方法
           Connection conn=null;
           try {

            //首先建立驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");

            //驱动成功后进行连接
            conn=DriverManager.getConnection(url, user, password);

           System.out.println("连接成功");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
           return conn; //返回一个连接
       }
    }
    //自己在测试连接的时候可以不用定义连接方法

    3、建立好连接后就是进行对数据库的操作了,首先是简单的查询操作

    (为了方便演示,我先创建好这几个类,代表了不同的操作方法:查询Query,插入Insert,删除Delete,更新Update)

    package com.jdbc;

    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class Query {
       public static void main(String[] args) {
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
            try {
                //1、获取连接对象
                conn=Conn.getconn();
                //2、创建statement类对象,用来执行SQL语句!!
                st=conn.createStatement();
                //3、创建sql查询语句
                String sql="select *from stu";
                //4、执行sql语句并且换回一个查询的结果集
                rs=st.executeQuery(sql);
                while(rs.next()) {  //循环遍历结果集
                    int id=rs.getInt("id");
                    String name=rs.getString("name");
                    int score=rs.getInt("score");
                    System.out.println("id=" + id + "--" + "name=" + name + "--" + "score=" + score);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } 
    }
    }

     执行结果

     4、插入操作

    package com.jdbc;

    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class Insert {
    public static void main(String[] args) {
        Connection conn=null;
        Statement st=null;
        conn=Conn.getconn();
        try {
            //获得连接
            st=conn.createStatement();
            //创建插入的sql语句
            String sql="insert into stu values(1002,'大佬',87)";
            //返回一个进行此操作的结果,要么成功,要么失败,如果返回的结果>0就是成功,反之失败
            int result=st.executeUpdate(sql);
            if(result>0) {
                System.out.println("添加成功");
            }
            else {
                System.out.println("添加失败");
            }
                
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    }
     

     5、删除操作

    package com.jdbc;

    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class Delete {
    public static void main(String[] args) {
        Connection conn=null;
        Statement st=null;
        conn=Conn.getconn();
        try {
            st=conn.createStatement();
            String sql="delete from stu where id='1002'";
            int result=st.executeUpdate(sql);
            //和插入一样,如果返回的结果大于0则操作成功
            if(result>1) {
                System.out.println("删除成功");
            }
            else{
                System.out.println("删除失败");
            }
                
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    }

     6、更新操作

    package com.jdbc;

    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class Updata {
    public static void main(String[] args) {
        Connection conn=null;
        Statement st=null;
        conn=Conn.getconn();
        try {
            st=conn.createStatement();
            String sql="update stu set id=1003 where name='古富升'";
            int result=st.executeUpdate(sql);
            if(result>0)
                System.out.println("更改成功");
            else
                System.out.println("更改失败");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    }
     

     二、preparedStatement (预处理)

     1、首先创建一个java工程,然后倒入驱动包,在build Path 驱动包 ,接着加载驱动包,创建用于连接的一个方法,和之前一样,就不多说了。

    package com.jdbc;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;

    public class Conn {
        static String driverClass="oracle.jdbc.driver.OracleDriver";
        static String url="jdbc:oracle:thin:@localhost:1521:gfs";
        static String user="system";
        static String password="HeXu0607";
        
       public static Connection getconn() {
           Connection conn=null;
           try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn=DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
           return conn;
       }
    }
     

    2、查询操作(注意和statement的不同之处,除了这一点不同,其他都一样的,就不做过多介绍了,直接看一下代码啦)

    package com.jdbc;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    public class Query {
      public static void main(String[] args) {
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
                try {
                    conn = Conn.getconn();
                    //创建sql语句 但先不给出要查询的记录的id
                    String sql = "select *from stu where id=?";
                    //创建预处理对象,对sql语句先进行预处理
                    ps = conn.prepareStatement(sql);
                    //之后再设置参数id
                    ps.setInt(1, 1002);
                    //最后在把预处理sql语句进行执行,返回结果集
                    rs = ps.executeQuery();
                    while(rs.next()) {
                        int id=rs.getInt("id");
                        String name=rs.getString("name");
                        int score=rs.getInt("score");
                        System.out.println("id="+id+"--"+"name="+name+"--"+"score="+score);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }    
    }
    }
     

     3、插入操作

    package com.jdbc;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    public class Insert {
     public static void main(String[] args) {
        Connection conn=null;
        PreparedStatement ps=null;
            try {
                conn=Conn.getconn();
                String sql="insert into stu values(?,?,?)";
                ps=conn.prepareStatement(sql);
                ps.setInt(1, 1002);
                ps.setString(2, "升哥哥");
                ps.setInt(3, 83);
                int rs=ps.executeUpdate();
                if(rs==1)
                    System.out.println("添加成功");
                else
                    System.out.println("添加失败");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }
    }
     

     4、删除操作

    package com.jdbc;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    public class Delete {
    public static void main(String[] args) {
        Connection conn=null;
        PreparedStatement ps=null;
        try {
            conn=Conn.getconn();
            String sql="delete from stu where id=?";
            ps=conn.prepareStatement(sql);
            ps.setInt(1,1003);
            int rs=ps.executeUpdate();
            if(rs>0)
                System.out.println("删除成功");
            else 
                System.out.println("删除失败");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    }
     

     5、更新操作

    package com.jdbc;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    public class Update {
        public static void main(String[] args) {
            Connection conn=null;
            PreparedStatement ps=null;
            try {
                conn=Conn.getconn();
                String sql="update stu set score=? where id=?";
                ps=conn.prepareStatement(sql);
                ps.setInt(1,60);
                ps.setLong(2,1001);
                int rs=ps.executeUpdate();
                if(rs>0)
                    System.out.println("更改成功");
                else
                    System.out.println("更改失败");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
     

     接下来再来讲解一下建立连接的一个另外配置方式

    之前我们都是把连接的相关配置信息直接写在程序代码里面,那样程序的灵活性就会相对变差,当需要连接其他数据库时又得重新改程序,相当繁琐。下面就来讲解另外一种配置方式

    properties文本配置

    1、首先建立一个新项目,然后导包、add build path

    2、为了快捷,在项目底下创建一个java.properties文件(实际中最好在项目下建立一个lib文件夹,放置各种包,例如jdbc驱动包)

    3、打开java.properties,把连接的相关配置写入进去(这里补充一点:properties文件里面都是以键值对的方式写入的),写好后保存。

    4、创建Conn类配置相关连接信息

    package com.conn;

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Properties;

    import org.junit.Test;

    public class Conn {
        static String driverClass=null;
        static String url=null;
        static String user=null;
        static String password=null;
        
        static {
            try {
                //1、创建一个properties对象,用于一会获取之前文本里面的配置信息
                Properties properties=new Properties();
                //2、创建一个输入流,把文本里的信息写入输入流中
                InputStream is=new FileInputStream("java.properties");
                //properties.load()方法获取输入流
                properties.load(is);
                //获取键值对的信息
                driverClass=properties.getProperty("driverClass");
                url=properties.getProperty("url");
                user=properties.getProperty("user");
                password=properties.getProperty("password");
                
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            
        }
        
        public static Connection getconn() {
            Connection conn=null;
            try {
                Class.forName(driverClass);
                conn=DriverManager.getConnection(url, user, password);
            } catch (Exception e) {
                e.printStackTrace();
            } 
            return conn;
        }
    }
     

    5、创建一个example类来进行测试

    package com.conn;

    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class Example {
       public static void main(String[] args) {
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
            try {
                conn=Conn.getconn();
                st=conn.createStatement();
                String sql="select *from stu";
                rs=st.executeQuery(sql);
                while(rs.next()) {
                    int id=rs.getInt("id");
                    String name=rs.getString("name");
                    int score=rs.getInt("score");
                    System.out.println("id=" + id + "--" + "name=" + name + "--" + "score=" + score);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } 
    }
    }
     

     项目的目录结构如下:

     

    希望对大家有帮助,另外还有很多个样子的方式,比如创建一个dao,这里就不多讲解了,大家可以去了解一下,项目开发一般都会用到它的!

    展开全文
  • Java连接oracle数据库并进行测试

    万次阅读 2017-12-18 19:27:08
    oracle数据库作为老牌数据库,虽然现在的开发使用较少,但不免会使用到,所以这里讲解一下java连接oracle的过程(喜欢mysql的同学,也可以按这个链接进行java连接mysql的学习:... 测试准备:下载连接oracle数据库的...

     

    oracle数据库作为老牌数据库,虽然现在的开发使用较少,但不免会使用到,所以这里讲解一下java连接oracle的过程(喜欢mysql的同学,也可以按这个链接进行java连接mysql的学习:http://blog.csdn.net/sunyinggang/article/details/78826712)

    测试准备:下载连接oracle数据库的驱动,附上驱动下载地址:https://pan.baidu.com/s/1bprYmtD(链接失效可以随时留言)

    --------------------------------------------------------------------------------------

    上边的网盘地址链接失效了,写了篇新文章,链接有效,可以访问这篇博客:http://www.simplesay.xin/a-324.html

    -------------------------------------------------------------------------------------

    接下来是连接及测试步骤:

    首先创建工程文件oracle,然后在工程文件中新建目录lib

     

    然后打开下载后的驱动文件,解压后选择第二个ojdbc5.jar

     

    复制此文件到刚才创建的lib目录中

     

     

    然后右键工程文件oracle,选择最后一个,进入界面后选择左侧Java Build Path 然后选择中间的Libraries,然后选择右侧第一个按钮

     

    在oracle---->lib下选中刚才粘贴过来的驱动文件ojdbc5.jar,点击下方ok

     

    这是界面多出一个驱动文件,点击下方按钮

     

    驱动配置成功,然后在工程文件src目录下新建包connect,然后新建文件test.java

     

    然后复制下面的代码,代码原理可自行研究(其实就是简单的java连接数据库),这里需要注意的就是加载驱动代码,还有连接数据库的代码,一定记住数据库用户名和密码修改为自己数据库的用户名和密码,其他的不用变

     

    package connect;
    import java.sql.*;     //导入java.sql包  
    public class test {//创建test类,保证文件名与类名相同  
               Connection con;//声明Connection对象  
              Statement sql;   
              ResultSet res;  
              public Connection getConnection() {  //建立返回值为Connection的方法  
                  try {        //加载数据库驱动类  
                      Class.forName("oracle.jdbc.driver.OracleDriver");  
                      System.out.println("数据库驱动加载成功");  //返回加载驱动成功信息  
                  }catch(ClassNotFoundException e){  
                      e.printStackTrace();  
                  }  
                  try {  
                      con=DriverManager.getConnection("jdbc:oracle:" + "thin:@127.0.0.1:1521:XE","system","root");//通过访问数据库的URL获取数据库连接对象 ,这里后两个参数分别是数据库的用户名及密码 
                      System.out.println("数据库连接成功");  //返回连接成功信息
                  }catch(SQLException e) {  
                      e.printStackTrace();  
                  }  
                  return con;//按方法要求返回一个Connection对象  
              }  
              public static void main(String[] args) {   //主方法  
                  test c = new test();    //创建本类方法  
                   c.getConnection();//调用连接数据库的方法  
              }  
    }  

    返回信息,说明连接数据库成功,现在就可以自己进行对数据库的增删改查操作了

     

     

     

    展开全文
  • 通过Java备份Oracle数据库和还原Oracle的方法

    一、通过Java备份数据库

    1、定义DBContext接口

    public interface DBContext {
    
    	/**
    	 * 解析JdbcUrl
    	 * 
    	 * @param url
    	 * @param info
    	 */
    	public void parseJdbcUrl(String url, DataSourceInfo info);
    
    	/**
    	 * 备份数据库
    	 * 
    	 * @param userName
    	 *            数据库用户名
    	 * @param password
    	 *            数据密码
    	 * @param dbName
    	 *            数据库实例名
    	 * @param host
    	 *            连接数据库的ip
    	 * @param dumpFile
    	 *            备份文件名(全路径)
    	 * @param tableNameList
    	 *            待备份的数据库表名
    	 * @return void
    	 * @throws Exception
    	 */
    	public void backupDB(String userName, String password, String dbName,
    			String host, String dumpFile, List<String> tableNameList)
    			throws Exception;
    
    	/**
    	 * 还原数据库
    	 * 
    	 * @param userName
    	 *            数据库用户名
    	 * @param password
    	 *            数据密码
    	 * @param dbName
    	 *            数据库实例名
    	 * @param host
    	 *            连接数据库的ip
    	 * @param backupFile
    	 *            已备份的数据库文件(全路径)
    	 * @param ignoreTables
    	 *            待备份的数据库表名
    	 * @return void
    	 * @throws Exception
    	 */
    	public void restoreDB(String userName, String password, String dbName,
    			String host, String backupFile) throws Exception;
    }
    

    2、DBContext实现类

    public class OracleDBContext implements DBContext {
    
    	// 日志
    	Logger log = Logger.getLogger(OracleDBContext.class);
    
    	/**
    	 * 解析oracle连接jdbc的url
    	 * 
    	 * @return void
    	 */
    	public void parseJdbcUrl(String url, DataSourceInfo info) {
    		int end = url.indexOf("?");
    		end = (end == -1) ? url.length() : end;
    		url = url.substring(0, end);
    		int start = url.lastIndexOf(":");
    		String dbName = url.substring(start + 1);
    
    		url = url.substring(0, start);
    		url = url.substring(url.lastIndexOf("@") + 1);
    		String[] s = url.split(":");
    		info.setDbName(dbName);
    		info.setHost(s[0]);
    		info.setPort(Integer.parseInt(s[1]));
    	}
    
    	public void backupDB(String userName, String password, String dbName,
    			String host, String dumpFile, List<String> tableNameList)
    			throws Exception {
    		StringBuffer stringBuffer = new StringBuffer();
    
    		// 用户名
    		stringBuffer.append("exp ");
    		stringBuffer.append(userName);
    		stringBuffer.append("/");
    
    		// 密码
    		stringBuffer.append(password);
    		stringBuffer.append("@");
    
    		// 连接数据库的ip
    		stringBuffer.append(host);
    		stringBuffer.append("/");
    
    		// 数据库名称
    		stringBuffer.append(dbName);
    
    		stringBuffer.append(" file=");
    		stringBuffer.append(dumpFile);
    		
    		// 导出权限
    		stringBuffer.append(" grants=y");
    		
    		// 按照用户全部导出
    		stringBuffer.append(" owner=");
    		stringBuffer.append(userName);
    		
    		// 按照指定表名导出
    		/*stringBuffer.append(" tables=(");
    		for (int i = 0; i < tableNameList.size(); i++) {
    			stringBuffer.append(tableNameList.get(i));
    			if (i < tableNameList.size() - 1) {
    				stringBuffer.append(",");
    			}
    		}
    		stringBuffer.append(")");*/
    
    		String cmdStr = stringBuffer.toString();
    
    		// 得到jvm的运行环境
    		Runtime rt = Runtime.getRuntime();
    		// 在单独的进程中执行指定的字符串命令。		
    		Process process = rt.exec(cmdStr);
    		
    		// 处理进程挂起
    		String line = null;   
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));    
            //读取ErrorStream很关键,这个解决了挂起的问题。    
            while ((line = br.readLine()) != null){    
            	log.info(line);    
            }   
    
    		// 导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
    		process.waitFor();
    		
    	}
    
    	public void restoreDB(String userName, String password, String dbName,
    			String host, String backupFile) throws Exception {
    		StringBuffer stringBuffer = new StringBuffer();
    
    		// 用户名
    		stringBuffer.append("imp ");
    		stringBuffer.append(userName);
    		stringBuffer.append("/");
    
    		// 密码
    		stringBuffer.append(password);
    		stringBuffer.append("@");
    
    		// 连接数据库的ip
    		stringBuffer.append(host);
    		stringBuffer.append("/");
    
    		// 数据库名称
    		stringBuffer.append(dbName);
    		// 备份文件路径
    		stringBuffer.append(" file=");
    		stringBuffer.append(backupFile);
    		stringBuffer.append(" ignore=y full=y grants=y");		
    		
    		String cmdStr = stringBuffer.toString();
    
    		// 得到jvm的运行环境
    		Runtime rt = Runtime.getRuntime();
    		// 在单独的进程中执行指定的字符串命令。		
    		Process process = rt.exec(cmdStr);
    		
    		// 处理进程挂起
    		String line = null;   
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));    
            //读取ErrorStream很关键,这个解决了挂起的问题。    
            while ((line = br.readLine()) != null){    
            	log.info(line);    
            }   
    		// 导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
    		process.waitFor();
    	}
    
    }
    

    3、用于解析数据库配置信息的工具类

    public class DBTool {
    
    	// 私有的构造方法
    	private DBTool() {
    
    	}
    
    	/**
    	 * 得到数据库类型
    	 * 
    	 * @return String
    	 */
    	public static String getDataBaseType() {
    		String dataBaseType = null;
    
    		// 获取当前色sessionFactory
    		LocalSessionFactoryBean sessionFactory = getLocalSessionFactoryBean();
    		if (null != sessionFactory) {
    
    			// 通过sessionFactory获取数据源
    			DataSource dataSource = sessionFactory.getDataSource();
    
    			// spring里的c3p0数据源
    			if (dataSource instanceof ComboPooledDataSource) {
    				ComboPooledDataSource comboPooledDataSource = (ComboPooledDataSource) dataSource;
    
    				// 数据库驱动信息
    				String driveClass = comboPooledDataSource.getDriverClass();
    
    				// 根据数据库驱动信息判断连接的数据库类型
    				if (null != driveClass) {
    					if (driveClass.indexOf("postgresql") > -1) {
    						dataBaseType = "postgresql";
    					} else if (driveClass.indexOf("OracleDriver") > -1) {
    						dataBaseType = "oracle";
    					}
    				}
    			}
    		}
    
    		return dataBaseType;
    	}
    
    	/**
    	 * 是否是postgreSQL
    	 * 
    	 * @return boolean
    	 */
    	public static boolean isPostgreSQL() {
    		return "postgresql".equals(getDataBaseType());
    	}
    
    	/**
    	 * 是否是oracle
    	 * 
    	 * @return boolean
    	 */
    	public static boolean isOracle() {
    		return "oracle".equals(getDataBaseType());
    	}
    
    	/**
    	 * 得到数据库上下文
    	 * 
    	 * @author chenweiyf2
    	 * @return DBContext
    	 */
    	public static DBContext getDBContext() {
    		if (isPostgreSQL()) {
    			return new PostgreSQLDBContext();
    		} else {
    			return new OracleDBContext();
    		}
    	}
    
    	/**
    	 * 获取连接数据库信息
    	 * 
    	 * @return DataSourceInfo
    	 */
    	public static DataSourceInfo getDataSourceInfo() {
    		DataSourceInfo dataSourceInfo = new DataSourceInfo();
    
    		// 当前sessionFactory
    		LocalSessionFactoryBean sessionFactory = getLocalSessionFactoryBean();
    		if (null != sessionFactory) {
    
    			// 数据源信息
    			DataSource dataSource = sessionFactory.getDataSource();
    			String driver = null;
    			String url = null;
    			String userName = null;
    			String password = null;
    			String encoding = null;
    
    			// c3p0数据源
    			if (dataSource instanceof BasicDataSource) {
    				BasicDataSource basicDataSource = (BasicDataSource) dataSource;
    				
    				driver = basicDataSource.getDriverClassName();
    				url = basicDataSource.getUrl();
    				userName = basicDataSource.getUsername();
    				password = basicDataSource.getPassword();
    			}
    			dataSourceInfo.setDriver(driver);
    			dataSourceInfo.setUserName(userName);
    			dataSourceInfo.setPassword(password);
    			dataSourceInfo.setUrl(url);
    
    			// 通过url获取数据库的实例名、连接数据库ip、端口
    			if (null != url) {
    				getDBContext().parseJdbcUrl(url, dataSourceInfo);
    				Pattern pattern = Pattern.compile("UTF-8|GBK|GB2312",
    						Pattern.CASE_INSENSITIVE);
    				Matcher matcher = pattern.matcher(url);
    
    				// 看连接信息中是否有设置编码
    				if (matcher.find()) {
    					encoding = matcher.group();
    				}
    			}
    			dataSourceInfo.setEncoding(encoding);
    		}
    
    		return dataSourceInfo;
    	}
    
    	/**
    	 * 得到当前使用的SessionFactory
    	 * 
    	 * @return LocalSessionFactoryBean
    	 */
    	@SuppressWarnings("rawtypes")
    	public static LocalSessionFactoryBean getLocalSessionFactoryBean() {
    		LocalSessionFactoryBean sessionFactory = null;
    
    		// 获取由spring管理的所有的bean,获取到的是一个map集
    		Map map = AppContext.getContext().getBeansOfType(
    				LocalSessionFactoryBean.class);
    
    		// 寻找LocalSessionFactoryBean
    		for (Object obj : map.values()) {
    			if (obj instanceof LocalSessionFactoryBean) {
    				sessionFactory = (LocalSessionFactoryBean) obj;
    				break;
    			}
    		}
    
    		return sessionFactory;
    	}
    
    	/**
    	 * 数据备份
    	 * 
    	 * @param filePath
    	 *            备份文件名(全路径)
    	 * @param valueList
    	 *            数据库表名list
    	 * @return String 返回信息
    	 * @throws Exception
    	 */
    	public static String backupDB(String filePath, List<String> valueList)
    			throws Exception {
    		String responseStr = "-1";
    
    		DataSourceInfo dataSourceInfo = getDataSourceInfo();
    
    		// 根据上下文进行数据备份
    		// (待优化:备份数据库的大小,备份的操作系统,备份路径磁盘、文件夹的大小,备份结果文件的格式)
    		getDBContext().backupDB(dataSourceInfo.getUserName(),
    				dataSourceInfo.getPassword(), dataSourceInfo.getDbName(),
    				dataSourceInfo.getHost(), filePath, valueList);
    
    		// 备份最终结果是产生备份的文件,通过此判断是否已备份成功
    		File file = new File(filePath);
    		if (file.exists()) {
    			responseStr = filePath;
    		} else {
    			Log.error("数据备份失败!");
    		}
    
    		return responseStr;
    	}
    
    	/**
    	 * 数据还原
    	 * 
    	 * @param resotreFilePath
    	 *            文件名(全路径)
    	 * @return void
    	 * @throws Exception
    	 */
    	public static void restoreDB(String resotreFilePath) throws Exception {
    		DataSourceInfo dataSourceInfo = getDataSourceInfo();
    
    		// 数据还原过程,调用cmd命令,但无法得知调用后的结果如何,所以无法通过返回值来判断是否还原成功
    		// (待优化:如何判断是否还原成功,还原文件的大小)
    		getDBContext().restoreDB(dataSourceInfo.getUserName(),
    				dataSourceInfo.getPassword(), dataSourceInfo.getDbName(),
    				dataSourceInfo.getHost(), resotreFilePath);
    	}
    }
    

    二、数据库还原操作

    由于Oracle 数据库还原数据库时必须断开现有链接,所以无法实现在线还原功能,需要通过还原脚本完成。

    1、还原前需要删除数据库原有资源

    --.sql脚本
    --唯一注意的是下面的f:\dropobj.sql 为操作的.sql;
    --你的电脑没有F盘,请换为D或者E其他存在的盘符
    --用于删除当前用户的所有对象
    --use for drop all objects in current user;
    set heading off;
    set feedback off;
    spool %logdir%\dropobj.sql;
    
     
    prompt --删除约束条件
    select 'alter table '||table_name||' drop constraint '||constraint_name||' ;' from user_constraints where constraint_type='R';
     
    prompt --删除表空间
    select 'drop table '||table_name ||';' from user_tables;
     
    prompt --删除视图
    select 'drop view ' ||view_name||';' from user_views;
     
    prompt --删除数字序列
    select 'drop sequence ' ||sequence_name||';' from user_sequences;
     
    --prompt --删除函数
    --select 'drop function ' ||object_name||';'  from user_objects
    --where object_type='FUNCTION';
    
    prompt --删除存储过程
    select 'drop procedure '||object_name||';' from user_objects
    where object_type='PROCEDURE';
     
    prompt --删除包
    prompt --删除包内容
    select 'drop package '|| object_name||';' from user_objects
    where object_type='PACKAGE';
    
    prompt --删除数据库链接
    select 'drop database link '|| object_name||';' from user_objects
    where object_type='DATABASE LINK';
     
    spool off
    set heading on;
    set feedback on;
    
    spool %logdir%\dropobj.log
    @@%logdir%\dropobj.sql;
    host del %logdir%\dropobj.sql;
    --done for drop objects in current user;
    --在SQL*PLUS 将这整段作为.sql导入或者直接复制黏贴,按F5执行,完成。
    commit;
    exit;

    2、还原脚本

    @echo 数据还原程序会先删除数据库文件再进行还原,确认操作请按任意键继续......
    @echo off
    pause>nul
    set /p ip=请输入数据库IP:
    @echo off
    set /p file=请输入还原文件的完整路径:
    @echo 系统开始执行还原程序,请不要关闭本界面.....
    @echo off
    set logdir=log%date:~0,4%%date:~5,2%%date:~8,2%
    if not exist %logdir% mkdir %logdir%
    @echo on
    @echo 建立日志文件夹完成......
    @echo off
    
    sqlplus UserName/password@%ip%/orcl @deleteObject.sql
    
    
    @echo on
    @echo 删除数据库文件完成,执行还原语句请按任意键......
    @echo off
    pause;
    
    imp IVMS8630/Hik123_CityParking@%ip%/orcl fromuser=ivms8630 touser=ivms8630 grants=y ignore=y file=%file%
    
    @echo on
    @echo 还原完成......
    @echo off
    @echo 数据还原程序已完成还原操作,请按按任意键退出......
    @echo off
    pause>nul




    展开全文
  • Java连接Oracle数据库的三种连接方式

    万次阅读 多人点赞 2016-12-27 21:01:57
    背景:这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询。SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQL、SQL Server)都...

    背景:

    这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询。

    SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQL、SQL Server)都是类似,区别不大。

    今天在这里就写下 Java 连接 Oracle 数据库的三种连接方式。

    工具:

    • Oracle Database 10g Express Edition
    • cmd命令窗口
    • IDEA 2016.1.3
    • ojdbc6_g.jar(数据库驱动包)
    • jdk 1.8

    创建数据库表:

    首先在本地写好创建的数据库表的创建代码后,然后粘贴在cmd命令窗口下,即可创建成功。(前提是进入安装好了oracle,进入了用户,然后在当前用户下创建这个表)

    部门表:tb1_dept (含有id name city三个属性)

    create table tb1_dept(
        id  number(5) primary key,
        name varchar2(10) not null,
        city varchar2(10) not null
    );

    插入数据:

    然后同样写好插入数据的sql语句,这里我就写三条数据。

    insert into tb1_dept(id, name, city) values(1,'java', '南昌');
    insert into tb1_dept(id, name, city) values(2,'c', '上海');
    insert into tb1_dept(id, name, city) values(3,'java', '南昌');

    好,数据库表已经创建好了,接下来我们需要准备的是数据库驱动包。

    这里我用的是 ojdbc6_g.jar 驱动包。

    接下来先了解一些基础知识:


    JDBC的六大步骤:

    这里我们就按照jdbc的这六大步骤执行下去:

    • 注册驱动
    • 获取连接
    • 获取执行sql语句对象
    • 执行sql语句
    • 处理结果集
    • 关闭资源

    URL:统一资源定位器

    oracle URLjdbc:oracle:thin:@localhost:1521:XE

    jdbc:oracle:thin:@127.0.0.1:1521:XE

    MySQL URLjdbc:mysql://localhost:3306/数据库名称

    thin:小型驱动,驱动方式

    @localhost 本机ip地址 127.0.0.1

    XE:数据库的名字

    ipconfig:ip地址查询

    URI:统一资源标识符

    URN:用特定命名空间的名字标识资源

    如果你不知道 URL、 URI、URN三者的区别的话,那么你可以参考下面我推荐的一篇文章。

    你知道URL、URI和URN三者之间的区别吗?


    三种连接方式

    代码:

    package cn.zhisheng.test.jdbc;
    
    import oracle.jdbc.driver.OracleDriver;
    import java.sql.*;
    import java.util.Properties;
    /**
     * Created by 10412 on 2016/12/27.
     * JDBC的六大步骤
     * JAVA连接Oracle的三种方式
     */
    public class JdbcTest
    {
        public static void main(String[] args) {
            Connection connect = null;
            Statement statement = null;
            ResultSet resultSet = null;
    
            try {
                //第一步:注册驱动
                //第一种方式:类加载(常用)
                //Class.forName("oracle.jdbc.OracleDriver");
    
                //第二种方式:利用Driver对象
                Driver driver = new OracleDriver();
                DriverManager.deregisterDriver(driver);
    
                //第三种方式:利用系统参数  需在idea中配置program arguments为下面的参数
                //-Djdbc.drivers = oracle.jdbc.OracleDriver
    
    
    
                //第二步:获取连接
                //第一种方式:利用DriverManager(常用)
                //connect = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "你的oracle数据库用户名", "用户名密码");
    
                //第二种方式:直接使用Driver
                Properties pro = new Properties();
                pro.put("user", "你的oracle数据库用户名");
                pro.put("password", "用户名密码");
                connect = driver.connect("jdbc:oracle:thin:@localhost:1521:XE", pro);
    
                //测试connect正确与否
                System.out.println(connect);  
    
    
                //第三步:获取执行sql语句对象
                //第一种方式:statement
                //statement = connect.createStatement();
    
                //第二种方式:PreStatement
                PreparedStatement preState = connect.prepareStatement("select  * from tb1_dept where id = ?");
    
    
                //第四步:执行sql语句
                //第一种方式:
                //resultSet = statement.executeQuery("select  * from tb1_dept");
    
                //第二种方式:
                preState.setInt(1, 2);//1是指sql语句中第一个?,  2是指第一个?的values值
                //resultSet = preState.executeQuery();        //执行查询语句
                //查询任何语句,如果有结果集,返回true,没有的话返回false,注意如果是插入一条数据的话,虽然是没有结果集,返回false,但是却能成功的插入一条数据
                boolean execute = preState.execute();
                System.out.println(execute);
    
                //第五步:处理结果集
                while (resultSet.next())
                {
                    int id = resultSet.getInt("id");
                    String name = resultSet.getString("name");
                    String city = resultSet.getString("city");
                    System.out.println(id+"   "+name+"   "+city);  //打印输出结果集
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                //第六步:关闭资源
                    try {
                        if (resultSet!=null) resultSet.close();
                        if (statement!=null) statement.close();
                        if (connect!=null) connect.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
            }
        }
    }

    注解:

    1、 第一步:注册驱动 中的第三种方法 利用系统参数 需在idea中配置program arguments为下面的参数

    这里我说一下怎么在IDEA中的配置方式吧

    这里写图片描述

    这里写图片描述

    运行截图:

    这里写图片描述

    OK !

    下篇文章将写 JDBC 的封装。

    展开全文
  • JAVA连接Oracle数据库

    2016-08-13 03:09:20
    不知道哪儿错了还请大神指教,数据库在远程服务器上![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/17.gif)![图片]...
  • Metabase配置Oracle数据库

    千次阅读 2018-10-10 13:14:27
    在这里分别讲解一下在linux操作系统上基于docker安装的Metabase配置oracle数据库和Windows操作系统直接使用java -jar运行metabase配置oracle数据库。 一、linux操作系统上基于docker安装的Metabase,并配置oracle...
  • Java 连接oracle 数据库

    千次阅读 2013-05-02 22:30:33
    Java连接Oracle步骤: 1.注册加载驱动 驱动名:DRIVER="oracle.jdbc.driver.OracleDriver"; Class.forName("驱动类名"); 2.获得连接 数据库地址: URL="jdbc:oracle:thin:@localhost:1521:ORCL"; Connection ...
  • 1. oracle数据库驱动 去网站http://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html下载最新的oracle驱动,我下载的如下图: 2. 代码实现 弧
  • java操作oracle数据库

    千次阅读 2012-07-27 20:45:59
    最近看韩顺平老师的视频,记下java是如何操作oracle的。 环境:windows xp  eclipse 4.2  oracle 10.2.0 操作方式: 一.通过ODBC连接oracle 1.先配置ODBC数据源:   测试连接成功后: 2.打开eclipse,...
  • oracle的jdbc连接方式:oci和thin ... oci和thin是Oracle提供的两套Java访问Oracle数据库方式。  thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracle客户端,只要求classpath中包含jdbc驱动
  • java连接oracle数据库的各种方法及java在数据库中的含义 java与oracle的接口: 在数据库中运行JAVA可以说是ORACLE8i的最令人激动的新特性。在你创建的使用ORACLE8i 数据库的应用程序中,你可以使用与JAVA有关的新...
  • Java连接Oracle数据库 并查询

    千次阅读 2017-04-26 16:56:28
    Java连接Oracle下载ODBC Jar包驱动,网上百度下载或者去官网下载,导入到Eclipse 项目里面建立连接public class DbConn { private static String driver = "oracle.jdbc.driver.OracleDriver"; private static ...
  • JAVA连接oracle数据库

    万次阅读 2013-05-31 11:12:43
    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.Context; impo
  • JAVA查询Oracle数据库集群连接字符串

    千次阅读 2016-12-07 12:42:55
    JAVA查询Oracle数据库集群连接字符串 事件: 报表接口数据库突然无法连接 ,导致无法正常取数操作。 异常信息: Io 异常: Got minus one from a read call 分析: 数据库地址及其配置信息都为发生变化 , 经询问...
  • java连接oracle数据库的三种方式

    千次阅读 2018-06-06 17:18:23
    Java JDBC Thin Driver 连接 Oracle有三种方法,如下:格式一: Oracle JDBC Thin using a ServiceName: jdbc:oracle:thin:@//&lt;host&gt;:&lt;port&gt;/&lt;service_name&gt; Example: ...
  • 然后我的数据库url是:jdbc:oracle:thin:@anywhere:1521:anywhere;但是连接不成功; 我把url改成:jdbc:oracle:thin:@192.168.0.101:1521:anywhere就可以连接.也就是说用ip可以连接,但是用主机名却不行,应该如何配置?
  • java连接oracle数据库(反向生成)  10级学员 刘根鹏课堂笔记 相信大家已经对Myeclipse做javaweb项目的步骤熟读于耳,那么你有没有对那些繁琐的步骤感到很纠结,好吧,现在让我来告诉你,利用Myeclipse做JavaWeb...
  • 对小白友好的一篇文章。让你快速了解使用jdbc实现Javaoracle的连接
  • 项目上需要我访问远程服务器获取一些信息,对面用的是oracle数据库(我不能修改人家的编码格式),所以我就得连接oracle获取 我是用的平台是eclipse,平时想到简单的方式就是使用jdcb,但是发现查询后,中文乱码,很...
  • Java连接oracle数据库报错(JDBC)

    千次阅读 2018-12-18 13:05:48
    jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger"); 那可能是ojdbc.jar版本问题,可以换其他版本尝试。 下面是ojdbc6和ojdbc7-12.1.0.2的地址,需要的自取。 链接: https...
  • springboot+mybatis配置Oracle数据库

    千次阅读 2020-05-25 16:50:04
    本篇我们将分享springboot+mybatis配置Oracle数据库,接下来将会从零开始搭建。 一、我们新建一个springboot项目 1. 2.勾住spring web 点击Finish就ok了,等待项目包导好。 二、项目包导好后我们开始配置mybatis ...
  • 1、 创建数据库test1,包含t_id、t_name create table test1( t_id number,t_name varchar(20));2、下载oracle的jdbc,官网下载 3、代码:package dao;import java.sql.Connection; import java.sql....
  • 项目上线了一段时间,这几天项目不停报这3个异常,数据库用的是Oracle,rac的链接方式,求解。。。 ... java.lang.InterruptedException: sleep interrupted ...ime 60000ms.... 数据库异常还引发了Quartz异常,Quartz用的是...
  • Java连接Oracle数据库的各种方法

    千次阅读 2007-05-02 22:48:00
    javaoracle的接口: 在数据库中运行JAVA可以说是ORACLE8i的最令人激动的新特性。在你创建的使用ORACLE8i 数据库的应用程序中,你可以使用与JAVA有关的新特征,轻松的将程序发布到INTERNET或INTRANET上。 Methods...
  • JAVA查询Oracle数据库集群连接字符串及其JDBC jar包选择.
  • java实现oracle数据库的dmp导入出

    千次阅读 2019-02-19 16:37:58
    最近有个需求java实现oracle部分表的dmp文件导入/出,废话不多直接上代码,properties文件存储数据库信息 /** * 导出dmp * @return */ public boolean generateDmp() { Process process = null; String[] ...
  • JAVA连接ORACLE数据库的问题

    千次阅读 2007-04-12 11:03:00
    前天刚开始学习用JAVA连接Oracle 数据库的时候遇到了点问题,在网上发帖子求助,搜索相似的问题,和同学一起探索,终于把问题给解决了,说不上完美的解决吧,但至少学到了不少的东西。 分别在JavaOracle社区发表...
  • 连接oracle数据库时,一直报错找不到驱动,后来发现自己没整驱动: 将驱动jar包房入jdk1.8的jre的lib中,如下图: 然后打开IDEA,如下操作:点击添加,把jar添加进去 好了,这样再去执行就成功了。 ...
  • 如题: 现在捕获的异常是 ORA-00942: 表或视图不存在 怎么改成 ORA-00942: table or view does not exist 是在哪里改配置。有大神指点下呗

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 158,969
精华内容 63,587
关键字:

java配置oracle数据库

java 订阅