1. JAVA JDBC連接DB2資料庫問題
com.ibm.db2.jdbc.app.DB2Driver你的jar包里找不攜碼沒到這個類。 應該是你導入的包是錯的吧 追問: 我加的是辯納這幾個包您看看對不對:db2jcc_license_cisuz.jar db2jcc_license_cu.jar db2jcc.jar db2jcc_javax.jar!這4個包 回答: 我沒用過DB2 所以不是很清楚。我是看你的異常信息說那個DB2Driver類沒找到 追問: 也就是說很有可能是jar包有問題是嗎 回答:模禪 嗯 追問: 我去下個其他版本的看看
2. JDBC連接DB2資料庫問題,連接上了但執行查詢出錯!!!
USERS表是建立在那個Schema上的,把Schema的名字也加到sql語句上,「select * from Schema.USERS」
下面是SQLSTATE=42704的解釋。
SQL0204N "<名稱>" 是一個未定義的名稱。
解釋:
此錯誤由以下之一引起:
o 未在資料庫中定義由 "<名稱>" 標識的對象。
o 在表上未定義由 "<名稱>" 標識的數據分區。
o 正在使用某個數據類型。此錯誤可能是由於下
列原因而發生的:
- 如果 "<名稱>"
是限定名稱,則具有此名稱的數據類型在數據
庫中不存 在。
- 如果 "<名稱>"
是非限定名稱,則用戶的函數路徑不包含期望
的數據類 型所屬於的模式。
- 該數據類型在創建時間戳記早於程序包綁定時
間的資料庫中不存在(適用於靜態語句)。
- 如果數據類型在 CREATE TYPE 語句的 UNDER
子句中,則該類型名可能與正定義的類型相同
,這 是無效的。
o 下列其中一項中正在引用某個函數:
- DROP FUNCTION 語句
- COMMENT ON FUNCTION 語句
- CREATE FUNCTION 語句的 SOURCE 子句
如果 "<名稱>"
是限定名稱,則函數不存在。如果
"<名稱>"
是非限定名稱,則當前函數路徑的任何模式中
都不存 在
此名稱的函數。注意,函數不能以
COALESCE、 NULLIF 或 VALUE
內置函數作為源函數。
o 在 CREATE SECURITY LABEL COMPONENT 語句中 UNDER
子句右邊使用了名為「名稱」的元素,但尚未
將該 元素定義為 ROOT
或者在其他某個元素下方(UNDER)。
o 下列其中一個標量函數指定了「名稱」標識的
安全策略,但在資料庫中未定義該安全策略。
- SECLABEL
- SECLABEL_TO_CHAR
- SECLABEL_BY_NAME
可為任何類型的資料庫對象生成此返回碼。
聯合系統用戶:在資料庫中未定義由 "<名稱>"
標識的對象,或者 "<名稱>" 不是 DROP NICKNAME
語句中的昵稱。
某些數據源不向 "<名稱>"
提供適當的值。在這些情況下,消息標記將具有以下格
式: "OBJECT:<數據源>
TABLE/VIEW",指示指定數據源的實際值未知。
不能處理該語句。
用戶響應:
確保在 SQL 語句中正確指定了對象名(包括任何必需
的限定符),並且它存在。
如果該名稱表示一個數據分區,則查詢目錄表
SYSCAT.DATAPARTITIONS
以找到一個表的所有數據分區。對於 SOURCE
子句中缺少的數據類型或函數,可能是該對象不存
在,或該對象處於某模式中,
3. JAVA JDBC連接DB2資料庫問題
JAVA連接DB2
/**了解基礎情況**/ 對於Java程序員而言,DB2 提供了兩種應用程序編程介面(API):JDBC 和 SQLJ。
JDBC:
JDBC 驅動程序分為舊的/CLI 驅動程序<db2java.zip>和新的通用 JDBC 驅動程序(Universal JDBC Driver)<db2jcc.jar>。
JDBC 是一個與供應商無關的動態 SQL 介面,該介面通過標准化的 Java 方法向您的應用程序提供數據訪問。
JDBC 類似於 DB2 CLI,因為您無須預編譯應用程序代碼,也無須將軟體包綁定到 DB2 資料庫。
作為一個與供應商無關的標准,JDBC 應用程序提供了更多的可移植性—這是當今異構業務基礎設施所必需的優點。
在執行 JDBC 應用程序期間,驅動程序將針對當前連接的 DB2 資料庫伺服器驗證 SQL 語句。
訪問期間的任何問題都會作為 Java 異常與相應的 SQLSTATE 和 SQLCODE 一起報告給應用程序。
SQLJ:
SQLJ 是一個用於從 Java 應用程序進行數據訪問的標准開發模型。
SQLJ API 是在 SQL 1999 規范中定義的。
新的通用 JDBC 驅動程序在一個實現中同時為 JDBC 和 SQLJ API 提供了支持。
JDBC 和 SQLJ 可以在同一個應用程序中互操作。
SQLJ 提供了獨特的使用靜態 SQL 語句進行開發以及在 DB2 包級別控制訪問的能力。
/**JDBC連接方式分析**/
JDBC 驅動程序體系結構分為四種類型:Type1,Type2,Type3,Type4。
Type1:
驅動程序基於 JDBC-ODBC 橋。
因此 ODBC 驅動程序可以與此類 JDBC 驅動程序(由 Sun 提供)結合起來使用。
IBM 不支持 Type 1 驅動程序,因此它不是推薦的環境。
Type2:
驅動程序依靠特定於操作系統的庫(共享庫)來與 RDBMS 通信。
應用程序將裝入這種 JDBC 驅動程序,而驅動程序將使用共享庫來與 DB2 伺服器通信。
DB2 UDB for Linux, UNIX和 WindowsV8.1 提供了兩種不同的 Type 2 驅動程序:
<1> 舊的/CLI JDBC 驅動程序在文件db2java.zip中提供。
其實現包名稱為COM.ibm.db2.jdbc.app.DB2Driver。
該驅動程序目前已被用於進行 J2EE 認證。
其別名「app 驅動程序」源自於一種觀念及其包名稱,
這種觀念就是:此驅動程序將通過遠程資料庫的本地 DB2 UDB 客戶機執行本地連接。
<2> 通用 JDBC 驅動程序在文件db2jcc.jar中提供。
其實現包名稱為com.ibm.db2.jcc.DB2Driver。
此驅動程序是 DB2 UDB for Linux, UNIX 和 Windows V8.1 中的新功能。
在最初的實現(V8.1)中,此驅動程序用於使用 Type 4 驅動程序體系結構與 DB2 伺服器進行直接的 Java 連接。
在 DB2 V8.1.2 中,您可以在 Type 2 體系結構中使用此驅動程序。
在 Type 2 體系結構中使用此驅動程序的一個主要原因是為了本地應用程序性能和分布式事務支持。
通用 JDBC Type 2 驅動程序分別使用com.ibm.db2.jcc.DB2XADataSource和com.ibm.db2.jcc.DB2ConnectionPoolDataSource來支持分布式事務和連接池。 註:在將來的版本中不會對舊的/CLI Type 2 驅動程序進行增強。
Type3:
驅動程序是一種純 Java 實現,它必須與 DB2 JDBC Applet 伺服器(DB2 JDBC Applet Server)通信才能訪問 DB2 數據。
此類驅動程序旨在使 Java applet 能訪問 DB2 數據源。
常被稱作「網路(net)驅動程序」,它是根據其包名COM.ibm.db2.jdbc.net命名的。DB2 V8.1 支持網路驅動程序,可以將其用於 JDBC 應用程序。
要求db2java.zip驅動程序總是處於與 DB2 Applet 伺服器相同的維護級別。
如果驅動程序在 applet 內使用,這就不是一個問題,因為瀏覽器會在應用程序執行期間下載相應的db2java.zip文件。
許多客戶使用 Type3 驅動程序而不是 Type2 驅動程序,以避免必需的 DB2 客戶機安裝和必需的DB2 CATALOG DATABASE命令,後者用於創建使用舊的/CLI 驅動程序進行 Type 2 連接所必需的資料庫目錄信息。
目前,WebSphere Application Server 和其它 J2EE 伺服器不支持 IBM Type 3 驅動程序,因為該驅動程序不支持分布式事務(JTA)。
將來的版本不會對 Type 3 驅動程序進行增強。
鼓勵使用通用 JDBC Type 4 驅動程序來替代 Type 3 驅動程序。
Type4:
驅動程序是僅用於 Java 的 JDBC 驅動程序,它直接連接到資料庫伺服器。
DB2 UDB for Linux, UNIX 和 Windows V8.1 引入了稱為「通用 JDBC 驅動程序(Universal JDBC driver)」的 Type 4 驅動程序。
通用 JDBC 驅動程序在文件db2jcc.jar中提供。
其實現包名為com.ibm.db2.jcc.DB2Driver。
請注意,通用 Type 2 和通用 Type 4 驅動程序具有相同的實現類名稱。
有兩種方法可以區別 DB2 在內部將實例化哪個驅動程序:
使用連接特性來確定連接是否使用共享庫(Type2),或者驅動程序是否會啟動來自 Java 應用程序的直接連接(Type4)。
重要:就 DB2 UDB V8.1.2 而言,通用 JDBC 驅動程序要求 CLASSPATH 中有許可證 JAR 文件和db2jcc.jar文件。
以下是所需的許可證 JAR 文件:
Cloudscape Network Server V5.1:db2jcc_license_c.jar
DB2 UDB V8 for Linux, UNIX 和 Windows 伺服器:db2jcc_license_su.jar
DB2 UDB for iSeries and z/OS 伺服器(與 DB2 Connect 和 DB2 Enterprise Server Edition 一起提供):db2jcc_license_cisuz.jar ****************************************************************驅動程序類型:db2java.zip, db2jcc.jar
注意:假如你使用db2java.zip,且web伺服器使用Tomcat的話,請將db2java.zip改名為db2java.jar,最好將zip解壓再用jar命令打包,直接改文件類型也行(呵呵,按照jar文件嚴格意義上來講這是不符合文法的<少了描述性文件:MANIFEST.MF>,能用就行)
還有一般情況下:就是使用 db2java.zip的話需要安裝db2客戶端, 使用db2jcc.jar是通過網路直接來連接的無需安裝db2客戶端(假如用在type2上還是要裝客戶端的)type2:
使用<db2java.zip>:
jdbc.driverClassName=COM.ibm.db2.jdbc.app.DB2Driver
jdbc.url=jdbc:db2:dataBaseName
假如你的工具使用的是myeclipse且使用的是tomcat plugin的話,請將db2jdbc.dll 拷貝到 %JAVA_HOME%/bin下,否則不行地啦
<是不是其他類型的使用db2java.zip驅動也有這個問題呢,不知道,沒試過,有空試一下>
使用<db2jcc.jar>:
jdbc.driverClassName=com.ibm.db2.jcc.DB2Driver
jdbc.url=jdbc:db2:dataBaseName
type3:
驅動:db2java.zip
jdbc.driverClassName=COM.ibm.db2.jdbc.net.DB2Driver
jdbc.url=jdbc:db2://ip:6789/DBNAME
注意:要在資料庫上執行 db2jstrt 6789 (這句啟動了db2jd進程,6789是默認的伺服器偵聽jdbc2連接的埠,也可以設置成另外的任意不沖突的埠。)
type4:
驅動:db2jcc.jar
資料庫字元集必須設置為utf-8
jdbc.driverClassName=com.ibm.db2.jcc.DB2Driver
jdbc.url=jdbc:db2://ip:port/DBNAME
4. db2資料庫連接,該怎麼處理(db2資料庫連接命令)
新建java工程
在java代碼中輸入如下代碼
importjava.sql.*;
publicclassDB2conn{
/**設置參數**/
privatestaticConnectionconn=null;
privatestaticStatementstmt=null;
privatestaticResultSetrs=null;
/**構造方法,鏈接資料庫**/
publicDB2conn(){
try{
System.out.println("正在連接資料庫..........");
Class.forName("com.ibm.db2.j.DB2Driver");//載入mysql驅動程序類
Stringurl="jdbc:db2://localhost:50000/toolsdb";//url為連接字元串
Stringuser="db2admin";//資料庫用戶名
Stringpwd="1234";//資料庫密碼
conn=(Connection).(url,user,pwd);
System.out.println("資料庫連接成功!!!");
}catch(Exceptione){
System.out.println(e.getMessage());
//e.();
}
}
publicstaticvoidmain(String[]args)throws{
DB2conna=newDB2conn();//實例化對象,作用是調用構造方法
a.getClass();//無意義
/**查詢語句**/
Stringsql="select*fromperson";
stmt=(Statement)conn.();
stmt.execute(sql);//執行select語句用()方法,執行insert、update、delete語句用神遊()方法。
rs=(ResultSet)stmt.();
while(rs.next()){//當前記錄指針移動到下一條記錄上
inti=rs.getInt(1);//得到當前記錄的第一個欄位(id)的值
Stringname=rs.getString(2);//得到第二個檔扒欄位(name)的值
Stringpsw=rs.getString("ppassword");//得游蠢銷到(password)的值
System.out.println(Integer.toString(i)""name""psw);
}
rs.close();//後定義,先關閉
stmt.close();
conn.close();//先定義,後關閉
}
}
5. jdbc連接db2資料庫時,報Unicode string can`t convert to Ebcdic string
jdbc和連接池對於你這個場景來說,都足夠,既然用spring管理了,建議還是使用連接池,另外,spring自身沒有實現連接池,一般都是對第三方連接池的包裝,常見的有C3P0,dbcp以及最近比較流行的boneCP等,這幾個配置都差不多太多,以boneCP為例:
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
destroy-method="close">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="idleConnectionTestPeriod" value="60" />
<property name="idleMaxAge" value="240" />
<property name="maxConnectionsPerPartition" value="30" />
<property name="minConnectionsPerPartition" value="10" />
<property name="partitionCount" value="2" />
<property name="acquireIncrement" value="5" />
<property name="statementsCacheSize" value="100" />
<property name="releaseHelperThreads" value="3" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
6. 使用jdbc 連接DB2資料庫 總是在連接池出
認證錯了,看看帳戶密碼及採用的連接方式是否正確。
7. jsp用jdbc連接db2資料庫的方法
資料庫版本:db2
UDB
v7.2
伺服器操作系統:aix4.3.3
1、關閉伺服器上的web服務;
2、停止jdbc偵聽進程db2jd,db2jd一般啟動的是6789的埠服務,
先用ps
-ef
|
grep
db2jd
查看到它的進程號
然後用kill
-9
進程號
命令停止;
3、在資料庫伺服器中,進入/usr/lpp/db2_07_01/java12目錄,執行./usejdbc2以啟用jdbc2;
4、將/usr/lpp/db2_07_01/java12下的db2java.zip拷貝到自己所在web工程的WEB-INFlib下,如果使用的是tomcat,將拷貝後的文件更名為db2java.jar;
5、在伺服器上,su
-
資料庫實例用戶名
執行db2jstrt
6789
(這句啟動了db2jd進程,6789是默認的伺服器偵聽jdbc2連接的埠,也可以設置成另外的任意不沖突的埠。)
6、在自己所建立工程中,建立一個測試的jsp文件,內容如下:
%@
page
contentType=text/html;
charset=gb2312
language=java
import=java.sql.*%
html
body
以下是從db2資料庫讀取的數據:hr
table
border=1
%
Class.forName(COM.ibm.db2.jdbc.net.DB2Driver).newInstance();
Connection
con=java.sql.DriverManager.getConnection(jdbc:db2://192.168.168.2:6789/chaodb,db2inst1,mima);
Statement
stmt=con.createStatement();
ResultSet
rst=stmt.executeQuery(select
username
from
tname);
while(rst.next())
{
out.println(tr);
out.println(td+rst.getString(username)+/td);
out.println(/tr);
}
//關閉連接、釋放資源
rst.close();
stmt.close();
con.close();
%
/table
/body
/html
說明:
192.168.168.2是伺服器的IP地址;
6789是jdbc2偵聽的埠號,需和伺服器端設置一致,如果伺服器本身用的就是6789,那麼程序的這個地方引用時,可省略這個號碼。
chaodb是建立在伺服器上的一個資料庫;
db2inst1是擁有chaodb資料庫的實例用戶;
mima是實例用戶db2inst1的密碼;
先在資料庫中建立一個表,名字是tname,其中有一列是username,錄入一些數據進去。
8. java中DB2資料庫的jdbc連接如何設置默認的schema
jdbc:db2://192.9.200.108:6789/SAMPLE
看看您肢襪圓的連接字元串是怎麼寫的?
這歷塌個應該好派是連接sample庫的
9. 連接到DB2資料庫。有廠商供應的JDBC 驅動器。你將使用什麼類型的驅動器
連接到DB2最好使用DB2自州頌帶的驅動器。一般使用JDBC type 4 driver。 DB2還提供Type 2的driver,但是V9.7及其以後Type 2已經不推薦使冊模鄭用了。 為了應用程序能夠更好的兼容不同版本碼明的DB2最好使用Type 4。
10. dbvisualizer連接db2提示jdbc和sqlj
當連接DB2提示出現SQLJ時,表示資料庫連接成功,可以進行訪問。
安裝好db2資料庫後,選中Connections,滑鼠右鍵選擇:Create Database Connection;選如差擇後會彈出以下彈出框,選擇:Use Wizard;此處可以任意輸入一個名字,只需無相同名稱即可;
選擇資料庫類型為:DB2;輸入訪問的資料庫名稱(sample),賬號(db2admin)、密碼(Admin2021)、埠號(50000),選擇完成finish即可;當查看到例如SQLJ的內容時,表示資料庫連接成功,可以進行訪問了。
DbVisualizer是橋洞一個完全基於JDBC的跨平台資料庫管理工具,內置SQL語句編輯器(支持語法高亮),凡是具有JDBC資料庫敏橡枯介面的資料庫都可以管理;
已經在Oracle, Sybase, DB2, Informix, MySQL, InstantDB, Cloudcape, HyperSonic ,Mimer SQL上通過測試。