作者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