在写jdbc的时候,将一些连接属性放在了properties文件中,然后用Properties去读取。
InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(in);
在读取的时候一直显示空指针异常:
C:\Environment\Java\jdk1.8.0\bin\java.exe "-javaagent:D:\IntelliJ IDEA 2019.3.5\lib\idea_rt.jar=63215:D:\IntelliJ IDEA 2019.3.5\bin" -Dfile.encoding=UTF-8 -classpath C:\Environment\Java\jdk1.8.0\jre\lib\charsets.jar;C:\Environment\Java\jdk1.8.0\jre\lib\deploy.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\access-bridge-64.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\cldrdata.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\dnsns.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\jaccess.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\jfxrt.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\localedata.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\nashorn.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\sunec.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\sunjce_provider.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\sunmscapi.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\sunpkcs11.jar;C:\Environment\Java\jdk1.8.0\jre\lib\ext\zipfs.jar;C:\Environment\Java\jdk1.8.0\jre\lib\javaws.jar;C:\Environment\Java\jdk1.8.0\jre\lib\jce.jar;C:\Environment\Java\jdk1.8.0\jre\lib\jfr.jar;C:\Environment\Java\jdk1.8.0\jre\lib\jfxswt.jar;C:\Environment\Java\jdk1.8.0\jre\lib\jsse.jar;C:\Environment\Java\jdk1.8.0\jre\lib\management-agent.jar;C:\Environment\Java\jdk1.8.0\jre\lib\plugin.jar;C:\Environment\Java\jdk1.8.0\jre\lib\resources.jar;C:\Environment\Java\jdk1.8.0\jre\lib\rt.jar;D:\IdeaProjects\JDBC\target\classes;C:\Environment\Mavenrepository\mysql\mysql-connector-java\8.0.21\mysql-connector-java-8.0.21.jar;C:\Environment\Mavenrepository\com\google\protobuf\protobuf-java\3.11.4\protobuf-java-3.11.4.jar com.gsy.lesson02.TestInsert
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at com.gsy.lesson02.utils.JDBCUtils.<clinit>(JDBCUtils.java:19)
at com.gsy.lesson02.TestInsert.main(TestInsert.java:17)
java.sql.SQLException: The url cannot be null
at java.sql.DriverManager.getConnection(DriverManager.java:649)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.gsy.lesson02.utils.JDBCUtils.getConn(JDBCUtils.java:35)
at com.gsy.lesson02.TestInsert.main(TestInsert.java:17)
Process finished with exit code 0
于是我debug了一下
发现获取连接的时候properties中的属性没有读取到,所以报了空指针异常,那么就是properties路径的问题导致文件没有被读取到。
仔细检查了一下是放在src目录下的没问题,于是我想可能是class.getClassLoader().getResourceAsStream(“db.properties”)路径的问题,于是搜了一下发现path是默认从class path根目录下获取,搜了一下发现class path的根目录就是src没有问题,那问题到底出在了哪里?
**答案:**本项目是使用maven来编写的,在maven中,classpath的根目录其实是resources文件夹,将properties文件移到resources文件夹就可以解决问题了!!