前言:
首先是一直在网上找的JDBCutil工具类,发现能用,但是一直模仿,自己缕清思路,写出一个属于自己的,那才是最好的。
编写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);
}
}