dblink(Database Link)数据库链接顾名思义就是数据库的链接,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
实验环境:
win8 64位
oracle11g
mysql5.7
准备:
dg4odbc
MYSQL-ODBC-5.X
实验步骤:
一.MYSQL ODBC 配置
1.开始菜单-oracle-配置和移植工具-ODBC管理员

2.系统DSN 创建新数据源


名称mysqlodbc
二.配置ORACLE透明网关
位置:%ORACLE_HOME%/hs/admin/
创建:init(数据库名).ora
这里我们使用initmysqllink.ora
内容:
HS_FDS_CONNECT_INFO = mysqlodbc #数据源名称
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_FDS_TRACE_LEVEL = debug

三.配置TNSNAMES&LISTENER
tnsname.ora,连接端配置文件,主要内容是要访问的数据库的连接串的解释。也就是@后面的字符传的解释文件。这个主要出现的访问端(客户端),当然并不是说服务器端没有,因为服务器端也可以是访问端,比如服务器互相访问的dblink,以及服务器自己访问自己。类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应。
listener.ora,监听配置文件,接受远程对数据库的接入申请并转交给oracle的服务器进程。这个文件里面是监听的主要(重要)配置内容,也是监听在服务器端的主文件。
位置:%ORACLE_HOME%\NETWORK\ADMIN
1.tnsnames.ora增加
mysqllink =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SID = mysqllink)
)
(HS = OK)
)
2.listener.ora SID_LIST_LISTENER增加
(SID_DESC =
(SID_NAME = mysqllink)
(ORACLE_HOME =xxx)
(PROGRAM = dg4odbc)
)

3.重启监听服务并检查是否正常
lsnrctl reload
lsnrctl status
tnsping mysqllink

四.Oracle中创建Dblink连通Mysql
create database link mysqllink1 connect to "root" identified by "123456" using 'mysqllink';

五.Oracle与Mysql进行交互
查询
select * from “user”@mysqllink1;
插入
注意要commit
insert into "user"@mysqllink1 values(3,'oracledblink','test');
commit;
Mysql查询

添加成功
记录一下写作业遇到的问题
纠结了很久,代码是用servlet来处理form
其中post传输用户信息时一直乱码,最后查了半天才找见解决方法


- 在jsp页面的<%@ page 位置加上 contentType=”text/html; charset=utf-8″ %>,<meta 的位置也是如此:content=”text/html;charset=utf-8″ />
- 建立一个mysql数据库,字符集采用utf-8,建表也是如此。
- 在getConnection的URL中加上:?useUnicode=true&characterEncoding=UTF-8″,如:url = “jdbc:mysql://localhost:3306/(此处为数据库名称)?useUnicode=true&characterEncoding=UTF-8″,也就是在(数据库名称)的后面 //其中问号不能丢
- 如果你不是在jsp页面里直接处理form,也是和我一样采用servlet来处理form的话,那么在还要增加一个过滤器,这主要是因为采用的是tomcat的web发布器,如果用resin的话,不会有这样的问题。
package UserSystem.filter;
/**
* Created by Ruilin on 2017/12/19.
*/
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class SetCharacterEncodingFilter implements Filter {
class Request extends HttpServletRequestWrapper
{
public Request(HttpServletRequest request) {
super(request);
}
public String toChi(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, "utf-8");
} catch (Exception ex) {
}
return null;
}
private HttpServletRequest getHttpServletRequest()
{
return (HttpServletRequest) super.getRequest();
}
public String getParameter(String name)
{
return
toChi(getHttpServletRequest().getParameter(name));
}
public String[] getParameterValues(String name)
{
String values[] =getHttpServletRequest().getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i] = toChi(values[i]);
}
}
return values;
}
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse
response,FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpreq = (HttpServletRequest) request;
if (httpreq.getMethod().equals("POST")) {
request.setCharacterEncoding("utf-8");
} else {
request = new Request(httpreq);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws
ServletException {
}
}
然后在WEB-INF目录下的web.xml文件,配置下过虑器
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>UserSystem.filter.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
参考:http://blog.sina.com.cn/s/blog_6c5ad3d10100ligv.html
今天上课装mysql遇到点坑,老师是用win告的,所以还得自己解决。
坑就是mac上装mysql会自动给个密码,但我一激动没记下来..wtf
然后就是百度了
第一步:
停止mysql服务
然后
第二步:
终端输入cd /usr/local/mysql/bin/
管理权限 sudo su
禁止mysql验证功能 ./mysqld_safe --skip-grant-tables &
第三步:
./mysql
然后
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
ok

