⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 query.java

📁 我自己实现了一个数据访问层
💻 JAVA
字号:
package dark.db.record;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * <p>Title:            数据库查询操作封装类</p>
 * <p>Description:      定义了各种数据库查询方法</p>
 * <p>Copyright:        Copyright (c) 2003</p>
 * <p>Company:          cniti</p>
 * <p>Create Time:      2004-3-21 14:00:32</p>
 * @author             <a href="mailto:dark_he@hotmail.com">darkhe</a>
 * @version            1.0
 */
public class Query
{			
	private Connection conn;	

	private Statement stmt;
    
	// 表名
	private String table_name;
	   
	// 目标列名
	private String field;
  	  
	// 条件表达式
	private String condition;
  
	// 分组列名
	private String groupBy;
  
	// 分组的附加条件
	private String having;
  
	// 排序列名
	private String orderBy;
    
	// 升序排序
	public static final String ASC = "ASC";
  
	// 降序排序
	public static final String DESC = "DESC";
  
	// 是否去除重复记录,default不去除
	private boolean isDistinct = false;	
	
	
	public Query(String table_name, Connection conn)
	{		
		this.table_name = table_name;
		this.conn = conn;
	}
	
	
	public Query()
	{
	}	
  

   /** 
	*  根据指定参数生成查询结果集  
	*  type参数值:<br>
	*  1. TYPE_FORWARD_ONLY 结果集不可滚动<br>
	*  2. TYPE_SCROLL_INSENSITIVE 结果集可以滚动,但不反映数据库的变化<br>
	*  3. TYPE_SCROLL_SENSITIVE 结果集可以滚动,并反映数据库的变化<br>
	*  concurrency参数值:<br>
	*  1. CONCUR_READ_ONLY 不能用结果集更新数据库<br>
	*  2. CONCUR_UPDATEABLE 可以用结果集更新数据库<br>	
	*  @param type ResultSet类型值
	*  @param concurrency ResultSet同步值  
	*  @exception SQLException
	*/   
	public ResultSet executeQuery( int type,
								 	int concurrency )
	throws SQLException
	{	
		String sql = getSelectSQL();
		stmt = conn.createStatement( type , concurrency );
		
		//System.out.println("darkhe>>>" + this + ">>>SQL>>>" + sql );
		
		return stmt.executeQuery( sql );
	}
	  
	  
	/**
	 * 根据Default设置生成查询结果集
	 * @return
	 * @throws SQLException
	 */
	public ResultSet executeQuery()
	throws SQLException
	{
		String sql = getSelectSQL();		
		stmt = conn.createStatement();
		
		System.out.println(this + ">>>SQL>>>" + sql );
				
		return stmt.executeQuery( sql );
	}
	
	
	
	
	/**
	 * 根据Default设置生成查询结果集
	 * @return
	 * @throws SQLException
	 */
	public ResultSet executeQuery(String sql)
	throws SQLException
	{		
		stmt = conn.createStatement();
		
		System.out.println(this + ">>>SQL>>>" + sql );
				
		return stmt.executeQuery( sql );
	}	 
  
  
    
//    /**
//     * 将记录集形式的查询结果转换为Record格式
//     * @param rs
//     * @return
//     * @throws SQLException
//     */
//    public static Record getRecordByResultSet(ResultSet rs)
//    throws SQLException
//    {
//    	Record r = new Record();
//    	ResultSetMetaData rsmd = rs.getMetaData();
//    	int columnCount = rsmd.getColumnCount();
//    	 
//    	for(int i=1; i<columnCount && rs.next(); i++)
//    	{
//    		String columnName = rsmd.getColumnName(i);
//    		int columnType = rsmd.getColumnType(i);
//    		
//    		if( columnType == Types.BIGINT )
//    		{
//    			r.put(columnName, rs.getBigDecimal(columnName).toBigInteger() );
//    		}
//    	}
//    	
//    	
//    	/*while( rs.next() )
//    	{
//    	}*/
//    	
//    	return r;
//    }
    
        


	/**
	 *  设置目标列名。
	 *  example: id, name, sex
	 *  如果没有明确调用当前方法明确设置目标列名,
	 *  则默认为*(所有字段)
	 *  @param field 目标列名  
	 */
	public void setField(String field)
	{    
	  this.field = field;
	}
  
  
  
	/**
	*  设置分组列名
	*  @param groupBy 分组列名
	*/
	public void setGroupBy(String groupBy)
	{
	  this.groupBy = groupBy;
	}
 
  
  
	/**
	*  设置分组的附加条件  
	*  @param having 分组的附加条件        
	*/
	public void setHaving(String having)  
	{        
		this.having = having;
	}
  
  
	/**
	 * 指定查询按ASC方式排序
	 * @param orderBy
	 */
	public void setOrderByASC(String orderBy)							                      
	{	  
	     
		this.orderBy = orderBy + " ASC";     	  
	}
	
	
	/**
	 * 指定查询按DESC方式排序
	 * @param orderBy
	 */
	public void setOrderByDESC(String orderBy)						    	                       
	{	  	     
		this.orderBy = orderBy + " DESC";     	 
	}
  
  
  
	/**
	*  设置是否去除重复记录
	*  @param isDistinct true为去除,false为不去除
	**/
	public void isDistinct(boolean isDistinct)
	{
	  this.isDistinct = isDistinct;
	}



	/**  
	*  @return 构成的Select SQL串值
	*  @throws SQLException  
	*/
	public String getSelectSQL() throws SQLException
	{
		StringBuffer sql = new StringBuffer();

		sql.append("SELECT ");

		if (isDistinct)
		{
			sql.append("DISTINCT ");
		}

		if (field == null)
		{
			sql.append("*");
		}
		else
		{
			sql.append(field);
		}

		sql.append(" FROM ");

		if (sql == null)
		{
			throw new SQLException("未设置表名");
		}
		else
		{
			sql.append(table_name);
		}

		if (condition != null)
		{
			sql.append(" WHERE (");
			sql.append(condition);
			sql.append(") ");
		}

		if (orderBy != null)
		{
			sql.append(" ORDER BY ");
			sql.append(orderBy);			
		}
		
		if (groupBy != null)
		{
			sql.append(" GROUP BY ");
			sql.append(groupBy);
			if (having != null)
			{
				sql.append(" HAVING ");
				sql.append(having);
			}
			sql.append(" ");
		}

		return sql.toString();
	}
              
		
	/**
	 * @return
	 */
	public String getCondition()
	{
		return condition;
	}

	/**
	 * @return
	 */
	public String getTablename()
	{
		return table_name;
	}

	/**
	 * @param string
	 */
	public void setCondition(String string)
	{
		condition = string;
	}

	/**
	 * @param string
	 */
	public void setTablename(String string)
	{
		table_name = string;
	}


	public static void main(String[] args) throws SQLException
	{
		Connection conn = null;
		Query q = new Query( "Tablename",conn );		
		//q.setField("id,name");
		q.setCondition("id=100");
		q.setOrderByDESC("name");
		System.out.println("sql=" + q.getSelectSQL() );
	}
	
	
	/**
	 * @return
	 */
	public boolean isDistinct()
	{
		return isDistinct;
	}


	/**
	 * @param b
	 */
	public void setDistinct(boolean b)
	{
		isDistinct = b;
	}


	/**
	 * @return
	 */
	public String getField()
	{
		return field;
	}


	/**
	 * @return
	 */
	public String getGroupBy()
	{
		return groupBy;
	}


	/**
	 * @return
	 */
	public String getHaving()
	{
		return having;
	}


	/**
	 * @return
	 */
	public Connection getConnection()
	{
		return conn;
	}


	/**
	 * @param connection
	 */
	public void setConnection(Connection connection)
	{
		conn = connection;
	}
	
	
//	protected void finalize() throws Throwable
//	{		
//		super.finalize();
//		stmt.close();   // 
//		stmt = null;	// ??? 是应该手工关闭呢,还是不呢,得做个实验。
//	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -