具體操做:java
1) 將odbc文件拷貝到項目中web
Odbc文件所在目錄: oracle安裝目錄下- product – db_1 – jdbc -lib – odbc14.jarsql
複製到項目的 webRoot – webinf -lib 中數據庫
在項目中添加引用tomcat
2) 實現數據查詢oracle
Connection connection=null;eclipse
Statement stmt=null;工具
ResultSet rs=null;開發工具
try {url
//(1)Class.forName()加載驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
//(2)DriverManager.getConnection(URL,用戶名,密碼)得到數據庫鏈接 (Connection)
connection=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:news","scott","tiger");
//(3)得到Statement對象,執行SQL語句
String sql="select * from news_detail";
stmt=connection.createStatement();
rs=stmt.executeQuery(sql);
//(4)處理執行結果(ResultSet),
while(rs.next()){
int id=rs.getInt("id");
String title=rs.getString("title");
Timestamp time=rs.getTimestamp("createdate");
//輸出
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//釋放資源
try {
rs.close();
stmt.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String sql="insert into news_detail(id,categoryId,createdate) values(?,?,?)";
pstmt=connection.prepareStatement(sql);
pstmt.setInt(1, id);
pstmt.setInt(2, categoryId);
pstmt.setTimestamp(6, new java.sql.Timestamp(createdate.getTime()));
int i=pstmt.executeUpdate();
//(4)處理執行結果
if(i>0)
System.out.println("插入成功!");
目的: 更改數據庫時,便於修改,靈活。
屬性文件: 把相關數據庫配置信息寫在文件中,並保持在項目內,在程序中讀取文件中的信息,從而進行數據庫鏈接。在Java中提供了 Properties 類,來讀取 .properties(屬性)文件。在項目中默認路徑(src)下建立文件,名稱爲 db.properties (名稱可自定義,擴展名必須爲 properties), 編輯文件內容
1) src – 新建 – other - *.properties (以.properties結尾,保存數據鏈接信息)
jdbc.driver_class=oracle.jdbc.driver.OracleDriver
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:news //路徑
jdbc.connection.username=scott //用戶名
jdbc.connection.password=tiger //密碼
2) 使用參數鏈接DB (讀取配置文件)
詳見 編寫通用DAO中 util 目錄下的 ConfigManager.java
3) 讀取屬性文件
package com.pb.news.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//讀取配置文件(屬性文件)的工具類
public class ConfigManager {
private static ConfigManager configManager;
//properties.load(InputStream);讀取屬性文件
private static Properties properties;
private ConfigManager(){
String configFile="database.properties";
properties=new Properties();
InputStream in=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(in);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//以單例模式建立、得到對象實例
public static ConfigManager getInstance(){
if(configManager != null){
return configManager;
}else{
makeInstance();
return configManager;
}
}
//同步方法,保證在同一時間,只能被一我的調用
private static synchronized void makeInstance(){
if(configManager==null){
configManager=new ConfigManager();
}
}
public String getString(String key){
return properties.getProperty(key);
}
}
4) 實現數據查詢
爲了不數據冗餘,先編寫接口,而後編寫實現接口,繼承 BaseDao.java 的類。
數據庫鏈接池負責分配、管理和釋放數據庫鏈接,它容許應用程序重複使用一個現有的數據庫鏈接,而再也不是從新創建一個;釋放空閒時間超過最大空閒時間的數據庫鏈接,以免由於沒有釋放數據庫鏈接而引發的數據庫鏈接遺漏。
一、Tomcat中加入數據庫驅動文件
將數據庫中的odbc14.jar 文件拷貝到 tomcat 的安裝目錄的lib 文件中
二、配置Tomcat的conf/context.xml (Tomcat的安裝目錄)
<Resource name="jdbc/news"
auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="scott" password="tiger"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:news"/>
(! 項目編寫過程當中,有個Server文件夾,裏面是項目運行過程當中從真實Tomcat中拷貝過來的,因此此處還須要將這段文件拷貝到Server目錄中的 conf/context.xml中。此問題和開發工具備關,這是javaee eclipse的一個bug)
三、配置應用程序的(WEB-INF文件夾中)web.xml文件
(可選,若是JDBC1.6以上此步可略過)
<resource-ref>
<res-ref-name>jdbc/news</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
四、使用JNDI(JAVA的命名和目錄接口)獲取鏈接對象
public Connection getConnection2() {
try {
//初始化上下文
Context cxt=new InitialContext();
//獲取與邏輯名相關聯的數據源對象
DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");
conn=ds.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}