标题:使用JDBC获取数据库连接,在使用InputStream获取对应的Properties文件的数据 ...
只看楼主
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
结帖率:100%
已结贴  问题点数:20 回复次数:17 
使用JDBC获取数据库连接,在使用InputStream获取对应的Properties文件的数据库连接时,获取不成功,导致程序报空指针异常
以下是客户程序:
程序代码:
import import import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;

import org.junit.Test;
public class JDBCTest1 {

    /**
     * ResultSet:结果集,封装了使用JDBC进行查询的结果
     * 1、调用Statement对象的ExecuteQuery(sql)可以的到结果集
     * 2、ResultSet 返回的实际是一张数据比哦啊,有一个指针指向数据表的第一行的前面
     *   可以调用next()方法检测下一行是否有效,若有效则该方法返回true,且指针下移,
     *   相当于Iterator对象的hasNext()和Next()方法的结合体
     *  

     *3、当指针对位到一行时,可以通过调用getXxx(index)或者getXxx(conlumnname)
     *  获取每一列的遏制,例如getInt(1),getString("name")
     * 

     *4、ResultSet也需要进行关闭
     */
    @Test
    public void testResultSet() {
       //获取id=4的customer数据表的记录,并打印
        Connection conn =null;
        Statement statement =null;
        ResultSet rs =null;
        try {
            //1、获取Connection
            conn = JDBCTools.getConnection();
            //2、获取Statement
            statement = conn.createStatement();
            //3、准备Sql
            String sql = "SELECT id,NAME,email,birth \r\n" +

                    "FROM customers WHERE id=1;";
           

            //4、执行查询,得到ResultSet
            rs = statement.executeQuery(sql);
           

            //5、处理ResultSet
            if(rs.next()) {
                int id =rs.getInt(1);
                String name =rs.getString("name");
                String email =rs.getString(3);
                Date birth = rs.getDate(4);
               

                System.out.println(id);
                System.out.println(name);
                System.out.println(email);
                System.out.println(birth);
            }
            //6、关闭数据库资源
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            JDBCTools.releaseResouce(rs, statement, conn);
        }
    }
    }
以下是工具类程序:
程序代码:
import import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCTools {
   

    /**
     * 关闭statement,connection
     *

     * @param statement
     * @param conn
     */
    public static void releaseResouce (ResultSet rs,
            Statement statement,Connection conn) {
        if(rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(statement!=null) {
            try {
                //5、关闭statement对象
                statement.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
            if(conn != null) {
            try {
                //2、关闭连接
                conn.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
    }
    /**
     * 操作JDBC的工具类,其中封装了一些工具方法
     *

     * Version 1
     *

     * 1.获取连接 的方法
     * 通过读取配置文件从数据库获取一个连接
     * @return
     * @throws Exception
     */
    public static Connection getConnection() throws Exception {
        //1、准备连接数据库的4个字符串。
        //1)、创建Properties对象
        Properties properties = new Properties();
       

        //2)、获取jdbc.properties对应的输入流
        InputStream in =

                JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");
       

        //3)、加载2)对应的输入流
        properties.load(in);
       

        //4)、具体确定user,password等4个字符串
        String user = properties.getProperty("root");
        String password = properties.getProperty("1230");
        String jdbcUrl = properties.getProperty("jdbcUrl");
        String driver = properties.getProperty("driver");
       

        //2、加载数据库驱动程序(对应的Driver实现类中有注册驱动的静态代码块
        Class.forName(driver);
       

        //3、通过DriverManager的getConnection()方法获取数据库连接
        return  DriverManager.getConnection(jdbcUrl, user, password);
    }
}
以下是jdbc.Properties文件的内容
driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/atguigu
user=root
password=1230

搜索更多相关主题的帖子: JDBC 获取 import java sql 
2019-03-26 22:55
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:10 
程序代码:
        //4)、具体确定user,password等4个字符串
        String user = properties.getProperty("root");
        String password = properties.getProperty("1230");
        String jdbcUrl = properties.getProperty("jdbcUrl");
        String driver = properties.getProperty("driver");



        //4)、具体确定user,password等4个字符串
        String user = properties.getProperty("root");
        String password = properties.getProperty("password");
        String jdbcUrl = properties.getProperty("jdbcUrl");
        String driver = properties.getProperty("driver");

剑栈风樯各苦辛,别时冰雪到时春
2019-03-27 08:55
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 2楼 林月儿
版主,这个修改了password依然报空指针异常,不知道问题点具体出在哪里(ー_ー)!!
2019-03-27 11:13
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
哪一行报的错

剑栈风樯各苦辛,别时冰雪到时春
2019-03-27 11:30
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 4楼 林月儿

就是通过properties加载驱动器这个步骤报错的
,应该是获取InputStream不成功,所以使用in这个对象就报了空指针异常
2019-03-27 15:20
rind
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:49
专家分:368
注 册:2018-3-8
得分:10 
回复 6楼 mudi
JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");
使用这种加载器定位资源,
相对路径是相对于JDBCTools的类文件的路径。
需要资源文件和类JDBCTools的类文件在同一目录下。





仅供参考,欢迎指正
2019-03-27 16:23
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 7楼 rind
是的,是放在同一个目录下
2019-03-27 16:35
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
得分:0 
能把错误贴出来么

假如人生没有梦想,和咸鱼有什么区别!
2019-03-27 21:04
rind
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:49
专家分:368
注 册:2018-3-8
得分:0 
回复 8楼 mudi
在什么环境编的?
不会是windows下没开显示扩展名,然后实际上是个txt文档?
linux下没有读权限?

检查一下实际文件,看看名称(包括扩展名)对不对,文件有没有足够权限。


[此贴子已经被作者于2019-3-28 08:26编辑过]


仅供参考,欢迎指正
2019-03-28 08:22
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 10楼 rind
检查了实际的properties文件,是扩展名对的,但是还是不能获取到流对象
2019-03-28 10:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493816-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.493493 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved