实现的功能:window下连接linux的mysql数据库
准备的环境:
windows:1.已经编写好的连接数据库的java测试程序:
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* ResultSet结果集的基本用法(executeQuery()将会返回ResultSet结果集)
* @author zanzan
*
*/
public class Demo2 {
public static void main(String[] args){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
long start = System.currentTimeMillis();
conn = DriverManager.getConnection("jdbc:mysql://与linux的ip映射的域名:映射的端口号/数据库名称", "mysql数据库登陆名", "密码");
System.out.println(conn);
//进行数据库的查询
String sql = "select id,name from test where id>?";//?表示占位符
//建立PraparedStatemen对象进行SQL静态语句的操作,同时返回PraparedStatememnt对象,导入PraparedStatement包
ps = conn.prepareStatement(sql);
ps.setObject(1, 0);
rs = ps.executeQuery();
//将结果集进行遍历
while(rs.next()){
System.out.println(rs.getInt(1)+"---"+rs.getString(2));
}
long end = System.currentTimeMillis();
System.out.println("建立与数据库的连接所需要的时间"+(end-start)+"ms");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭顺序是按照先开后关的原则
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
2.由于是linux是在内网,我使用花生壳将内网的ip映射到域名上,外网通过访问域名和对应映射的端口号
3.navicat for mysql测试linux数据库的连接是否成功
linux:
1.vmware下安装centos6.4
2.通目前下载的主流Linux系统版本基本上都集成了mysql数据库在里面
rpm -qa | grep mysql // 这个命令就会查看该操作系统上是否已经安装了mysql数据库
rpm -e --nodeps mysql // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
yum list | grep mysql //查看数据库
yum install -y mysql-server mysql mysql-deve//通过yum方式安装mysql数据
通过yum安装数据库可以省去很多麻烦
3.用ifconfig得到linux的ip
[root@localhost 桌面]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:88:CD:97
inet addr:192.168.0.116 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe88:cd97/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4281 errors:0 dropped:0 overruns:0 frame:0
TX packets:2053 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3985317 (3.8 MiB) TX bytes:160402 (156.6 KiB)
用navicat测试:
1出现 2003-Can’t connect to MySQL on ’192.168.1.2’(10061);
原因:MySQL不准许远程连接。
解决方案:
1)在服务端MySQL文件夹下找到my.ini文件。修改bind-address=127.0.0.1 为 bind-address=0.0.0.0 ;(在MySQL 5的my.ini中未发现此项,则试着添加)
2)重新启动MySQL服务。(service mysqld restart)
2.出现“1045-Access denied for user root@IT(using password:NO)”
原因:没有给远程登录用户添加所有机器都能访问的权限
解决方案:
添加命令如下:
1)grant all on *.* to 用户名@"%" identified by "密码";
2)flush privileges.
其中:
*.*表示赋予用户操作服务器上所有数据库所有表的权限;
用户名可以是localhost,这里我填写root;
’%'表示从任何地址连接,这里我填写映射的域名.
下面是连接结果:
mysql创建的测试表:
eclipse下运行java测试程序:
通过以上的方法,实现了在window下访问linux的mysql数据库,连接的时间比较长