⑴ 實現資料庫和java的鏈接怎麼操作資料庫
之前在遠標做過用JAVA連接資料庫主要有兩種方式,一是用JDBC-ODBC橋來連接,二是用相關廠商提供的相應驅動程序來連接,襪枯首先談談第一種連接。
JDBC-ODBC橋接器是用JdbcOdbc.Class和一個用於訪問ODBC驅動程序的本地庫實現的。對於WINDOWS平台,該本地庫是一個動態連接庫DLL(JDBCODBC.DLL)。
由於JDBC在設計上與ODBC很接近。在內部,這個驅動程序把JDBC的方法映射到ODBC調用上,這樣,JDBC就可以和任何可用滾好敗的ODBC驅動程序進行交互了。這種橋接器的優點是,它使JDBC目前有能力訪問幾乎所有的資料庫。通行方式如圖所示:
應用程序---JDBC API---JDBC-ODBC---ODBC API---ODBC層---數據源
具體操作方法為:
首先打開控制面板的管理工具,打開數據源(ODBC),在用戶DSN裡面添加數據源(即你要連接的資料庫的名字),在這里假定連接SQL SERVER 2000的GoodsSupply資料庫。名稱填寫你要連接的資料庫的名稱(GoodsSupply),然後逐步設置,如果選用了使用SQL-SERVER密碼認證的話,就要輸入相應的用戶名及密碼連接到資料庫。一路下一步設置完成。
在JAVA裡面編寫程序進行測試,在這里我的程序是讓用戶輸入任意的表名與與列名,把該列的所有數據輸出。源代碼如大顫下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.*;
public class ODBCBridge {
public static void main(String[] args) {
String url="jdbc:odbc:GoodsSupply";
Statement sm=null;
String command=null;
ResultSet rs=null;
String tableName=null;
String cName=null;
String result=null;
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
try {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //載入驅動
}catch(ClassNotFoundException e){
System.out.println("Can not load Jdbc-Odbc Bridge Driver");
System.err.print("ClassNotFoundException:");
System.err.println(e.getMessage());
}
Connection con=DriverManager.getConnection(url,"USER","PASSWORD"); //使用SQL-SERVER2000認證
DatabaseMetaData dmd=con.getMetaData(); //DMD為連接的相應情況
System.out.println("連接的資料庫:"+dmd.getURL());
System.out.println("驅動程序:"+dmd.getDriverName());
sm=con.createStatement();
System.out.println("輸入表名");
tableName=input.readLine();
while(true) {
System.out.println("輸入列名(為空時程序結束):");
cName=input.readLine();
if(cName.equalsIgnoreCase(""))
break;
command="select "+cName+" from "+tableName;
rs=sm.executeQuery(command); //執行查詢
if(!rs.next())
System.out.println("表名或列名輸入有誤");
else {
System.out.println("查詢結果為:");
do
{
result=rs.getString(cName);
//資料庫語言設置為中文,不用轉換編碼
//result=new String(result.getBytes("ISO-8859-1"),"GB2312");
System.out.println(result);
}while(rs.next());
}
}
}catch(SQLException ex) {
System.out.println("SQLException:");
while(ex!=null) {
System.out.println("Message:"+ex.getMessage());
ex=ex.getNextException();
}
}catch(Exception e) {
System.out.println("IOException");
}
}
}
⑵ java中連接資料庫的方式,有JDBC還有什麼
JAVA連接資料庫的方式有多種:
根據所需要的不同資料庫驅動分,分為四種:
1:1類驅動。這就是JDBC-ODBC橋的方式。但這種方式不適合程序的重用與維護,不推薦使用。需要資料庫的ODBC驅動。
2:2類驅動。這就是JDBC+廠商API的形式。廠商API一般使用C編寫,所以,這種方式也不長使用。
3:3類驅動。這就是JDBC+廠商Database Connection Server+DataBase的形式。
這種方法就是在JAVA 與 DATABASE之間價起了一台專門用與資料庫連接的伺服器(一般由資料庫廠商提供)。他的好處在於能優化連接。
4:4類驅動。這就是純JDBC+DATABASE的連接方式。也是推薦的連接方式。這使得APPLICATION與資料庫分開,開發者只需關心內部邏輯的實現而不需注重資料庫連接的具體實現。在這其中有兩種連接的方式:
硬編碼方式,就是在程序中硬性編入資料庫連接的所須參數。
JNDI DataSource方式。就是在程序運行的外布環境中又稱(Context)設置一個datasource數據源,有一個jndi 名稱,程序只須查找此名稱就可得到一個資料庫連接的對象。
⑶ JAVA如何連接資料庫
java連接資料庫的代碼 位於MVC中的M(模型層)中,主要負責與資料庫打交道。
本人把我以前寫的代碼 加上注釋 給你看看 希望對你有幫助。
public class UserInfoDAO {
//驗證登陸名/密碼sql語句
//private -----這個sql語句只在本類內部使用,沒有必要public
//static -----sql語句僅僅一份就足夠了
//final -----sql語句一般在運行時不變,final修飾的變數相當於常量
//常量名所有字母大寫
private static final String SQL_CHECK_USERINFO =
"SELECT LOGINNAME,USERNAME,PASSWORD,AGE,ADDRESS FROM USERINFO WHERE LOGINNAME=? AND PASSWORD = ?";
public UserInfoDAO() {
}
/**
* 驗證登陸名/密碼方法
* @param u UserInfo
* @return boolean
*/
public boolean checkUser(UserInfo u) {
boolean b = false;//驗證是否成功的標識
Connection conn = null;//資料庫連接的引用
PreparedStatement pstmt = null;//PreparedStatement引用
ResultSet rs = null;//結果集引用
//調用ConnectionManager的方法,得到資料庫里連接實例
conn = ConnectionManager.getConnection();
try {
//通過Connection的prepareStatement()方法構建PreparedStatement實例,參數為sql語句
pstmt = conn.prepareStatement(SQL_CHECK_USERINFO);
//為sql語句中的?賦值,注意序號從1開始
pstmt.setString(1, u.getLoginName());
pstmt.setString(2, u.getPassword());
//執行查詢得到結果集
rs = pstmt.executeQuery();
//在結果集中循環,如果結果集中有記錄意味著驗證成功
b = rs.next();//標識置為true
while (rs.next()) {
b = true;//標識置為true
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
} finally {
//注意:一定在finally中釋放資料庫資源
cleanUP(rs, pstmt, conn);
}
return b;
}
private void cleanUP(ResultSet rs, PreparedStatement pstmt, Connection conn) {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
}
⑷ java怎麼和資料庫連接
1、載入驅動程序。
處理結果兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些 行中數據的訪問。
Statement
要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3 種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
⑸ Java程序為什麼需要資料庫連接池麻煩告訴我
。。。,各個都系出名門,都號稱具有什麼什麼優勢,更有好事者自己開發一個連接池。那為什麼要引入連接池呢?換句話說引入連接池會帶來什麼好處呢?下面就讓我們來分析一下,探測一下謎底。[編輯]解密[編輯]資料庫連接的原理
資料庫連接的本底上都是tcp連接,tcp連接位於osi的4層上,所有的資料庫驅動都在7層上實現自己的協議。資料庫連接的協議一般都是二進制的協議。應用程序和資料庫每建一個資料庫其實就是在底層建立了一個tcp線路,tcp線路是有底層的操作系統實現的,每個線路佔用兩個埠,發送埠和接收埠,這兩個埠在數據交換過程中會互換角色,時而發送、時而接收。當web應用連接mysql資料庫時,目標的接收埠是3306,連接時3306要被明確的指定,此時web應用方也有一個埠被佔用,這個埠不需要被明確的指定,是操作系統自動分配的。操作系統的埠數是有限的,一般預設可能是1024,不同的操作系統會有所不同,每一個socket也是佔用資源的,一般叫socket的資源描述符,這些資源對於操作系統來說也是有限的,linux下通過ulimit命令可以指定更多資源。[編輯]連接無法打開原因
佔用埠不釋放,每一個socket在調用close後,socket會處於Time_wait狀態,處於此狀態的socket需要經過一段時間才能釋放,這個釋放時間隨不同的操作系統而不同,socket的不釋放導致埠不釋放,再次連接時操作系統分配不出埠
socket文件描述符不釋放,還是上面的原因,socket資源不釋放,操作系統不能分配新的資源[編輯]建立連接的資源開銷
java的資料庫連接相對來說是重量級的,構建一個連接的系統開銷很大,不停的關閉、創建資料庫連接對應用系統來說開銷太大[編輯]連接池的應用
連接池是存儲、管理資料庫連接的容器,應用程序把獲取資料庫連接的功能委託給連接池,每個連接池都有一個上限,如果連接池達到上限,應用程序線程申請連接時被堵塞,等待其他線程釋放連接,每個線程使用完連接後並不馬上關閉,至少把它返還給連接池。由於連接的共享,不會頻繁的創建、銷毀連接,因此就不會增加創建連接的開銷,也不會出現socket釋放延遲現象。[編輯]其他jndi連接池是整個web容器持有,容器內所有的應用共享,有可能造成應用之間的競爭
應用級的連接池,粒度較小,容易控制
⑹ java資料庫連接文件在哪
一般來說,連接文件放在哪沒有固定的說法,那要看你用的是什麼框架,spring,struts,java,jsp,hibernate等的連接位置都不同,有的在配置文件里,有的在代碼里,tomcat的server.xml中也可以配置資料庫連接,如果你的再java文件中,那就從各個文件中尋找類似下面的代碼:
String driver ="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/test";
String user="root";
String password="";
try{
Class.forName(driver);
}
catch(Exception e){
System.out.println("無法載入驅動程序" +driver);
}
try{
Connection con=DriverManager.getConnection(url,user,password);
if(!con.isClosed())
System.out.println("資料庫連接成功");
con.close();
}
catch(SQLException ee){
System.out.println("資料庫連接失敗");
}
}
}
關鍵在Connection con=DriverManager.getConnection(url,user,password);
這一句,java,jsp主要用這個連接的,其餘的只是把這個封裝了。無非需要com.mysql.jdbc.Driver,user,password這三個欄位,從項目里搜索或一個一個找應該可以找到。搜索時最好用com.mysql.jdbc.Driver或其中一部分來搜索。
======================
別人給你的源程序,那說明他本來裡面應該已經有鏈接資料庫的文件了,你就不用自己寫了,資料庫鏈接可以在tomcat中也可以不在tomcat里,已經有了,就不用你自己寫了,你要做的就是找到資料庫鏈接文件,然後把裡面的地址、用戶名、密碼改成你目前資料庫的。
按照我給你的方法應該可以找到資料庫鏈接文件。
⑺ 如何寫一個與資料庫相連的Java程序
一、首先你要安裝好資料庫,並讓其運行起來。
二、在資料庫中准備好你需要的表與數據。
三、下載相應的資料庫連接器包,並放在JAVA所在目錄下的lib子目錄內。
四、參考示常式序理解各步操作的意義。
下面以MS SQL Server為例說明之。
安裝、運行該資料庫,並准備必要的數據。
從以下網址下載MSSQLServer的JDBC連接器包,並將其放到JAVA所在目錄下的lib子目錄內。
注意這是一個可運行的壓縮文件,需要運行、解壓得到最終的sqljdbc4.jar、sqljdbc.jar兩個文件,選其一(且只能將其一)放到JAVA所在目錄下的lib子目錄內。
下面是一個示例文件:
請注意本例中try語塊內的這一句中:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
jdbc與sqlserver的相互位置,在前一版本中這兩個位置是相反的(包括教材中所使用的版本),這一點切切注意。因為微軟最新將這兩個包名互相調換了,而一般教材未能做相應的修改。
其他紅色字體的標識符分別是庫名,表名,欄位名,請根據自己的設定做相應的修改。
示例代碼:
//=====================================================================
//
// File: connectURL.java
//
import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;
public class connectURL {
public static void main(String[] args) {
// Create a variable for the connection string.
String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
"databaseName=yourDBname;integratedSecurity=true;";
// Declare the JDBC objects.
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
// Establish the connection.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl);
// Create and execute an SQL statement that returns some data.
String SQL = "SELECT * FROM user";
stmt = con.createStatement();
rs = stmt.executeQuery(SQL);
// Iterate through the data in the result set and display it.
while (rs.next()) {
System.out.println(rs.getString("username") + " " + rs.getString("password"));
}
}
// Handle any errors that may have occurred.
catch (Exception e) {
e.printStackTrace();
}
finally {
if (rs != null) try { rs.close(); } catch(Exception e) {}
if (stmt != null) try { stmt.close(); } catch(Exception e) {}
if (con != null) try { con.close(); } catch(Exception e) {}
}
}
}