美文网首页Bug记录
javax.naming.NoInitialContextExc

javax.naming.NoInitialContextExc

作者: 花伤情犹在 | 来源:发表于2021-06-29 10:18 被阅读0次

    在用dbcp配置数据源时,写了一个测试类,在测试类中调用了dbcp获得数据库连接报错:javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or in an application resource file: java.naming.factory.initial

    Test代码:

    package test;
    
    import org.junit.Test;
    import tools.DataSourceUtil;
    
    import java.sql.Connection;
    
    public class test {
        @Test
        public void test(){
            Connection connection = DataSourceUtil.getConnection();
            System.out.println(connection);
        }
    }
    

    数据库源代码:

    package tools;
    
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    
    public class DataSourceUtil {
    
        // 获取连接
        public static Connection getConnection() {
            // ctrl + alt + t ---选6
            // 实例化初始上下文的对象
            Connection connection = null;
            try {
                InitialContext initialContext = new InitialContext();
                // 获取配置中的数据,得到object对象
                Object lookup = initialContext.lookup("java:comp/env/jdbc/easybuy");
                // 拆箱强转得到连接池
                DataSource ds = (DataSource) lookup;
                // 让连接池给我一个连接
                connection = ds.getConnection();
            } catch (NamingException e) {
                e.printStackTrace();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            // 返回连接
            return connection;
        }
    
        // 关闭连接
        public static void closeConnection(Connection connection) {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
    

    Bug图:


    报错图片.png

    原因:

    在用DBCP连接数据库时用main函数测试时总报错,
    InitialContext 是要在web应用服务器的上下文里才有的。
    而配置文件在web目录下,很明显要initialContext要想访问到配置文件必须运行在web服务器上才可以连接到数据库拿到连接对象


    image.png

    不能用main函数直接测试,只能放到tomcat或者servlet、jsp显示


    jsp测试.png

    运行结果:


    运行结果.png

    成功拿到连接对象!

    相关文章

      网友评论

        本文标题:javax.naming.NoInitialContextExc

        本文链接:https://www.haomeiwen.com/subject/vawqultx.html