【JDBC】JdbcUtil类加载器加载配置文件,statement.setDate、resultSet.getString("id")、单例工厂设计解耦

本文介绍了一种基于JDBC的数据库操作实现方法,并通过DAO模式进行了解耦设计。具体包括利用类加载器加载配置文件、数据库连接池的初始化、执行SQL语句以及资源释放等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、JDBCUtil.java

使用类加载器加载配置文件,赋给静态字符串变量

dbcfg.properties

className=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/user
username=root
password=root

JdbcUtil.java

package com.xiaozhi.utils;

import java.io.IOException;
import java.io.InputStream;
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 JdbcUtil
{

	private static String className;
	private static String url;
	private static String username;
	private static String password;
	private static String connection;

	static
	{
		try
		{
			InputStream inputStream = JdbcUtil.class.getClassLoader().getResourceAsStream("dbcfg.properties");
			Properties properties = new Properties();
			properties.load(inputStream);
			className = properties.getProperty("className");
			url = properties.getProperty("url");
			username = properties.getProperty("username");
			password = properties.getProperty("password");
			connection = properties.getProperty("connection");
			Class.forName(className);
		} catch (Exception e)
		{
			throw new RuntimeException(e);
		}
	}
	
	public static Connection getConnection() throws Exception{
		return DriverManager.getConnection(url, username, password);
	}

	public static void release(Connection connection,Statement statement,ResultSet resultSet){
		try
		{
			if(resultSet!=null){
				resultSet.close();
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
		
		try
		{
			if(statement!=null){
				statement.close();
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
		
		try
		{
			if(connection!=null){
				connection.close();
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
		
		
	}
}


2、UserDaoMySqlImpl

1)、statement.setDate(4, new Date(user.getBirthday().getTime()));

第二个参数是一个java.sql.Date类型,需要将 java.util.Date 转化成  java.sql.Date

2)、resultSet.getString("id")

数据库里是int类型,也可以用getString取

3)、execute(String sql)

用于向数据库发送任意sql语句,例如创建数据库语句,增加列,更改列名。

package com.xiaozhi.dao.impl;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.xiaozhi.dao.UserDao;
import com.xiaozhi.domain.User;
import com.xiaozhi.utils.JdbcUtil;

public class UserDaoMySqlImple implements UserDao
{

	@Override
	public boolean find(String username)
	{
		Connection connection=null;
		PreparedStatement statement=null;
		ResultSet resultSet=null;
		try
		{
			connection=JdbcUtil.getConnction();
			String sql="select * from user where username=?";
			statement=connection.prepareStatement(sql);
			statement.setString(1,username);
			resultSet=statement.executeQuery();
			if(resultSet.next()){
				return true;
			}
		} catch (Exception e)
		{
			e.printStackTrace();
		}finally{
			JdbcUtil.release(connection, statement, resultSet);
		}
		return false;
	}

	@Override
	public void add(User user)
	{
		Connection connection=null;
		PreparedStatement statement=null;
		ResultSet resultSet=null;
		try
		{
			connection=JdbcUtil.getConnction();
			String sql="insert into user(username,password,email,birthday,nickname)values(?,?,?,?,?)";
			statement=connection.prepareStatement(sql);
			statement.setString(1,user.getUsername());
			statement.setString(2, user.getPassword());
			statement.setString(3, user.getEmail());
			statement.setDate(4, new Date(user.getBirthday().getTime()));//这里接受的是一个java.sql.Date类型:将 java.util.Date 转化成  java.sql.Date
			statement.setString(5,user.getNickname());
			
			statement.executeUpdate();
			
		} catch (Exception e)
		{
			e.printStackTrace();
		}finally{
			JdbcUtil.release(connection, statement, resultSet);
		}
	}

	@Override
	public User find(String username, String password)
	{
		Connection connection=null;
		PreparedStatement statement=null;
		ResultSet resultSet=null;
		try
		{
			connection=JdbcUtil.getConnction();
			String sql="select * from user where username=? and password=?";
			statement=connection.prepareStatement(sql);
			statement.setString(1,username);
			statement.setString(2,password);
			resultSet=statement.executeQuery();
			if(resultSet.next()){
				User user=new User();
				user.setId(resultSet.getString("id"));//数据库里是int类型,可以用getString取
				user.setUsername(resultSet.getString("username"));
				user.setPassword(resultSet.getString("password"));
				user.setEmail(resultSet.getString("email"));
				user.setBirthday(resultSet.getDate("birthday"));
				user.setNickname(resultSet.getString("nickname"));
				return user;
			}
		} catch (Exception e)
		{
			e.printStackTrace();
		}finally{
			JdbcUtil.release(connection, statement, resultSet);
		}
		return null;
	}

}

表头


表尾

3、解耦:使用类加载器

obj.properties

className=com.xiaozhi.dao.impl.UserDaoMySqlImple

ObjectFactory.java

package com.xiaozhi.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.xiaozhi.dao.UserDao;

public class ObjectFactory
{

	private static String className;
	static{
		try
		{
			InputStream inputStream= ObjectFactory.class.getClassLoader().getResourceAsStream("obj.properties");
			Properties properties=new Properties();
			properties.load(inputStream);
			className =properties.getProperty("className");
		} catch (IOException e)
		{
			e.printStackTrace();
		}
		
	}
	private static ObjectFactory instatnce=new ObjectFactory();
	private ObjectFactory(){}
	public static ObjectFactory getInstance(){
		return instatnce;
	}
	public UserDao getUserDaoImpl(){
		try
		{
			return (UserDao) Class.forName(className).newInstance();
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值