标题:使用JDBC获取数据库连接,在使用InputStream获取对应的Properties文件的数据 ...
取消只看楼主
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
结帖率:100%
已结贴  问题点数:20 回复次数:6 
使用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
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 2楼 林月儿
版主,这个修改了password依然报空指针异常,不知道问题点具体出在哪里(ー_ー)!!
2019-03-27 11:13
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 4楼 林月儿

就是通过properties加载驱动器这个步骤报错的
,应该是获取InputStream不成功,所以使用in这个对象就报了空指针异常
2019-03-27 15:20
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 7楼 rind
是的,是放在同一个目录下
2019-03-27 16:35
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 10楼 rind
检查了实际的properties文件,是扩展名对的,但是还是不能获取到流对象
2019-03-28 10:04
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 9楼 rind
非常感谢各位论坛的小伙伴,我自己的原因导致的连接错误,我的mysql密码是7923,实际的写成了1230,才导致一直连不上,各位的方法都是有用的,是我自己的问题
2019-04-01 21:33
mudi
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2018-12-19
得分:0 
回复 10楼 mudi
是我数据库密码写错了,导致一直连不上,感谢各位小伙伴
2019-04-01 21:35



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




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

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