📄 query.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 + -