package pandy.db;
import pandy.util.SysUtil;
import java.util.ArrayList;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.lang.reflect.Constructor;
/**
* Created by IntelliJ IDEA.
* User: Admin12
* Date: 2005-11-25
* Time: 15:00:10
* To change this template use File | Settings | File Templates.
*/
public class ObjectCtl
{
/**
* ��ҳ�г�sql���ij��Ľ��
*
* @param con
* @param sql
* @param curPage
* @param pageSize
* @param returnObj
* @return
*/
public synchronized static ArrayList listPage(Connection con, String sql, int curPage, int pageSize, Object returnObj)
{
ArrayList results = new ArrayList();
DBOject obj = new DBOject();
try
{
ResultSet rs = obj.getrollresultset(con, sql);
rs = obj.fingerTo(rs, curPage, pageSize);
int count = 0;
while (rs != null && rs.next())
{
results.add(createObj(rs, returnObj));
count++;
rs = obj.checkRs(rs, count, pageSize);
}
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
obj.freecon(con);
}
return results;
}
/**
* ����sql�����ָ��һ����¼�Ķ���
*
* @param conn
* @param sql
* @param returnObj
* @return
*/
public static Object detail(Connection conn, String sql, Object returnObj)
{
DBOject obj = new DBOject();
try
{
ResultSet rs = obj.getresultset(conn, sql);
if (rs.next())
return createObj(rs, returnObj);
} catch (Exception e)
{
e.printStackTrace();
} finally
{
obj.freecon(conn);
}
return null;
}
/**
* ȡһ���ֶε�һ��ֵ�����ڶ���ֶλ���ֵ�������ô˷���
*
* @param conn
* @param sql
* @return
*/
public static synchronized int getIntRowValue(Connection conn, String sql)
{
int value = 0;
DBOject obj = new DBOject();
try
{
ResultSet rs = obj.getrollresultset(conn, sql);
if (rs != null && rs.next())
{
value = rs.getInt(1);
}
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
obj.freecon(conn);
}
return value;
}
/**
* ȡһ���ֶε�һ��ֵ�����ڶ���ֶλ���ֵ�������ô˷���
*
* @param conn
* @param sql
* @return
*/
public static synchronized String getStrRowValue(Connection conn, String sql)
{
String value = "";
DBOject obj = new DBOject();
try
{
ResultSet rs = obj.getrollresultset(conn, sql);
if (rs != null && rs.next())
{
value = rs.getString(1);
}
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
obj.freecon(conn);
}
return value;
}
/**
* ����sql��������м�¼�ĸ��������ڶ���ѯ���������Ӳ�ѯ��ֻȡ���ı�������������
*
* @param conn
* @param sql
* @return
*/
public static synchronized int getRowCount(Connection conn, String sql)
{
int count = 0;
DBOject obj = new DBOject();
try
{
String end = sql.substring(sql.toLowerCase().lastIndexOf(" from "));
sql = new StringBuffer("select count(*) ").append(end).toString();
ResultSet rs = obj.getrollresultset(conn, sql);
if (rs != null && rs.next())
{
count = rs.getInt(1);
}
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
obj.freecon(conn);
}
return count;
}
/**
* ����sql�����ȡ�õļ�¼������ҳ
*
* @param conn
* @param sql
* @param returnObj
* @return
*/
public synchronized static ArrayList list(Connection conn, String sql, Object returnObj)
{
ArrayList results = new ArrayList();
DBOject obj = new DBOject();
try
{
ResultSet rs = obj.getresultset(conn, sql);
while (rs != null && rs.next())
{
results.add(createObj(rs, returnObj));
}
} catch (SQLException e)
{
e.printStackTrace();
} finally
{
obj.freecon(conn);
}
return results;
}
/**
* ����Id������ɾ�����ݿ������¼
*
* @param conn
* @param tableName
* @param cloName
* @param ids
* @return
*/
public synchronized static int deleteByIds(Connection conn, String tableName, String cloName, String[] ids)
{
if (ids == null || ids.length == 0) return 0;
String sql = "delete from " + tableName + " where " + cloName + " in " + SysUtil.getIdsplit(ids);
DBOject obj = new DBOject();
try
{
return obj.executeupdate(conn, sql);
} finally
{
obj.freecon(conn);
}
}
/**
* ����Id��ֵɾ�����ݿ�һ����¼��
*
* @param conn
* @param tableName
* @param cloName
* @param id
* @return
*/
public synchronized static int deleteById(Connection conn, String tableName, String cloName, int id)
{
String sql = "delete from " + tableName + " where " + cloName + " = " + id;
DBOject obj = new DBOject();
try
{
return obj.executeupdate(conn, sql);
} finally
{
obj.freecon(conn);
}
}
public synchronized static boolean reSortRow(Connection conn, String tableName, String[] ids, String rowName)
{
try
{
Statement smt = conn.createStatement();
for (int i = 0; i < ids.length; i++)
{
String sql = "update " + tableName + " set " + rowName + "=" + i + " where id=" + ids[i];
smt.addBatch(sql);
}
smt.executeBatch();
smt.close();
return true;
} catch (SQLException e)
{
e.printStackTrace();
return false;
} finally
{
}
}
/**
* �������ض���
*/
static Constructor tempConstru;
static Object tempObj;
private synchronized static Object createObj(ResultSet rs, Object returnObj)
{
Object resultObj = null;
String className = returnObj.getClass().getName();
try
{
if (tempObj != null)
{
if (returnObj.equals(tempObj) || className.equals(tempObj.getClass().getName()))
return tempConstru.newInstance(new Object[]{rs});
}
Constructor[] constru = returnObj.getClass().getConstructors();
for (int i = 0; i < constru.length; i++)
{
Constructor cons = constru[i];
Class para[] = cons.getParameterTypes();
if (para.length == 1)
{
if (para[0].getName().indexOf("ResultSet") != -1)
{
resultObj = cons.newInstance(new Object[]{rs});
tempConstru = cons;
return resultObj;
}
}
}
if (resultObj == null)
{
System.out.println("ERROR:no Constructor( ResultSet rs) in " + className);
}
return resultObj;
} catch (Exception e)
{
e.printStackTrace();
return null;
} finally
{
tempObj = returnObj;
returnObj = null;
}
}
}