`
kkllmey
  • 浏览: 103557 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC工具类(ConDB、Dao、MyProperties、MyException、db属性文件)

阅读更多

1.自定义异常类

package com.ownhome.exception;

/**
 * 自定义异常类
 * @author admin
 *
 */
public class MyException extends Exception {
	protected Throwable throwable;
	
	/*构造方法*/
	public MyException(String msg){
		super(msg);
	}
	/*构造方法*/
	public MyException(String msg,Throwable throwable){
		super(msg);
		this.throwable=throwable;
	}
	
	
//	/*得到异常*/
//	public Throwable getEx(){
//		return this.throwable;
//	}
	
	
	/*重写父类方法*/
	@Override
	public void printStackTrace() {
		super.printStackTrace();/*调用父类的方法*/
		if(throwable!=null){
			throwable.printStackTrace();/*输出异常*/
		}
	
	}
	
}

 

 

 

2.db属性文件

 

   driverClass=sun.jdbc.odbc.JdbcOdbcDriver
   url=jdbc:odbc:driver={Sql Server};database=ownHome;server=.
   uid=sa
   pwd=abc

 

3. MyProperties类[单例模式]

package com.ownhome.common;

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

import com.ownhome.exception.MyException;

/**
 * 用单模式实现从Properties文件里读取连接数据库的参数
 * @author admin
 *
 */
public class MyProperties extends Properties{
	
	
	/*静态属性*/
	private static MyProperties myPro;
	
	/*构造方法*/
	private MyProperties() throws MyException{
		InputStream is=this.getClass().getResourceAsStream("db.properties");
		try {
			this.load(is);
		} catch (IOException e) {
			throw new MyException("读取属性文件错误 !",e);
		}
	}
	
	
	/*公有的静态方法,得到MyProperties对象*/
	public static MyProperties getPro(){
		if(myPro!=null){
			return myPro;
		}
		init();
		return myPro;
		
	}
	
	
	/*实现同步机制,初始化内部属性*/
	private synchronized static void init(){
		if(myPro==null){
			try{
				myPro=new MyProperties();	
			}catch(MyException e){
				e.printStackTrace();
			}
		}
	}
}

 

4.ConDB连接工厂类[工厂模式]

 

package com.ownhome.common;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import com.ownhome.exception.MyException;

/**
 * 连接数据库类
 * @author admin
 *
 */
public class ConDB {
	
//	/*静态方法,属性文件得到连接对象 */
//	public static Connection getCon() throws MyException{
//		
//		MyProperties myPro=MyProperties.getPro();
//		try{
//			Class.forName(myPro.getProperty("driverClass"));
//			return DriverManager.getConnection(myPro.getProperty("url"));
//		}catch(ClassNotFoundException e){
//			throw new MyException("注册驱动错误!",e);
//		}catch(SQLException e){
//			throw new MyException("得到Con连接对象错误",e);
//		}
//	}
	
	/*JNDI方式*/
	public static Connection getCon() throws MyException{
		try {
			Context ic=new InitialContext();
			DataSource source=(DataSource)ic.lookup("java:comp/env/jdbc/ownhome");
			return source.getConnection();
		} catch (NamingException e) {
			throw new MyException("JNDI查找错误@!",e);
		} catch (SQLException e) {
			throw new MyException("得到Connection对象错误!",e);
		}
	}
}

 

5. Dao类工具类

 

package com.ownhome.common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

import com.ownhome.exception.MyException;

/**
 * Dao类,对数据库进行操作
 * @author admin
 *
 */
public class Dao {
	private Connection con;		
	private String sql;
	private List values;

	public void setCon(Connection con) {
		this.con = con;
	}

	public void setSql(String sql) {
		this.sql = sql;
	}
	/**
	 * 设置sql字符串中?的值
	 * @param values
	 */
	public void setValues(List values) {
		this.values = values;
	}

	/*为sql语句的所有的?设置值*/
	private void setValues(PreparedStatement ps) throws MyException {

		if (values != null) {
			try {
				for (int i = 1; i <= values.size(); i++) {
					ps.setObject(i, values.get(i - 1));
				}
			} catch (SQLException e) {
				throw new MyException("设置sql中参数的值?时出错", e);
			}
		}
	}
	/*决断必需的属性是否为空*/
	private boolean isNull(){
		if(con==null||sql==null||sql.equals("")){
			return true;
		}
		return false;
		
	}
	/**
	 * 查询
	 * @return
	 */
	public Result executeQuery() throws MyException{
		ResultSet rs;
		Result result = null;
		if(isNull()){
			throw new MyException("未初始化Con或Sql属性!");
		}
		try{
			PreparedStatement ps=con.prepareStatement(sql);
			this.setValues(ps);
			rs=ps.executeQuery();
			result=ResultSupport.toResult(rs);
			con.close();
		}catch(SQLException e){
			throw new MyException("用PreparedStatement执行查询时出错",e);
		}catch(MyException e){
			e.printStackTrace();
		}
		return result;
		
	}
	/**
	 * 修改,删除,增加
	 * @return
	 */
	public int executeUpdate() throws MyException{
		int count=0;
		if(isNull()){
			throw new MyException("未初始化Con或Sql属性");
		}
		try{
			PreparedStatement ps=con.prepareStatement(sql);
			this.setValues(ps);
			count = ps.executeUpdate();
			con.close();
		}catch(SQLException e){
			throw new MyException("用PreparedStatement执行更新时出错!",e);
		}catch(MyException e){
			e.printStackTrace();
		}
		return count;
	}
}






分享到:
评论

相关推荐

    java 改变Properties文件中的键值

    这个文件可能包含了一个类,该类封装了加载、修改和保存Properties文件的操作,以提供更方便的API供其他部分的代码使用。 7. **Java.jpg** `Java.jpg`可能是一个与Java编程相关的图像,可能用于教程或说明,但在这...

    自定义springboot的starterDemo

    这将允许Spring Boot读取`application.properties`或`application.yml`中的特定键值对,并绑定到该类的属性上。 4. **提供Bean** - 在自动配置类中,使用`@Bean`注解声明你需要创建的bean。这些bean可以是你的服务...

    java 对于文件的读写操作

    通过`Properties`类,我们可以加载和保存属性到流中,例如从文件读取或向文件写入。以下是一个简单的例子: ```java import java.io.FileInputStream; import java.io.FileOutputStream; import java.io....

    spring boot 注入 property的三种方式(推荐)

    @ConfigurationProperties 是 Spring Boot 提供的一个注解,用于将 Property 文件的属性映射到当前类中。使用这个注解可以将 Property 文件的属性自动注入到对应的字段中。 例如,假设我们有一个名为 "my....

    Spring Boot心得.docx

    Spring Boot 支持通过配置文件和注解的方式来自定义属性,方便在代码中使用。 1. **配置文件**: ```properties my1.age=22 my1.name=battcn ``` 2. **定义自定义属性类**: ```java @Component @...

    createClass:在 JavaScript 中使用类的简单方法

    创建类createClass - 在 JavaScript 中使用类的简单方法。例子在测试中查看更多示例。简单的 var SomeClass = createClass({ myProperties: 123, myMethod: function() { return this.myProperties; }});var obj = ...

    jquery-i18n-properties.rar

    jQuery i18n Properties 插件就是这样一个工具,它为JavaScript开发者提供了强大的国际化支持,让前端应用的本地化变得快速而智能。 jQuery i18n Properties 是基于jQuery的一个插件,主要功能是处理和解析....

    ADP4J.zip

    Annotation Driven Properties For Java (ADP4J) 是一个在 Java 对象中使用注解方式来注入配置属性的类库。 示例代码: public class Bean { @SystemProperty("threshold") private int threshold; @...

    基于Session的国际化实现方法

    这里,我们通过`session.getAttribute("i18nlanguage")`获取当前语言环境,并使用`ResourceBundle.getBundle("myproperties",name)`加载对应的资源文件。 在后台Action层,我们需要处理URL参数并更新Session中的...

Global site tag (gtag.js) - Google Analytics