1. 怎麼用druid連接池連接mysql
現在常用的開源資料庫連接池主要有c3p0、dbcp、proxool三種,其中:
Spring 推薦使用dbcp;
Hibernate 推薦使用c3p0和proxool;
1、 DBCP:apache
DBCP(DataBase connection pool)資料庫連接池。是apache上的一個 java連接池項目,也是 tomcat使用的連接池組件。單獨使用dbcp需要3個包:common-dbcp.jar,common-pool.jar,common-collections.jar由於建立資料庫連接是一個非常耗時耗資源的行為,所以通過連接池預先同資料庫建立一些連接,放在內存中,應用程序需要建立資料庫連接時直接到連接池中申請一個就行,用完後再放回去。dbcp沒有自動的去回收空閑連接的功能。
2、 C3P0:
C3P0是一個開源的jdbc連接池,它實現了數據源和jndi綁定,支持jdbc3規范和jdbc2的標准擴展。c3p0是非同步操作的,緩慢的jdbc操作通過幫助進程完成。擴展這些操作可以有效的提升性能。目前使用它的開源項目有Hibernate,Spring等。c3p0有自動回收空閑連接功能。
3、 Proxool:Sourceforge
Proxool是一種Java資料庫連接池技術。是sourceforge下汪桐如的一個開源項目,這個項目提供一個健壯、易用的連接池,最為關鍵的是這個連接池提供監控的功能,方便易用,便於發現連接泄漏的情況。
對比:
1> 相同時間內同等量的線程數和循環次數下:通過對三個連接池的三個標志性性能測試參數(Average,median,90%Line)進行比較發現:性能困啟dbcp<=c3p0<proxool;
2> 不同情況下的輪搏同一資料庫連接池測試:通過觀察 Average,median,90%Line三個參數發
現三個連接池的穩定性(三種連接池的三個測試參數的變化情況)依次:穩定性dbcp>=c3p0>proxool。
結論:
通過對三種資料庫連接池的性能測試發現,proxool和 c3p0能夠更好的支持高並發,但是在穩定性方面略遜於 dpcp;
2. 高並發的MySQL數據查詢時,會不會選擇資料庫連接池
好了,基本概念說完了,言歸正傳進行比較了。
首先說明的一點,為了應用便於移植以及可配置的角度,建議還是使用jndi統一進行連接池的配置。怎麼配置其實網上都有很多例子,
這里簡單舉個例子(使用spring框架):
首先在應用的上下文定義中配置jndi名稱,如一個resource.xml文件,里邊的寫法
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>jdbc/myapp</value></property>
</bean>
注意dataSource這個bean在層(hibernate或jdbc)的配置文件里需要作為dataSource名稱的屬性配置到所有bean中
其中「jdbc/myds」這個就是jndi名稱了,下一步就是在應用伺服器連接池裡進行資料庫連接以及對應的jndi配置了
3. MyBatis 怎樣使用JNDI連接資料庫
JNDI是J2EE中一個很重要的標准,通常我們是在J2EE編程中用到,Tomcat中提供了在JSP和Servelt中直接使用JNDI的方法,主要是通過dbcp連接池
重點講使用:
1.配置context.xml
注意地址是:tomcat安裝目錄下的conf,該目錄下應該有了context.xml文件。貌似以前的版本是在項目目錄中的META-INF目錄下配置,我剛開始時參考是也是老版本的操作方法,誰知道試了一晚都不行。。。如果不是那裡配置的話會可能出現這樣的錯誤提示:javax.naming.NameNotFoundException: Name jdbc is not bound in this Context?
現在開始配置:
<Context path="/Manager" reloadable="true">
<Resource
name="hello"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
username="root"
password="123456"
maxIdle="4"
maxActive="4"
4. linux下怎麼配置jndi數據源配置
一 首先要配置Tomcat的server.xml文件,在對應的web應用的<Context>中加入<Resource>元素,比如:
<Context path="/Manager" reloadable="true">
<Resource
name="hello"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
username="root"
password="123456"
maxIdle="4"
maxActive="4"
maxWait="5000"
url="jdbc:mysql://127.0.0.1/jspdev"
/>
</Context>
其中:
name:指定悔山Resource的JNDI名字
type:指定Resource所屬的Java類名
driverClassName:指定瞎歷連接資料庫的JDBC驅動程序
username:指定連接資料庫的用戶名
password:指定連接資料庫的口令
maxIdle:指定資料庫連接池中的最大空閑連接數目,0表示不受限制
maxActive:指定資料庫連接池中的最大活動連接數目,0表示不受限制
maxWait:指定連接池中連接處於空閑狀態的最長時間,超過會拋出異常,-1表示無限
url:指定連接資料庫的URL
二 在Web應用中使用數據源:
javax.naming.Context提供了查找JNDI Resource的介面,可以通過三個步驟來使用數據源對象:
A.獲得對數據源的引用:
Context ctx = new InitalContext();
DataSource ds =
(DataSource)ctx.lookup("java:comp/env/hello");
B.獲得資料庫連接對象:
Connection con = ds.getConnection();
C.返回資料庫連接到連接池:
con.close();
在連接池中使用close()方法和在非連接池中使用close()方法的區別是:前者僅僅是把資料庫連接對象返回到資料庫連接池中,是連接對象又恢復到空閑狀態,而非關閉資料庫連接,而後者將直接關閉和資料庫的連接。
三 如果通過數據源訪問資料庫,由於數據源由Servlet容器創建並維磨前搜護,所以必須把JDBC驅動程序拷貝到Tomcat安裝目錄下的common/lib目錄下,確保Servlet容器能夠訪問驅動程序。
5. 請教linux下mysql資料庫使用JNDI訪問許可權的問題
正如提示所說,你這個ip沒權訪問mysql。 mysql裡面有個mysql庫,裡面有個user表或亂州告host表嘩明,進去有個host項,如果數值%就是開放給任意ip,如果設置了某個ip,則其他計算跡笑機無法訪問。
6. JDBC與JNDI這兩種連接方式有什麼區別
jdbc是資料庫中間代理商為了是java連接資料庫而定的一個協議 或者說是方法,通過jdbc-odbc的方法進行資料庫連接,是連接一次創建一次的做法 1,由資料庫驅動和協議組成連接數據的方法,調用中間商提供的類包,進行創建連接 2.再由連接去調用3種狀態. 3.由狀態來提供對資料庫的操作 jndi是一種命名樹的方式,把需要的類都列成目錄的樣式,需要哪個只要根據命名直接去 調用,是一種比較快潔的思想和行為. 當你要操作資料庫的用jdbc 操作命名服務用jndi Java Database Connectivity (JDBC)是一個標準的Java API,它由一組類和介面組成,Java應用程序開發人員使用它來訪問資料庫和執行SQL語句 JNDI(Java Name Directory Interface),可不僅僅是進行資料庫定位的, 它是給當前應用伺服器所管理的所有資源一個唯一的標識,包括資料庫,網頁,文件, 連接池等等。
配置 JNDI綁定
此處綁定的數據源是以 DBCP 為實現。首先必須將資料庫驅動(這里用了MYSQL資料庫)和DBCP所需要的 Jar 包復制到 Jetty 根目錄的 lib 目錄下。DBCP主要需要以下3個文件:
Commons-dbcp.jar
Commons-pool.jar
Commons-collections.jar
jdbc和jndi區別
Connection conn = null;
try{
Class.forName("com.mysql.jdbc.Driver",true,Thread.currentThread().getContextClassLoader());
conn = DriverManager.getConnection("jdbc:mysql://MyDBServer?user=***&password=****");
.....
conn.close();
}
catch(...){...}finally{
if(conn!=null){
try{
conn.close();
}
catch(...){...}
}
}
存在的問題?
1、資料庫伺服器名稱MyDBServer 用戶名和口令可能需要修改,由此引發JDBC URL修要修改;
2、資料庫可能該用別的產品;
3、隨著實際終端的增加,原配置的連接池參數可能需要調整;
解決辦法
程序員不必關心資料庫級別的事情,只需要知道如何引用即可
JNDI出現了。
定義數據源,也就是JDBC引用參數,給這個數據源設置一個名稱;
在程序中通過數據源名稱引用數據源,從而訪問資料庫;
//jndi連接
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/webtest");
conn = ds.getConnection();
//jdbc連接
Class.forName("com.mysql.jdbc.Driver",true,Thread.currentThread().getContextClassLoader());
conn = DriverManager.getConnection("jdbc:mysql://localhost/mismain?user=root&autoReconnect=true");
程序員開發時,知道要開發訪問MySQL資料庫的應用,於是將一個對 MySQL JDBC 驅動程序類的引用進行了編碼,並通過使用適當的 JDBC URL 連接到資料庫。
就像以下代碼這樣:
Connection conn=null;
try ...{
Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader());
conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");
......
conn.close();
} catch(Exception e) ...{
e.printStackTrace();
} finally ...{
if(conn!=null) ...{
try ...{
conn.close();
} catch(SQLException e) ...{}
}
}
這是傳統的做法,也是以前非Java程序員(如Delphi、VB等)常見的做法。這種做法一般在小規模的開發過程中不會產生問題,只要程序員熟悉Java語言、了解JDBC技術和MySQL,可以很快開發出相應的應用程序。
沒有JNDI的做法存在的問題:1、資料庫伺服器名稱MyDBServer 、用戶名和口令都可能需要改變,由此引發JDBC URL需要修改;2、資料庫可能改用別的產品,如改用DB2或者Oracle,引發JDBC驅動程序包和類名需要修改;3、隨著實際使用終端的增加,原配 置的連接池參數可能需要調整;4、……
解決辦法:程序員應該不需要關心「具體的資料庫後台是什麼?JDBC驅動程序是什麼?JDBC URL格式是什麼?訪問資料庫的用戶名和口令是什麼?」等等這些問題,程序員編寫的程序應該沒有對 JDBC 驅動程序的引用,沒有伺服器名稱,沒有用戶名稱或口令 —— 甚至沒有資料庫池或連接管理。而是把這些問題交給J2EE容器來配置和管理,程序員只需要對這些配置和管理進行引用即可。
由此,就有了JNDI.
用了JNDI之後的做法:首先,在在J2EE容器中配置JNDI參數,定義一個數據源,也就是JDBC引用參數,給這個數據源設置一個名稱;然後,在程序中,通過數據源名稱引用數據源從而訪問後台資料庫。
具體操作如下(以JBoss為例):
1、配置數據源
在JBoss 的 D:\jboss420GA\docs\examples\jca 文件夾下面,有很多不同資料庫引用的數據源定義模板。將其中的 mysql-ds.xml 文件Copy到你使用的伺服器下,如 D:\jboss420GA\server\default\deploy。
修改 mysql-ds.xml 文件的內容,使之能通過JDBC正確訪問你的MySQL資料庫,
如下:
Connection conn=null;
try ...{
Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader());
conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");
......
conn.close();
} catch(Exception e) ...{
e.printStackTrace();
} finally ...{
if(conn!=null) ...{
try ...{
conn.close();
} catch(SQLException e) ...{}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/lw</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>rootpassword</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
這里,定義了一個名為MySqlDS的數據源,其參數包括JDBC的URL,驅動類名,用戶名及密碼等。
2、在程序中引用數據源:
Connection conn=null;try ...{
Context ctx=new InitialContext();
Object datasourceRef=ctx.lookup("java:MySqlDS"); //引用數據源 DataSource ds=(Datasource)datasourceRef; conn=ds.getConnection();
......
c.close();
} catch(Exception e) ...{
e.printStackTrace();
} finally ...{
if(conn!=null) ...{
try ...{
conn.close();
} catch(SQLException e) ...{ }
}
}
直接使用JDBC或者通過JNDI引用數據源的編程代碼量相差無幾,但是現在的程序可以不用關心具體JDBC參數了。
在系統部署後,如果資料庫的相關參數變更,只需要重新配置 mysql-ds.xml 修改其中的JDBC參數,只要保證數據源的名稱不變,那麼程序源代碼就無需修改。
由此可見,JNDI避免了程序與資料庫之間的緊耦合,使應用更加易於配置、易於部署。
7. java如何訪問資料庫
Java可以使用JDBC訪問資料庫,也可以使用各類ORM框架訪問資料庫,但這些框架最終還是通過JDBC訪問資料庫,它們只是封裝了資料庫操作,而使得開發者可以減少這部分消耗。因此,本文只講解JDBC訪問方式。
JDBC訪問一般分為如下流程:
1、載入JDBC驅動程序:
在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接資料庫時的協議、子協議、數據源標識。
•書寫形式:協議:子協議:數據源標識
協議:在JDBC中總是以jdbc開始
子協議:是橋連接的驅動程序或是資料庫管理系統名稱。
數據源標識:標記找到資料庫來源的地址與連接埠。
例如:(MySql的連接URL)
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。
3、創建資料庫的連接
•要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,該對象就代表一個資料庫的連接。
•使用DriverManager的getConnectin(String url,String username,String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和密碼來獲得。
例如:
//連接MySql資料庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("資料庫連接失敗!");
se.printStackTrace() ;
}
4、創建一個Statement
•要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
具體的實現方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
5、執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句,返回一個結果集(ResultSet)對象。
2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
•ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中數據的訪問。
•使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1); // 此方法比較高效(列是從左到右編號的,並且從列1開始)
}
7、關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:
1、關閉記錄集
2、關閉聲明
3、關閉連接對象
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
8. java連接資料庫的詳細步驟
JDBC:
java database connective
主要作用:
連接程序使用的資料庫
使用步驟:
1. 引入外部jar包(mysql提供的Java使用者的連接器)
工程上右鍵-->build path --> config buildpath --> liberies
-->add external jars
-->選擇對應的mysql-connectorXXXXXX.jar
看到工程上有jar文件則證明引入成功
2. 編程:
(1):注冊資料庫驅動
Class.forName("com.mysql.jdbc.Driver");
(2):創建連接
String url = "jdbc:mysql://192.168.0.243:3306/test";
String userName = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, userName, password);
(3):創建SQL信使
Statement stmt = conn.createStatement();
(4):執行SQL語句
int i = stmt.executeUpdate("insert into employee values ('10070004', '張三豐', 1, '2005-05-23', 0, 1001, '2007-02-02', 200)");
(5):異常捕獲、關閉資源
9. 怎樣配置tomcat的jndi資料庫連接
是JDBC資料庫旦陪鬧連接吧?
先建立ODBC
一、jsp連接Oracle8/8i/9i資料庫(用thin模式)
testoracle.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<亂脊html>
<body>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl為你的資料庫的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
二、jsp連接Sql Server7.0/2000資料庫
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs為你的資料庫的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一模罩個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
三、jsp連接DB2資料庫
testdb2.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
四、jsp連接Informix資料庫
testinformix.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB為你的資料庫名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
五、jsp連接Sybase資料庫
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/tsdata";
//tsdata為你的資料庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
六、jsp連接MySQL資料庫
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//testDB為你的資料庫名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
七、jsp連接PostgreSQL資料庫
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/soft"
//soft為你的資料庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
10. tomcat怎麼連接mysql
msql資料庫連接:
一、傳統方法:
1、本人使用JDBC驅動mysql-connector-java-5.1.6-bin.jar,將此驅動包放到%Tomcat_Home%\common\lib\下,
2、在應用程序中載入此包,右鍵項目屬性->java build path->libraries->external libraries
3、在應用程序中載入驅動,Class.forName("com.mysql.jdbc.Driver").newInstance()
4、 用java.sql.DriverManager類取得一連conn=DriverManager.getConnection(url);
5、用java.sql.Statement介面創建stmt 對象,stmt=conn.createStatement();
或java.sql.PreraredStatement介面 pstmt;
6、 用java.sql.ResultSet介面創建rst對象,rst = stmt.executeQuery(sql語句);
7、 處理結果集,斷開資料庫連接。
二、數據池連接技術
1、 將mysql-connector-java-5.1.6-bin.jar,也在%Tomcat_Home%\common\lib\下,
2、 在tomcat中manager中配置數據源名,配置完後內容自動放在conf\server.xml中。
3、 在conf\catalina\localhost\下建你應用程序的xml文件,例wei2.xml中,內容為<Context docBase="wei2" path="/wei2">
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>
其中jdbc/mysql為配置的JNDI;
下面說下JNDI與DataSource
JNDI java naming directory interface命名和目錄介面命名服務來使組件定位到其它組件和資源(資料庫資源),JNDI所有名應該以字元串java:comp/env開始;
要定位JDBC資源中,這時就可以編寫代碼使用JNDI的lookup()方法來定位到這個資源了。
JNDI命名服務有一組將名稱與對象聯系在一起的綁定。JNDI中的lookup()方法傳遞一個JNDI參數(java:comp/env/myjdbc,前面java:comp/env是必要的。),返回相應的對象(返回類型為DataSource,若為資料庫,則可用DataSource中的getConnection()方法獲取資料庫連接).
DataSoure 是javax.sql.DataSource類型。
資料庫連接池分三步:
1、 指定資料庫連接的邏輯名,起名java:comp/env/myjdbc
2、 獲取與邏輯名相當的DataSource對象,代碼為:
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(「java:comp/env/myjdbc」);
3、 由DataSource對象獲取Connection對象
Connection con=ds.getConnection();
綜上所有步驟:
Connection con;
Private void init(){
Try{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(「java:comp/env/jdbc/mysql」);
Conn = ds.getConnection();
}
Catch(Exception e){
e.printStackTrace();
}
}
這段代碼使用連接池技術返回一個Connection對象.