首先是一直在网上找的JDBCutil工具类,发现能用,但是一直模仿,自己缕清思路,写出一个属于自己的,那才是最好的。
这里连接的是Mysql; 首先我们在项目中配置数据文件; 配置连接信息:
driver-Class=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/purchase-sale-stock?characterEncoding=utf-8 user=root password=1234我们要使用单例模式,{何为单例模式:简单理解就是在程序中,只有一个实例对象};就要保证程序实例对象惟一,所以我们要实现构造方法私有化:
private JdbcUtil(){ }私有化我们就必须在获取对象方法: 这里使用单线程,所以使用锁限制
private static JdbcUtil jdbcUtil; public static JdbcUtil getJdbcUtil(){ if(jdbcUtil==null){ /* * 使用同步锁,防止多线程下对象实现多例化 * */ synchronized(JdbcUtil.class){ if(jdbcUtil==null){ jdbcUtil=new JdbcUtil(); } } } return jdbcUtil; }到这里就完成一半;使用即可:
JdbcUtil jdbcUtil= JdbcUtil.getJdbcUtil();这里可以获取到对象了。但是还没有真正意义上的连接到数据库,这里我们在服务器启动时就加载数据: 要注意这里重写的初始化方法,还有配置属性loadOnStartup = 0
@WebServlet(urlPatterns = "/JdbcUtilServlet",loadOnStartup = 0) public class JdbcUtilServlet extends HttpServlet { @Override public void init() throws ServletException { super.init(); try { System.out.println("开始加载配置文件"); InputStream inputstream = JdbcUtil.class.getResourceAsStream("/jdbc.properties"); Properties properties=new Properties(); properties.load(inputstream); JdbcUtil jdbcUtil=JdbcUtil.getJdbcUtil(); jdbcUtil.initGetConnertion(properties); System.out.println("结束加载配置文件"); }catch (Exception e){ e.printStackTrace(); } }这样就可以初始化数据了; 然后我们在Connection获取: 这里有方法在数据初始化的时候调用的
public Connection getConnertion(){ return con; } public void initGetConnertion(Properties properties){ driverClass=properties.getProperty("driver-Class"); url=properties.getProperty("url"); user=properties.getProperty("user"); password=properties.getProperty("password"); System.out.println(driverClass); System.out.println(url); System.out.println(user); System.out.println(password); initConnertion(); } public void initConnertion(){ try { Class.forName(driverClass); con= DriverManager.getConnection(url,user,password); } catch (Exception e) { e.printStackTrace(); } }写到这里就可以了,一个属于我们自己的单线程的JDBCUtil就出来了。 具体代码如下:
/* * jdbcutil工具 类,单例模式 * */ public class JdbcUtil { private String driverClass; private String url; private String user; private String password; private static JdbcUtil jdbcUtil; private Connection con; /* * 私有化构造方法 * */ private JdbcUtil(){} /* * 获取实例化对象,单例模式 * */ public static JdbcUtil getJdbcUtil(){ if(jdbcUtil==null){ /* * 使用同步锁,防止多线程下对象实现多例化 * */ synchronized(JdbcUtil.class){ if(jdbcUtil==null){ jdbcUtil=new JdbcUtil(); } } } return jdbcUtil; } public Connection getConnertion(){ return con; } public void initGetConnertion(Properties properties){ driverClass=properties.getProperty("driver-Class"); url=properties.getProperty("url"); user=properties.getProperty("user"); password=properties.getProperty("password"); System.out.println(driverClass); System.out.println(url); System.out.println(user); System.out.println(password); initConnertion(); } public void initConnertion(){ try { Class.forName(driverClass); con= DriverManager.getConnection(url,user,password); } catch (Exception e) { e.printStackTrace(); } } }初始化servlet:
@WebServlet(urlPatterns = "/JdbcUtilServlet",loadOnStartup = 0) public class JdbcUtilServlet extends HttpServlet { @Override public void init() throws ServletException { super.init(); try { System.out.println("开始加载配置文件"); InputStream inputstream = JdbcUtil.class.getResourceAsStream("/jdbc.properties"); Properties properties=new Properties(); properties.load(inputstream); JdbcUtil jdbcUtil=JdbcUtil.getJdbcUtil(); jdbcUtil.initGetConnertion(properties); System.out.println("结束加载配置文件"); }catch (Exception e){ e.printStackTrace(); } } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req,resp); } }