jdbc读取properties文件 工厂类动态加载接口实现类

jdbc读取properties文件:

自己写的一个读取properties文件的类  大同小异,都是J2SE API提供的Properties类来实现:

 

	/******************
	 * 读取properties文件
	 * @return
	 */
	public static Properties getProperties(){
		Properties p = new Properties();
		try {
			String baseClassDir = DbHandler.class.getProtectionDomain().getCodeSource()    
	        .getLocation().getPath();    
			 if (baseClassDir.indexOf("WEB-INF") > 0) {    
				 baseClassDir = baseClassDir.substring(0, baseClassDir.indexOf("WEB-INF") + 8);    
	         } 
			baseClassDir = URLDecoder.decode(baseClassDir, "UTF-8");
			System.out.println(baseClassDir);
			p.load(new FileInputStream(baseClassDir+"mysql.properties"));
			return p;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	
	/*******************
	 * 连接数据库
	 * @return
	 * @throws IllegalAccessException 
	 * @throws Exception 
	 */
	public static Connection getConn() throws Exception{
		 Connection conn = null;// JDBC connection
		 Properties props;
		try {
			 props = getProperties(); 
			 String driver = props.getProperty("driver"); 
             		 String url = props.getProperty("url"); 
             		 String user = props.getProperty("user"); 
             		 String password = props.getProperty("password"); 
			 Class.forName(driver).newInstance();
			 DriverManager.setLoginTimeout(5);
			 conn = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		 return conn;
	}
	
	
	/**
	 * 关闭数据库连接
	 * 
	 * @param conn
	 * @param pst
	 * @param rs
	 */
	public static void clear(Connection conn, Statement st,
			ResultSet rs) {
		try {
			if (rs != null) {
				rs.close();
				rs = null;
			}
			if (st != null) {
				st.close();
				st = null;
			}
			if (conn != null) {
				conn.close();
				conn = null;
			}
		} catch (SQLException e) {
			throw new RuntimeException("数据库连接关闭失败!", e);
		}
	}

基本都是使用这类方法来连接数据库,我用的是MySql数据库,大家在getConn()之后别忘了close。

JDBC的方法很多 也可以扩展来实现加入参数等。

		String sql = "insert into t_user(user_id, user_name, password, contact_tel, email, create_date) "
				+ "values(?, ?, ?, ?, ?, ?)";
		PreparedStatement pstmt = null;
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, user.getUserId());
			pstmt.setString(2, user.getUserName());
			pstmt.setString(3, user.getPassword());
			pstmt.setString(4, user.getContactTel());
			pstmt.setString(5, user.getEmail());
			pstmt.setTimestamp(6, new Timestamp(user.getCreateDate().getTime()));
			pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DB.closeStmt(pstmt);
		}

 

这是JDBC带参数的常规做法: 也可以进行扩展: 例如:

 

		public Object[][] getDataBySql(String sql, Object[] params) {
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		try {
			conn = getConnection();  
			pst = conn.prepareStatement(CommonUtil.setEnCodingISO(sql));
			if (params != null) {
				pst = initParams(pst, params);
			}
			rs = pst.executeQuery();
			return paraseResultSet(rs);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new IngtaUserException(-180005, "数据库检索失败:" + e.getMessage(),e);
		} catch (Exception e) {
			e.printStackTrace();
			throw new IngtaUserException(-180002, e.getMessage(), e);
		} finally {
			clear(conn, pst, rs);
		}

这样就很好做了。 比如你要带的参数,可以申明一个Object数组,把参数依次加进去,然后代入这个方法。

如何得到值呢,比如我查询了2个字段。定义一个Object[][] result 来接收方法的return值, 然后第一个就是result[0][0] , 第二个result[0][1],就这样, 很简单

 

 

工厂类动态加载接口实现类

Factory了解不多,自从有了Spring配置,基本不常用了,如果是struts的MVC,又要分开业务层,则我们要在Action里面去调用业务逻辑层,而DAO层为了方便开发,一般通过实现接口来进行操作,便于开发。

我们在Action里面,首先调用接口方法,然后才会去执行实现接口的方法。而如果直接private Dao接口 ,首先要实例化dao接口,我们又不能直接Dao dao = new DaoImpl()

这样就违反了我们的业务隔开的原则,影响开发效率。

我们就可以用工厂类来加载接口实现类了

单例:

	private static UserDaoFactory instance;
	
	private UserDao userDao;
	
	private UserDaoFactory() {
			//
		userDao = new UserDaoImpl();
	}
	
	public static synchronized UserDaoFactory getInstance() {
		if (instance == null) {
			instance = new UserDaoFactory();
		}
		return instance;
	}
	
	/**
	 * 创建UserDao对象
	 * @return UserDao UserDao接口
	 */
	public UserDao createUserDao() {
		return userDao;
	}


这样我们就直接可以得到了,然后再Action业务逻辑时,daofactory.getInstance().createDao()就可以了。




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值