这样的问题是怎么产生的呢?其实啊也不难,来吧,跟我走一遍~

​​​​​​

目录

前言

二、使用步骤

1、基本的JavaWeb项目的结构

1.1 创建一个JavaWeb项目

1.2 配置文件的配置

1.3  !!!重点来了!!!

2、DBUtil的代码内容:

3、测试

总结


前言

在JavaWeb开发中DBUtil的书写总会存在很多坑,一不小心就会让我们代码跑不通,明明跟案例一模一样,为什么他行我不行呢?今天遇到一个数据源读取不到的情况,拿出来和大家分享一下,希望能对遇到该类问题朋友提供一点点点帮助,话不多说!开整


一、druid是什么?

Druid是一个为大型数据集上的高性能切片和OLAP分析而设计的数据存储,是阿里巴巴旗下的开源的操作数据库的一个数据库连接池,它高性能且简单的操作使它在众多操作数据库的jar文件中占下了一席之地,那么我们该怎么在JavaWeb的项目中正确引用他呢?怎么样避免数据源读取不到的问题呢?

二、使用步骤

1、基本的JavaWeb项目的结构

1.1 创建一个JavaWeb项目

1.2 配置文件的配置

在创建好JavaWeb项目之后,分别在创建WEB-INF中创建一个lib文件夹存放我们的jar包,和一个config文件夹存放我们的properties配置文件(这两个文件夹一定是放在WEB-INF文件夹下面,不然会出现NullPointException异常无法读取到的情况)

1.3  !!!重点来了!!!

书写druid.properties里面的内容时,不需要分号结尾,千万不要加' ',也不要有其它多余的空格!! 将下面的内容写入文件中

2、DBUtil的代码内容:

package com.olio.Demo.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;public class DBUtil {//数据源static DataSource dataSource;static {//加载配置文件Properties properties = new Properties();InputStream resourceAsStream = DBUtil.class.getClassLoader().getResourceAsStream("druid.properties");try {properties.load(resourceAsStream);//根据配置文件获取一个数据源dataSource = DruidDataSourceFactory.createDataSource(properties);//通过数据源获取连接} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 使用连接池去做*      ① 导入jar包*      ② 提供配置文件【就是需要连接的数据库以及用户名和密码】*      ③ 得到一个数据源DataSource对象*      ④ 获取连接*/public static Connection getConnection(){try {return dataSource.getConnection();} catch (SQLException throwables) {throwables.printStackTrace();}return null;}/***将所有数据表的操作,抽离成一个公用的方法* @param sql  sql语句* @param params  sql语句对应的参数* @return*/public static boolean executeDML(String sql,Object...params){try{//获取连接Connection connection = getConnection();//获取预处理的对象PreparedStatement ps = connection.prepareStatement(sql);//设置参数if(null != params){for (int i = 0; i < params.length; i++) {//1.给占位符设置参数   2.获取参数ps.setObject(i+1,params[i]);}}int i = ps.executeUpdate();return i > 0;}catch (SQLException sqlException){sqlException.printStackTrace();}return false;}/***通用的查询;查询一个* @param sql  查询语句* @param cls  实体类的字节码对象* @param params  查询语句里面的占位符* @param <T>  实体类类型泛型* @return  就是我们查询到的数据集合*/public static <T> T executeDQLGetOne(String sql, Class<T> cls , Object...params){List<T> ts = executeDQL(sql,cls,params);if (ts != null && ts.size() > 0){return ts.get(0);//直接获取第一个结果}return null;}/***通用的查询;需要将我们的数据表信息,封装到List里面进行返回* @param sql  查询语句* @param cls  实体类的字节码对象* @param params  查询语句里面的占位符* @param <T>  实体类类型泛型* @return  就是我们查询到的数据集合*/public  static <T> List<T> executeDQL(String sql, Class<T> cls , Object...params){try{Connection connection = getConnection();//获取连接//预处理sqlPreparedStatement preparedStatement = connection.prepareStatement(sql);//设置参数if (null != params){for (int i = 0; i < params.length ; i++) {preparedStatement.setObject(i+1,params[i]);}}//执行查询  得到结果集ResultSet resultSet = preparedStatement.executeQuery();//获取元素据(我们的列名)ResultSetMetaData metaData = resultSet.getMetaData();//列的总数int columnCount = metaData.getColumnCount();//用来保存我们所有的表数据List<T> list = new ArrayList<T>();T t;//用来保存我们一条数据//遍历结果集while(resultSet.next()){//每一行记录的遍历过程中t = cls.newInstance();//根据字节码文件,构建一个实体类的对象//获取所有的数据for (int i = 0; i <= columnCount ; i++) {//你的查询语句有时候有别名String columnLabel = metaData.getColumnLabel(i);//根据列名获取我们的记录Object object = resultSet.getObject(columnLabel);//需要将拿到的这一列的记录,放到t对象指定的属性里面;//需要拿到这个t对象的属性,然后赋值;//解决方案2:如果Object是NULL没有必要设置了if (null != object){try{Field declaredField = cls.getDeclaredField(columnLabel);;declaredField.setAccessible(true);declaredField.set(t,object);}catch (NoSuchFieldException e){//代表我们当前这个实体类里面,没有这个属性e.printStackTrace();}}}//需要将t对象保存到listlist.add(t);}}catch (SQLException sqlException){sqlException.printStackTrace();}catch (IllegalAccessException e){e.printStackTrace();}catch (InstantiationException e){e.printStackTrace();}return null;}
}

(以上还包含了DML和DQL的方法),可以忽略或自己做其它的修改

3、测试

写一个Test类测试一下能不能成功获取到数据,或者获取到返回的结果,我这里测试的是登录,我把带码也一并发下,仅供借鉴

 返回结果:


总结

以上是我在做JavaWeb项目中出现的无法读取数据源读取的数据源为null的问题,就这个问题本人也是找了很久,最后发现是在druid.properties书写上多了两个分号,导致它读取值为null。问题很小,自己要找也非常花时间,所以也发出来希望对有类似问题的朋友提供一些参考和帮助,以上就是我的全部内容啦,我也会不定期的分享一下自己在项目上遇到的问题和解决方法,希望大家一起进步!

JavaWeb开发中出现DataSource读取不到怎么办呢?(详细,适合初入门的程序员)相关推荐

  1. javaweb开发中的那些坑

    最近电脑有点问题,没办法就重装系统了,花了一个晚上重装IDE.,配置环境,好不容易把eclipse的环境弄好,加载之前的项目时却又到各种问题,一怒之下,写一篇记录下在javaweb开发中遇到的各种坑 ...

  2. java面试(二十六)--(1)J2EE中常用名词(2)讲一下redis的主从复制怎么做的?(3)请谈谈你对Javaweb开发中的监听器的理解?(4)按之字形顺序打印二叉树(5)内部类大全

    1.J2EE中常用名词 web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使 JSP,SERVLET直接跟容器中的环境变量接**互,不必关注其它系统问题.主要有WEB服务器来 ...

  3. java泛型dao,泛型DAO模式在JavaWeb开发中的应用_孟晨.pdf

    泛型DAO模式在JavaWeb开发中的应用_孟晨 29 1 Vol. 29 No. 1 第 卷第 期 计算机应用与软件 20 12 1 Computer Applications and Softwa ...

  4. javaWEB开发中get方式请求的乱码问题解决

    为什么80%的码农都做不了架构师?>>>    我们在日常的开发中难免会遇到一些乱码问题的解决 这个能解决一般get方式乱码问题 public String getStr(Strin ...

  5. javaWeb开发中为什么要使用框架

    ps:对于框架,刚开始接触编程,网络上查询资料,框架肯定是出现得比较频繁的词,为什么使用框架?当然是因为能够方便我们开发啦,那没有框架之前呢?不用框架该怎么实现呢?个人觉得明白这点对以后使用框架有很大 ...

  6. JavaWeb开发中,servlet的url-pattern的映射规则

    原文出处:http://www.cnblogs.com/mailingfeng/archive/2012/04/05/2432687.html Servlet和filter是J2EE开发中常用的技术, ...

  7. android不能在主线程,安卓开发:主线程真的不能做UI操作吗?这一点很多程序员都没想到...

    只要参与过安卓项目开发一两年的朋友们应该清楚,为了避免UI渲染出现异常安卓框架限制UI操作只能在主线程中进行,如果贸然在子线程做了UI操作结果会怎样?我们随便写下了如下测试代码. 不出意外的话,代码执 ...

  8. 初级开发:我还在Android路上披荆斩棘,转眼就被大厂的程序员凡尔赛了

    前言 现在对于大多数应届生来说,现在正是紧张的时候,不仅需要忙着毕业论文和答辩的事情,还需要忙碌校招面试的事情.对于IT专业的学生来说,现在就要面对各大IT企业面试官的考验,很多人会成为从0开始的An ...

  9. 初级开发:我还在Android路上披荆斩棘,转眼就被大厂的程序员凡尔赛了(1)

    我相信每个应届生都想能得到一个在大厂实习的机会,毕竟这会让之后的简历更加漂亮,也对于之后找工作会方便许多,进入大厂工作意味着平台好,薪资高.晋升空间大,学到的东西多,于是成为人人都想进的理想地方,那在 ...

最新文章

  1. PreparedStatement
  2. chromium android分析,Chromium Android工程迁移编译过程
  3. 双11大幕拉开,菜鸟智能机器人也将测试运行
  4. LINUX下查看CPU、主板、硬盘、内存,网卡信息
  5. vb中如何才能有手型的光标?
  6. 分布式存储(姚文辉)
  7. Effective C++学习第二天
  8. leetcode28. 实现 strStr()
  9. 基于Matlab的跨孔CT胖射线追踪算法(五)
  10. 使用valgrind检查cache命中率
  11. ENVI学习总结(一)——自定义坐标系
  12. 达梦DEM部署、agent配置与监控使用
  13. 10分钟明白为什么要使用微服务
  14. JSF 的el表达式语言
  15. 详细指南!手把手教你上手Tableau软件!
  16. 梅西明明有高薪为什么还努力踢球?
  17. mysql查询名字相同数据排列出来_mysql 的sql语句来查找重复数据,并让其都显示出来?...
  18. 读书笔记_《统计陷阱》达莱尔.哈夫
  19. 科技PRO实力测评:高端按摩椅市场综合PK,究竟谁才配得上机皇?
  20. Date int java_java.util.Calendar.set(int year, int month, int date)方法实例

热门文章

  1. 前端每日实战:119# 视频演示如何用纯 CSS 创作一个接扎啤的动画(内含2个视频)...
  2. 电脑ip地址设置_网件netgear无线路由器设置教程【图文详解】
  3. php 用回车符间隔成数组,PHP 将逗号、空格、回车分隔的字符串转换为数组的函数...
  4. unity打包Android的APK
  5. Unity1.16 坐标系分类/监控面板中的Terrian/导入素材包
  6. 在Windows环境下使用Anaconda安装GDAL所遇到的问题
  7. SuperMap云许可模块介绍
  8. go-kit微服务:一个简单的API网关
  9. goolge安装插件
  10. android 动态创建View