作者drkkimo (Dr.K)
看板java
标题Re: [J2EE]Tomcat和连结ODBC问题
时间Sun Mar 19 19:14:12 2006
==站内信件==
这个状况我在网路上看到不少人跟我有同样的状况 所以我认为这应该是个早有样版的例
子 所以我贴文上来的时候也没有说的过多 我觉得有类似经验的人应该看到就能了解我
说的是什麽状况 没类似经验的人也不代表什麽 只是可能刚好没碰过这个情形
其实这种问题事实上我是自已可以解决的 前文有人贴什麽FAQ我是刚好没看到那篇 但是
文件的东西我自已当然也会去看 说到底我贴文的最主要目的就是像前面说过的 来帮忙
灌个水
昨天P大有跟我通信过了 我也不会因此不来JAVA版啦 当然我来不来对很多人也没什麽
关系 不过我PO完这篇搞不好又会有人不服气的来个咄咄逼人的回应吧 如果火药味太
重 那就真的先暂且回避好了 免得伤人
: 这已经算是很轻松的讨论啦 XD
: 至少有问题也有人解答了,事情都解决了还有甚麽好不轻松的。
老实说我主要目地是来灌水 有没有解答对我来说并不是那麽重要 类似的
状况我如果不能自已处理就不用混了
: 这类型的文章,个人觉得还不算笔战吧。
你也是在”我觉得”呀 没例子没经验没长文 根本就像颗空洞的汽球 一戳就破
: 没例子没引文"没长文"没经验 <=重点 (奸笑)
: 甚麽都没有根本就是一团空,甚麽都是"我觉得"的文章,
: 根本就像颗空洞的汽球,一戳就破.....
那麽认真干麽 不知道你在想什麽? 又不是在辩论比赛 还真无聊= =
: 毕竟别人不知道你的背景,也不知道你的顾虑,你该把你觉得其他人
: 能考虑到的东西写清楚啊。
: 就好像你用1.2.0的JDK然後跑来问问题,别人照惯例回覆你要用甚麽甚麽,
: 结果1.2.0的JDK不能跑,你还怪人家,这样很不合理啊 XD
: 前面说专题要顾虑蛮多事情的,可是一直没提到这个顾虑跟要用JDBC
: 的关连。XD
最後还是PO点跟JAVA有关的东西 不然好像不合版规 如果PO了还是不合板规我也没辨法
了 板规太长不容易一下子看完
这个问题似乎是新版的Tomcat建议不要再使用JDBC-ODBC吧 解决方法我想用JDBC-MS SQL
应该可以 不过这样还要再下载驱动程式 连结字串也要改变 或着换回4.X版就可以
立刻解决(原先我们就是用旧版 只是想改成最新版比较完善)也是一个方法吧
把我目前的专题的部份程式码贴上来好了 如果有兴趣有空闲的话也许可以看看指教一下
都是大学生写的东西而已 我学JAVA也不久 如果觉得写得不够高深就不要太评批了
package Logic.EntryTool;
import java.sql.*;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import Logic.Product;
import Logic.ProductItem;
import Logic.User;
public class ResourceManager {
protected String JDBCStr="sun.jdbc.odbc.JdbcOdbcDriver",
ConnecStr="jdbc:odbc:abc";
protected Connection con;
protected Statement st;
public ProductItem getProductItem(int ID) throws SQLException, Exception{
//以资料库中的ID来查询产品项目
return new RMProductItem(this,ID);
}
public Product getProduct(int ID) throws SQLException, Exception{
//以资料库中的ID来查询产品
return new RMProduct(this,ID);
}
public User getUser(String ID,String password){
User u=null;
try {
u=new User(this,ID,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
u=null;
} catch (Exception e) {
// TODO Auto-generated catch block
u=null;
} catch (Throwable e) {
// TODO Auto-generated catch block
u=null;
}
return u;
}
public ResourceManager() throws SQLException, Exception{
this.getStatement();
}
public ResultSet SQLQuery(String SQLStr) throws SQLException, Exception{
//用字串来下SQL查询 资料库的连线由RM来保持连接 并一个RM管理一条连线
return this.getStatement().executeQuery(SQLStr);
}
public void close(){
try {
this.st.close();
this.con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected Connection getConnection() throws SQLException,Exception{
if(this.con==null||this.con.isClosed()){
Class.forName(JDBCStr).newInstance();
con=DriverManager.getConnection(ConnecStr);
}
return con;
}
protected Statement getStatement() throws SQLException, Exception{
Connection con=this.getConnection();
if(this.st==null)this.st=con.createStatement();
return this.st;
}
/**
* @param args
* @throws Exception
* @throws SQLException
*/
public static void main(String[] args) throws SQLException, Exception {
// TODO Auto-generated method stub
System.out.println("TE ST".replaceAll(" ","abc"));
}
}
class RMProductItem extends ProductItem{
protected ResourceManager RM;//资源管理小帮手 负责维护一条资料库连线的持续建立。
protected final int ID;//产品类别在资料库中的ID
protected int SuperItemID;//父产品类别在资料库中的ID
protected int SubItemCount;//子产品类别的数量
protected int ProductCount;//子产品的数量
public RMProductItem(ResourceManager RM,int ID) throws SQLException, Exception{
super();
this.RM=RM;
this.ID=ID;
//----------------------依据传入的ID和利用RM,从资料库取得编号ID的产品类别的名称、
//父类别名称、子类别数量、子产品数量… 等资讯。
ResultSet rs=RM.SQLQuery("select * from pro_productItem where NO="+ID);
rs.next();
this.Name=rs.getString("name");
try{
this.SuperItemID=
Integer.getInteger(rs.getString("super_item")).intValue();
}catch(NullPointerException npe){this.SuperItemID=-1;}
rs.close();
//-----------------------------------------------------------
rs=RM.SQLQuery("select count(*) as a from pro_productItem where super_item="+this.ID);
rs.next();
this.SubItemCount=new Integer(rs.getString(1)).intValue();
rs.close();
//-----------------------------------
rs=RM.SQLQuery("select count(*) from pro_product where item="+this.ID);
rs.next();
this.ProductCount=this.StringtoInt(rs.getString(1));
rs.close();
}
public String getSuperItemName() {
// TODO Auto-generated method stub
//取得父产品类别的名称
String SuperItemName=null;
try {
ResultSet rs=
RM.SQLQuery("select * from pro_productItem where No="+SuperItemID);
rs.next();
SuperItemName=rs.getString("Name");
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
SuperItemName=null;
} catch (Exception e) {
// TODO Auto-generated catch block
SuperItemName=null;
}
return SuperItemName;
}
public ProductItem getSuperItem() {
// TODO Auto-generated method stub
//取得父产品类别 用ProductItem的介面来隐藏RMPorductItem的一些跟资料库有关的动作
try {
return new RMProductItem(this.RM,this.SuperItemID);
} catch (SQLException e) {//如果这个产品类别,没有父产品类别,会传回null;
// TODO Auto-generated catch block
return null;
} catch (Exception e) {
// TODO Auto-generated catch block
return null;
}
}
public String[] getSubItemName() {
// TODO Auto-generated method stub
//取得所有子产品类别的名称
if(this.SubItemCount==0)return~(略)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.172.203.219