`
54wangyong
  • 浏览: 13704 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Database links小案例

 
阅读更多

oracle database link,它是用来更方便的一个数据库中访问另一个数据库(包括本地和远程的,道理一样)在本地建立的。即数据库连接只是连到别的数据库的快捷方式。

例如在192.168.104.191上有个nsbd数据库,用户名和密码分别是aqjcaqjc,LISTENER 端口号是1522

192.168.104.178上有个orcl数据库,用户名和密码分别是aqjcaqjc, LISTENER端口号是1521,数据库有张表名为static_pointformula,表中字段有spointformulaguidspointguid

1.创建database link

先在191机器上创建database link,创建语句有两种方式:

第一种,先在tnsnames.ora里配置连接178的字符串,如下所示

 

178 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.104.178)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

 

然后用sql 语句创建database link,创建语句如下所示:

Create public database link dblinkName connect to username identified by password using ‘connect string’

其中dblinkName为创建database link的名称,usernamepassword分别为连接字符串’connect string ‘所指向的服务器中的数据库的用户名和密码,所以创建连接178机器上的database link如下所示:

Create public database link aaa connect to aqjc identified by aqjc using ‘178’

第二种,不用在tnsnames.ora里配置连接178的字符串,可以直接写在创建database link语句里,如下所示:

 

Create public database link aaa connect to aqjc identified by aqjc using ‘(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.104.178)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
)’

2. 使用database link

public class TestDatabaseLink {
	static Connection  conn = null;
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
			String user = "aqjc";
			String password = "aqjc";
			String url = "jdbc:oracle:thin:@localhost:1522:nsbd";
			conn = DriverManager.getConnection(url,user,password);
			
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		} catch (SQLException e) {
			
			e.printStackTrace();
		} catch (InstantiationException e) {
			
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		try {
			//增、删、改、查语句如下所示,其中每个语句的表名static_pointformula后面跟的aaa是前面创建的database link的名称
			conn.setAutoCommit(false);
			Statement stat = conn.createStatement();
			String sqlString = "insert into static_pointformula@aaa (spointformulaguid,spointguid) values('1','S_145')";
			//sqlString = "update static_pointformula@aaa set norderid = '1' where spointformulaguid = '1'";
			//sqlString = "delete from static_pointformula@aaa where spointformulaguid = '1'";
			//System.out.println(stat.executeUpdate(sqlString));
			conn.commit();
			ResultSet rs = stat.executeQuery("select * from static_pointformula@dblinkName");
			
			while(rs.next()){
				System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
			}
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				
				e1.printStackTrace();
			}
			e.printStackTrace();
		}

	}

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics