10.java 获取数据库连接

jdbc获取数据库连接有2种方式,一种是通过程序自己设置用户名密码、加载驱动来获取连接,另一种是通过java的JNDI的方式来获取数据库连接。

1.通过程序连接

package com.bsx.test.db;

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

/**
 * @author ztd
 * @description 数据库连接工具类
 * @date 2019/7/8 下午5:09
 */
public class ConnManager {
    public static String user;
    public static String password;
    public static String url;
    public static Connection conn;

    /**
     * @description 连接mysql
     * @author ztd
     * @date 2019/7/8 下午5:06
     */
    public static Connection initMysql() {
        try{
            //jdbc:数据库类型://主机IP:端口/数据库名?characterEncoding=编码
            user="root";
            password = "12345678";
            url="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
        }catch(Exception e){
            System.out.println("数据库连接异常!");
            e.printStackTrace();
        }
        return conn;
    }

    /**
     * @description 连接 oracle
     * @author ztd
     * @date 2019/7/8 下午5:07
     */
    public Connection initOracle() {
        //jdbc:数据库名:连接的方式:@主机Ip:端口号:数据库名称
        try{
            //建立连接
            url = "jdbc:oracle:thin:@127.0.0.1:1521:news";
            user="root";
            password = "12345678";
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(url, user, password);
        }catch(Exception e){
            System.out.println("数据库连接异常!");
            e.printStackTrace();
        }
        return conn;
    }

}

2.通过容器连接

1.设置连接信息

在配置文件conf/context.xml中配置连接内容

<!--mysql连接信息-->
<Context reloadable =“true”>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name=“jdbc/mysqlds” auth=“Container”
type=“javax.sql.DataSource”
maxActive=“100” maxIdle=“30” maxWait=“10000”
driverClassName=“org.gjt.mm.mysql.Driver”
url=“jdbc:mysql://192.168.2.19/news?user=user&password=niit&characterEncoding=utf-8”/>
</Context>
<!--oracle连接信息-->
<Context reloadable=“true”>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name=“jdbc/oracleds” auth=“Container”
type=“javax.sql.DataSource”
maxActive=“100” maxIdle=“30” maxWait=“10000”
username=“scott” password=“tiger”
driverClassName=“oracle.jdbc.driver.OracleDriver”
url=“jdbc:oracle:thin:@localhost:1521:orcle”/>
</Context> 

2.配置 web.xml 文件

<resource-ref>
  <!--配置resourceId信息-->
  	<res-ref-name>jdbc/mysqlds</res-ref-name>
  	<res-type>javax.sql.DataSource</res-type>
  	<res-auth>Container</res-auth>
</resource-ref>

3.获取连接

package com.bsx.test.db;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;

/**
 * @author ztd
 * @description 数据库连接工具类
 * @date 2019/7/8 下午5:09
 */
public class ConnManagerByJNDI {
    public static Connection conn;

    /**
     * @description 通过JNDI方式查找连接
     * @author ztd
     * @date 2019/7/8 下午5:23
     */
    public static Connection getDataSource(){
        try {
            Context context = new InitialContext();
            // jndi查找格式:java:/comp/env/resourceId
            // 获取oracle数据源
						// DataSource ds = (DataSource) context.lookup("java:/comp/env/jdbc/oracleds");
            // 获取mysql数据源
            DataSource ds = (DataSource) context.lookup("java:/comp/env/jdbc/mysqlds");
            conn = ds.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

}

3.获取连接常见问题:

有时候我们在 url 中配置了characterEncoding=utf-8,而且数据库存储的格式也是utf-8,但是查询结果依然会出现乱码。这个时候你需要注意一下自己的驱动url的写法是不是有如下问题:

DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/shiro?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;");
ds.setUsername("root");
ds.setPassword("123456");

这种写法是有问题的,它并不能被 mysql 正确的解析,因为&amp是在 xml 配置文件中的写法,它在被解析成文本之后是 &,如果你在java 程序里面写的时候直接这么写的话不能被正确解析,也就是传输过去的字符并不是用 utf8 进行编码的。

正确的写法如下:

DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/shiro?autoReconnect=true&useUnicode=true&characterEncoding=utf-8");
ds.setUsername("root");
ds.setPassword("123456");

4.url配置在xml中写法:

1.xml中写法

jdbc:mysql://192.168.87.104:3306/cfhd?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;

2.java程序中写法:

jdbc:mysql://192.168.87.104:3306/cfhd?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值