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

📄 dbviewsource.java

📁 java web 开发,Java Xml 编程指南书籍源码
💻 JAVA
字号:
/*
   <dbSource>
      <class>MyNa.xml.DBViewSource</class>
      <useclass>MyNa.xml.RowViewSource</useclass>
      <dbDriver>sun.jdbc.odbc.JdbcOdbcDriver</dbDriver>
      <dbName>jdbc:odbc:PHONEBOOK</dbName>
      <dbUser>JohnSmith</dbUser>
      <dbPwd>hArd-tO-gUEss?</dbPwd>
      <dbSource>INBOX</dbSource>
      <dbQuery>SELECT * FROM |dbSource| ORDER BY msgdate,msgfromaddr</dbQuery>
      <verbose>true</verbose>
      <debug>true</debug>
    </dbSource>

      <class>MyNa.xml.MailViewSource</class>
      <useclass>MyNa.xml.RowViewSource</useclass>
      <dbDriver>pop3</dbDriver>
      <dbName>mail.dreamscape.com</dbName>
      <dbUser>JohnSmith</dbUser>
      <dbPwd>hArd-tO-gUEss?</dbPwd>
      <dbSource>INBOX</dbSource>
      <theColumnLabels>msgsubject,msgdate,msgflags,msgfromaddr</theColumnLabels>
      <verbose>true</verbose>
      <debug>true</debug>
*/


/* The DBViewSource provides access to one table
at a time, in the form of a RowViewSource. It's initializable
by an xml file via the XmlConfig interface.
*/
package MyNa.xml;
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import MyNa.utils.*;
import org.w3c.dom.Node;
import java.sql.*;

public class DBViewSource extends XmlConfigBase
    implements RowViewSource{
  Env msgEnv; Logger lg; MyNa.xml.DBHandler dbHandler;
  String dbDriver,dbName,dbUser,dbPwd,dbSource;
  String dbQuery;
  String retaddr;
  boolean expunge; // if true, deletions stay gone.

  int rownum;  // used for individual extraction/deletion
  String[]columnLabels;
  String[]columnTypes;
  String errorType;
  String errorMessage;


public DBViewSource(){
  lg=new Logger(); msgEnv=new Env(); dbHandler=null;
  dbQuery="SELECT |columnLabels| FROM |dbSource|";
  errorType=null; errorMessage=null;
}

public void setInitDefs(Env E){
  msgEnv.addHashtable(E);
}

public void initDBHandler(Env E)throws Exception{
  dbHandler=new DBHandler(E);
}
private boolean ok(String S){return null!=S && S.length()>0;}

public void setDbDriver(String S){
  if(ok(S))dbDriver=S;
  lg.logIt("dbVS: dbDriver="+dbDriver);
}
public void setDbName(String S){
  if(ok(S))dbName=S;
  lg.logIt("dbVS: dbName="+dbName);
}
public void setDbUser(String S){if(ok(S))dbUser=S;}
public void setDbPwd(String S){if(ok(S))dbPwd=S;}
public void setRetaddr(String S){if(ok(S))retaddr=S;}
public void setDbSource(String S){if(ok(S))dbSource=S;}
public void setExpunge(String S){ // not used at present
  if(ok(S))expunge=(new Boolean(S)).booleanValue();
}
public void setRowNum(String S){if(ok(S))rownum=Integer.parseInt(S);}
public void setRowNum(int N){rownum=N;}

public void setColumnLabels(String[]A){
  columnLabels=A; int N=0;
  if(columnTypes==null || 
      columnTypes.length!=(N=columnLabels.length)){
    columnTypes=new String[N];
    for(int i=0;i<N;i++)columnTypes[i]="VARCHAR";
    }
}
public void setColumnLabels(String S){
  if(ok(S))setColumnLabels(Misc.stringSplit(S,','));
}

public void setColumnTypes(String S){
  if(ok(S))setColumnTypes(Misc.stringSplit(S,','));
}
public void setColumnTypes(String[]A){
  columnTypes=A;
}
public void setMiscError(String S){
  errorType="miscError"; errorMessage=S;
}
public void setLoginError(String S){
  errorType="loginError"; errorMessage=S;
}

public void setString(String nm,String val){
  if(nm==null)return;
  if(nm.equals("dbDriver"))setDbDriver(val);
  else if(nm.equals("dbName"))setDbName(val);
  else if(nm.equals("dbUser"))setDbUser(val);
  else if(nm.equals("dbPwd"))setDbPwd(val);
  else if(nm.equals("dbSource"))setDbSource(val);
  else if(nm.equals("expunge"))setExpunge(val);
  else if(nm.equals("rownum"))setRowNum(val);
  else if(nm.equals("verbose"))setVerbose(val);
  else if(nm.equals("debug"))setDebug(val);
  else if(nm.equals("beanName"))setBeanName(val);
  else if(nm.equals("retaddr"))setRetaddr(val);
  else lg.logIt("(DBViewSource) no such setstring: "+nm+"!="+val);
}
public int getRowNum(){return rownum;}

public String getString(String key){
  if(key==null)return null;
  if(key.equals("errorMessage"))return getErrorMessage();
  if(key.equals("errorType"))return getErrorType();
  if(key.equals("dbSource"))return dbSource;
  if(key.equals("rownum"))return ""+rownum;
  return null;  
}

public void setQueries(Env E){
  if(null==E)return;
  E.put("dbQueries","getTable,getAllColumnsTable,delRow");
  E.put("columnLabels",MessageData.getAllLabels());
  E.put("getAllColumnsTable", Misc.stringDelimSubst(dbQuery,"|",E));
  E.put("columnLabels",columnLabels);
  E.put("getTable", Misc.stringDelimSubst(dbQuery,"|",E));
  String qStr="DELETE FROM "+dbSource+" WHERE "+columnLabels[0]+"=?";
   for(int i=1;i<columnLabels.length;i++)qStr+=" AND "+columnLabels[i]+"=?";
  qStr+=";"; // qStr= delete from inbox where msgsubject=? AND msgcontent=?..
  E.put("delRow",qStr);
}

public void initSession(Env E) throws Exception{
  if(null==E)throw new Exception("null Env for DBViewSource.initSession");
     //dbSource,dbDriver,dbName,dbUser,dbPwd,dateFormat,getTable_types
  E.put("dbSource",dbSource);
  E.put("dbDriver",dbDriver);
  E.put("dbName",dbName);
  E.put("dbUser",dbUser);
  E.put("dbPwd",dbPwd);
  setQueries(E);
  try{initDBHandler(E);}
  catch(Exception ex){
   throw new Exception("DBViewSource.initSession: "+Logger.stackTrace(ex));
  }
}

public boolean hasError(){
  return (null!=errorMessage && errorMessage.length()>0);
}

public String getErrorMessage(){
  String S=errorMessage; errorMessage=null; return S;
}  
public String getErrorType(){return errorType;}

public String[]getColumnLabels(){return columnLabels;}
public String[]getColumnTypes(){return columnTypes;}
public int getNumberOfColumns(){return columnLabels.length;}
public RowSeq getRowList(){  // with columnLabels as in msgEnv
  if(null==dbHandler)return null;
  msgEnv.put("dbOperation","getTable");
  try{return dbHandler.getQueryRows(msgEnv);}
  catch(Exception ex){
    setMiscError("dbVS.getRowList: \n"+Logger.stackTrace(ex));
    return null;
    }
}
public RowSeq getAllColumnsRowList(){  // with columnLabels as in msgEnv
  if(null==dbHandler){
     lg.logIt("no dbHandler for getAllColumnsRowList"); 
     return null;
     }
  msgEnv.put("dbOperation","getAllColumnsTable");
  try{return dbHandler.getQueryRows(msgEnv);}
  catch(Exception ex){
    String S="dbVS.getAllColumnsRowList: \n"+Logger.stackTrace(ex);
    setMiscError(S);
    lg.logIt(S);
    return null;
    }
}

public Env getRow(int N){ 
  RowSeq rE=getAllColumnsRowList();
  if(null==rE){
    setMiscError("failure to get row list");
    return msgEnv;
    }
  if(N<=0) return rE.getRow(); // init values only
  int lim=N;
  while(lim>0 && rE.next())lim--;
  if(lim!=0) setMiscError("no item "+N+" available");
  Env row= rE.getRow();
  rE.close();
  return row;
}
public void delRow(int N){
  if(N<=0) return;
  RowSeq rE=getRowList();
  int lim=N;
  while(lim>0 && rE.next())lim--;
  if(lim!=0) setMiscError("no item "+N+" available");
  delRows(rE.getColumnLabels(),rE.getColumnValues());
}
public void delRowRange(int start,int end){
  for(int i=start;i<end;i++)delRow(i);
}
public void sendTo(String sourceType,String sourceName){
  if("mail".equalsIgnoreCase(sourceType))sendToMail(sourceName);
  else if("db".equalsIgnoreCase(sourceType))sendToDB(sourceName);
  else if("file".equalsIgnoreCase(sourceType))sendToXML(sourceName);
  else if("string".equalsIgnoreCase(sourceType))
    sendToXMLString(sourceName); // result in msgEnv.
  else setMiscError("unknown sourceType "+sourceType+" for sendTo");
}

public void sendTo(Env E){
  sendTo(msgEnv.getStr("sourceType","mail"),
         msgEnv.getStr("sourceName",retaddr)); 

}
public void sendToXMLString(String name){
  try{
    StringWriter sw=new StringWriter();
    sendToXML(sw);
    msgEnv.put(name,sw.toString());
    lg.logIt("sendToXMLString("+name+") produces \n"+msgEnv.getStr(name));
  }catch(Exception ex){msgEnv.put(name,"dbVS.sendToXMLString error: "+ex);}
}

public void close(){
  try{
    if(null!=dbHandler)dbHandler.close();
  }catch(Exception E){setMiscError("closing error "+E);}

}

public void sendToMail(String msgtoaddr){
  try{forwardMessageList(msgtoaddr);
 }catch(Exception E){setMiscError("can't mail to "+msgtoaddr+": "+E);}
}

public void sendToXML(String fileName){
  try{
  Writer out=new BufferedWriter(new FileWriter(new File(fileName)));
  sendToXML(out);
  out.close();
  }catch(Exception E){setMiscError("can't save to "+fileName+": "+E);}
}

public void sendToXML(Writer out)throws Exception{
  msgEnv.put("OutputWriter",out);
  msgEnv.put("tableName",dbSource);
  getAllColumnsRowList().toXML();
}
public void sendToDB(Connection conn,String tableName,boolean reset)
  throws Exception{
  getAllColumnsRowList().toDB(conn,tableName,reset);
}
public void sendToDB(String tableName){
  try{
  sendToDB(dbHandler.getConnection(),tableName,false);
  }catch(Exception E){
    setMiscError("can't save to db box "+tableName+": "+E);
  }
}




public void forwardMessageList(String msgtoaddr)throws Exception{
  RowSeq rE=getAllColumnsRowList();
  rE=new MapRowSeq("msgtoaddr",msgtoaddr,rE);
  rE.toMail();
}


public void addRow(String[]fieldNames,String[]vals){
  /* NOT IMPLEMENTED IN THIS EXAMPLE */
  // construct a message, call folder.appendMessages()
}
public void delRowSearch(String field,String pat){
  /* NOT IMPLEMENTED IN THIS EXAMPLE */
  // loop through RowSeq.next().getStr(field),
  // test val.indexOf(pat)>=0, call delRow(loop counter)
}
    // deletes rows in which that field contains pat.
public RowSeq getFilteredRowList(String field,String pat){
  return null;
  /* NOT IMPLEMENTED IN THIS EXAMPLE */
}

public void delRows(String[]fieldNames,String[]vals){
  try{
    for(int i=1;i<=vals.length;i++)
    msgEnv.put("Parameter"+i,vals[i-1]);
    msgEnv.put("ParameterMax",""+vals.length);
    msgEnv.put("dbOperation","delRow");
    dbHandler.getQueryRows(msgEnv);
    msgEnv.put("ParameterMax","0");
   }catch(Exception ex){
   setMiscError("dbVS.delRows():\n"+Logger.stackTrace(ex));
  }
}
   // deletes rows in which each of those fieldnames
   // has exactly the corresponding value, apart from
   // case (nulls match each other).


}

⌨️ 快捷键说明

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