📄 kylelist.java
字号:
/**
* @author duke
* @version 1.2
* @date 2004-8-10 14:37
*/
package com.kyle.eobject;
import java.io.*;
import java.util.Date;
import java.sql.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class KyleList
{
public KyleList() throws Exception
{
initializeFields();
initializeLink();
opened=false;
}
public KyleList(String name) throws Exception
{
setTableName(name);
initializeFields();
initializeLink();
opened=false;
}
protected void initializeFields(){}
//增加数据
public void addField(String name,
String type,
int length)
{
fields.addField(name,type,length,"","");
}
public void addField(String name,
String type,
int length,
String refer,
String referfield)
{
fields.addField(name,type,length,refer,referfield);
}
private void initializeLink() throws Exception
{
//openConn(); //time 211
//internalStatement = conn.createStatement(); //time 370
}
private void openConn() throws Exception
{
//conn = DBUtils.getConnectionPool();
//connOpened = true;
}
public void setTableName(String name)
{
table=name;
}
public String getTableName()
{
return table;
}
public void setWhere(String value)
{
if (value!=null) where= value.trim();
}
public String getWhere()
{
return where;
}
public void setField(String value)
{
field= value;
}
public String getField()
{
return field;
}
public void setKey(String value)
{
key=value;
}
public String getKey()
{
return key;
}
public int getCount()
{
return count;
}
public void setPage(boolean value)
{
page=value;
}
public void setPageSize(int value)
{
pageSize=value;
}
public int getPageNo()
{
return pageNo;
}
public int getPageCount()
{
return pageCount;
}
public void setPageNo(int value)
{
pageNo=value;
}
public void list() throws Exception
{
String sqlstr="";
Connection conn = DBUtils.getConnection();
Statement stam = conn.createStatement();
ResultSet rs = stam.executeQuery(
KyleSqlUtils.getQueryCountSql(table,"*","n",where).toString());
if (rs.next())
allCount=rs.getInt("n");
else
allCount=0;
rs.close();
//分页模式
if (page)
{
pageCount=count/pageSize+1;
if (pageNo<1) pageNo=1;
if (pageNo>pageCount) pageNo=pageCount;
querySql=KyleSqlUtils.getPageSql(table,field,where,orderby,
pageNo,pageSize,"ID",-1);
}
else
{
querySql=KyleSqlUtils.getQuerySql(table,field,where,orderby);
}
//System.out.println(querySql);
rs = stam.executeQuery(querySql.toString());
ResultSetMetaData rsmd = rs.getMetaData();
int countOfColumns = rsmd.getColumnCount();
while(rs.next())
{
KyleTableRecord record = new KyleTableRecord(dataTable);
for(int i=1;i<=countOfColumns;i++)
{
String cname = rsmd.getColumnName(i);
String cvalue = rs.getString(i);
record.add(cname,cvalue);
}
dataTable.addRecord(record);
count++;
}
rs.close();
stam.close();
DBUtils.freeConnection(conn);
opened=true;
}
public boolean next()
{
if(!opened) return false;
if(index<-1 || index>=(count-1)) return false;
index++;
return true;
}
public String value(String fieldstr) throws Exception
{
if (!opened) return "";
if(index<0 || index>=count) return "";
KyleTableRecord record = dataTable.getRecord(index);
String str=fieldstr;
String[] ary = str.split("[.]");
//if(ary.length==1) return internalRs.getString(fieldstr);
if(ary.length==1) return record.value(fieldstr);
//str = internalRs.getString(ary[0]);
str = record.value(ary[0]);
KyleQuerySQL sql = new KyleQuerySQL();
String uri=ary[0];
String uribef=uri;
for(int i=0;i<ary.length;i++)
{
if(i>0)
{
uribef=uri;
uri += "."+ary[i];
}
KyleNameTable temptable = temptables.getTable(uri);
if(temptable==null)
{
if(i==0)
{
//增加数据表
temptable = new KyleNameTable(uri);
sql=KyleSqlUtils.getQuerySql(getTableName(),uri,querySql.where); //time 10 少
//Statement stmtTemp = conn.createStatement(); //time 20
//ResultSet rsTemp = stmtTemp.executeQuery(sql.toString()); //time 10 少
Connection conn = DBUtils.getConnection();
Statement stmtTemp = conn.createStatement();
ResultSet rsTemp = stmtTemp.executeQuery(sql.toString());
int idx=0;
while (rsTemp.next()) //time 0-10
temptable.add(String.valueOf(idx++),rsTemp.getString(1));
rsTemp.close();
stmtTemp.close();
DBUtils.freeConnection(conn);
temptables.add(temptable);
//增加对象表
KyleField field = fields.getField(uri);
Class c = Class.forName("com.kyle.eobject."+getTableName());
lists.addObj(uri,(KyleList)c.newInstance());
}
if(i>0)
{
//得到指当前字段的Field
KyleList objbef = lists.getObj(uribef);
KyleField fieldbef = objbef.fields.getField(ary[i-1]);
if (fieldbef==null) return "";
KyleNameTable temptablebef = temptables.getTable(uribef);
//增加数据表
temptable = new KyleNameTable(uri);
sql=KyleSqlUtils.getQuerySql(
fieldbef.getRefer(),
fieldbef.getReferfield()+","+ary[i],
fieldbef.getReferfield()+" IN "+temptablebef.getWhereInStr());
//Statement stmtTemp = conn.createStatement(); //time 10
//ResultSet rsTemp = stmtTemp.executeQuery(sql.toString());
Connection conn = DBUtils.getConnection();
Statement stmtTemp = conn.createStatement();
ResultSet rsTemp = stmtTemp.executeQuery(sql.toString());
while (rsTemp.next()) //time 10
temptable.add(rsTemp.getString(1),rsTemp.getString(2));
rsTemp.close();
stmtTemp.close();
DBUtils.freeConnection(conn);
temptables.add(temptable);
//增加对象表
Class c = Class.forName("com.kyle.eobject."+fieldbef.getRefer());
KyleList obj = (KyleList)c.newInstance();
lists.addObj(uri,obj);
}
}
str=temptable.value(str);
}
return str;
}
public void close() throws Exception
{
}
//Query SQL
KyleQuerySQL querySql = new KyleQuerySQL();
private String field="";
private String table="*";
private String where="";
private String orderby="";
private String key="";
private int allCount=0; //总记录数
private int count=0; //记录数
private boolean page=false; //分页模式
private int pageSize=10; //每页记录数
private int pageCount=1; //总页数
private int pageNo=1; //当前页
public int index = -1; //记录指针位置
private boolean opened=false;
private boolean connOpened=false;
private KyleFields fields = new KyleFields();
private KyleLists lists = new KyleLists();
private KyleNameTables temptables = new KyleNameTables();
private KyleTable dataTable = new KyleTable();
public static void main(String args[]) throws Exception
{
System.out.println("id a b");
System.out.println("------------------------------------");
KyleList t = new KyleList("users");
t.setWhere("id>1 and a like '%a%' ");
t.setField("id,a,b");
t.setPage(true);
t.setPageNo(1);
t.list();
while (t.next())
System.out.println(t.index + "," +
t.value("id") +
" "+t.value("a")+
" "+t.value("b"));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -