新聞中心
隨著工廠生產(chǎn)的不斷增多和數(shù)據(jù)的廣泛收集,數(shù)據(jù)庫成為了生產(chǎn)管理中非常重要的工具。在數(shù)據(jù)庫中,join是一種非常重要的操作,它可以將不同的數(shù)據(jù)表進行合并,從而實現(xiàn)數(shù)據(jù)的聯(lián)合查詢。在工廠數(shù)據(jù)庫中,join的作用尤為明顯,它可以幫助工廠進行更加精確的數(shù)據(jù)查詢和分析,從而促進生產(chǎn)效率的提升。

成都創(chuàng)新互聯(lián)公司是工信部頒發(fā)資質(zhì)IDC服務器商,為用戶提供優(yōu)質(zhì)的西云機房服務
下面我們將介紹工廠數(shù)據(jù)庫如何實現(xiàn)join的功能,同時探討其中的實現(xiàn)原理和關鍵技術。
一、什么是join?
join是關系型數(shù)據(jù)庫中的一個重要操作,它可以將不同的表格根據(jù)某一列或者某幾列進行連接,得到一個包含所有查詢字段的新的關系表格。這樣可以使我們更加方便地查找和分析數(shù)據(jù)。在工廠中,join常常被用來查詢不同生產(chǎn)過程的數(shù)據(jù),從而得到一個更加準確和完整的生產(chǎn)記錄。
二、join的實現(xiàn)原理
工廠數(shù)據(jù)庫一般采用關系型數(shù)據(jù)庫,其中最為常見的是MySQL。在MySQL中,join的實現(xiàn)原理主要涉及到以下幾個方面:
1. 內(nèi)連接
內(nèi)連接是join操作的最基礎形式,它返回兩個表中所有符合條件的記錄。在MySQL中,內(nèi)連接可以使用join命令或者使用where關鍵字進行查詢。其中join命令可以再分為不同類型的內(nèi)連接,包括普通內(nèi)連接、自然內(nèi)連接、等值連接等。這些不同的內(nèi)連接類型可以支持不同的查詢需求。
2. 外連接
外連接可以返回左表或者右表中的所有記錄,同時將兩個表格進行合并。在MySQL中,外連接可以分為左外連接、右外連接和全外連接。左外連接可以保證左表格中所有的記錄都會被返回,而右外連接則保證右表格中所有的記錄都會被返回。全外連接則是左右兩個表格中所有記錄的合集。
3. 模糊連接
模糊連接主要用于處理匹配度較低的記錄。在MySQL中,模糊連接可以使用like語句進行實現(xiàn)。同時也可以使用正則表達式進行查詢。
三、join的關鍵技術
除了join的基礎實現(xiàn)技術之外,還有一些關鍵技術可以幫助我們更好地實現(xiàn)join操作,如下所示:
1. 索引
建立索引是提高數(shù)據(jù)庫查詢效率的一種重要方法。在進行join操作的時候,可以對連接用到的列加上索引,從而使查詢效率得到提升。同時還可以考慮減少不必要的列,從而減少查詢時間。
2. 表格的設計
在設計數(shù)據(jù)庫表格的時候,可以考慮將相關的列和記錄放到同一表格中,從而避免在join操作中出現(xiàn)不必要的列和記錄。同時可以采用多個小型表格的設計方式,從而減少查詢時間和系統(tǒng)的資源消耗。
3. 數(shù)據(jù)庫優(yōu)化
數(shù)據(jù)庫優(yōu)化是提高查詢效率的另一種重要方法??梢酝ㄟ^設置合理的數(shù)據(jù)庫參數(shù),如緩存大小、查詢緩存等等,從而在join操作中獲得更高的效率。
四、
工廠數(shù)據(jù)庫的join操作是其生產(chǎn)管理中非常重要的一環(huán)。通過join操作,我們可以將不同的生產(chǎn)數(shù)據(jù)進行連接,得到更加準確和完整的生產(chǎn)記錄。在對數(shù)據(jù)庫進行join操作的過程中,我們需要理解其基礎實現(xiàn)原理,同時采用關鍵技術進行優(yōu)化和改進。只有這樣,我們才能獲得更加高效和精準的生產(chǎn)管理能力。
相關問題拓展閱讀:
- 來了,MyBatisPlus的join聯(lián)表查詢
- 數(shù)據(jù)庫怎么獲得?什么是數(shù)據(jù)庫
來了,MyBatisPlus的join聯(lián)表查詢
眾所周知,mybatis plus 封裝的 mapper 不支持 join,如果需要支持就必須自己去實現(xiàn)。但是對于大部分的業(yè)務場景來說,都需要多表達 join,要不然就沒必脊信要采用關系型數(shù)據(jù)庫了。
那么有沒有一種不通過硬 SQL 的形式,通過框架提供 join 能力呢?答案是,可以有。經(jīng)過一段時間的插眼排眼操作,成功地封裝了一個 jar 包。本文講講它肢察的用法。
或者 clone 代碼到本地執(zhí)行 mvn install,再引入以上依賴。
注意:mybatis plus version >= 3.4.0。
對應sql
說明:
MPJLambdaWrapper 還有很多其他的功能
對應sql
對應 sql
說明:
對應sql
對應sql
針對以上 jar 感興趣的,可以下載對應的源碼,進一步地學習櫻饑輪!
數(shù)據(jù)庫怎么獲得?什么是數(shù)據(jù)庫
什么是數(shù)據(jù)庫?漏裂
數(shù)據(jù)庫是以某種文件結構存儲的一系列信息表,這種文件結構使您能夠訪問這些表、選擇表中的列、對表進行排序以及根據(jù)各種標準選擇行。數(shù)據(jù)庫通常有多個 索引與這些表中的許多列相關聯(lián),所以我們能盡可能快地訪問這些表。
以員工記錄為例,您可以設想一個含有員工姓名、地址、工資、扣稅以及津貼等內(nèi)容的表。讓我們考慮一下這些內(nèi)容可能如何組織在一起。您可以設想一個表包含員工姓名、地址和號碼。您希望保存的其它信息可能包括工資、工資范圍、上次加薪時間、下次加薪時間、員工業(yè)績評定等內(nèi)容。
這些內(nèi)容是否應保存在一個表格中?幾乎可以肯定不應該如此。不同類別的員工的工資范圍可能沒有區(qū)別;這樣,您可以僅將員工類型儲存在員工記錄表中,而將工資范圍儲存在另一個表中,通過類型編號與這個表關聯(lián)??紤]以下情況:
Key Lastname SalaryType SalaryType Min Max
1 Adams00
2 Johnson00
3 Smyth00
4 Tully 1
5 Wolff 2
SalaryType 列中的數(shù)據(jù)引用第二個表。我們可以想象出許多種這樣的表,如用于存儲居住城市和每個城市的稅值、健康計劃扣除金額等的表。每個表都有一個主鍵列(如上面兩個表中最左邊的列)和若干數(shù)據(jù)列。在數(shù)據(jù)庫中建立表格既是一門藝術,也是一門科學。這些表的結構由它們的范式指出。我們通常說表屬于1NF、2NF 或 3NF。
之一范式:表中的每個表元應該只有一個值(永遠不可能是一個數(shù)組)。(1NF)
第二范式:滿足 1NF,并且每一個非主鍵列完全依賴于主鍵列。這表示主鍵和該行中的剩余表元之間是 1 對 1 的關系。(2NF)
第三范式:滿足 2NF,并且所有非主鍵列是互相獨立的。任何一個數(shù)據(jù)列中包含的值都不能從其他列的數(shù)據(jù)計算得到。(3NF)
現(xiàn)在,幾乎所有的數(shù)據(jù)庫都是基于“第三范式 (3NF)”創(chuàng)建的。這意味著通常都有相當多的表,每個表中的信息列都相對較少。
從數(shù)據(jù)庫中獲取數(shù)據(jù)
假設我們希望生成一個包含員工及其工資范圍的表,在我們設計的一個返指閉練習中將使用這個表。這個表格不是直接存在在數(shù)據(jù)庫中,但可以通過向數(shù)據(jù)庫發(fā)出一個查詢來構建它。我們希望得到如下所示的一個表:
Name Min Max
Tully $30,000.00 $45,000.00
Johnson $30,000.00 $45,000.00
Wolff $45,000.00 $60,000.00
Adams $45,000.00 $60,000.00
Smyth $60,000.00 $75,000.00
我們發(fā)現(xiàn),獲得這些表的查詢形式如下所示
SELECT DISTINCTROW Employees.Name, SalaryRanges.Min,
SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey
ORDER BY SalaryRanges.Min;
這種語言稱為結構化查詢語言,即 SQL,而且它是幾乎目前所有數(shù)據(jù)庫都可以使用的一種語言。SQL-92 標準被認為是一種基礎標準,而且已更新逗穗多次。
數(shù)據(jù)庫的種類
PC 上的數(shù)據(jù)庫,如 dBase、Borland Paradox、Microsoft Access 和 FoxBase。
數(shù)據(jù)庫服務器:IBM DB/2、Microsoft SQL Server、 Oracle、Sybase、SQLBase 和 XDB。
所有這些數(shù)據(jù)庫產(chǎn)品都支持多種相對類似的 SQL 方言,因此,所有數(shù)據(jù)庫最初看起來好象可以互換。每種數(shù)據(jù)庫都有不同的性能特征,而且每一種都有不同的用戶界面和編程接口。
ODBC
如果我們能夠以某種方式編寫不依賴于特定廠商的數(shù)據(jù)庫的代碼,并且能夠不改變自己的調(diào)用程序即可從這些數(shù)據(jù)庫中得到相同的結果,那將是一件很好的事。如果我們可以僅為所有這些數(shù)據(jù)庫編寫一些封裝,使它們具有相似的編程接口,這種對數(shù)據(jù)庫編程獨立于供應商的特性將很容易實現(xiàn)。
什么是 JDBC?
JDBC 是對 ODBC API 進行的一種面向?qū)ο蟮姆庋b和重新設計,它易于學習和使用,并且它真正能夠使您編寫不依賴廠商的代碼,用以查詢和操縱數(shù)據(jù)庫。盡管它與所有 Java API 一樣,都是面向?qū)ο蟮?,但它并不是很高級別的對象集.
除 Microsoft 之外,多數(shù)廠商都采用了 JDBC,并為其數(shù)據(jù)庫提供了 JDBC 驅(qū)動程序;這使您可輕松地真正編寫幾乎完全不依賴數(shù)據(jù)庫的代碼。另外,JavaSoft 和 Intersolv 已開發(fā)了一種稱為 JDBC-ODBC Bridge 的產(chǎn)品,可使您連接還沒有直接的 JDBC 驅(qū)動程序的數(shù)據(jù)庫。支持 JDBC 的所有數(shù)據(jù)庫必須至少可以支持 SQL-92 標準。這在很大程度上實現(xiàn)了跨數(shù)據(jù)庫和平臺的可移植性。
安裝和使用 JDBC
JDBC 的類都被歸到 java.sql 包中,在安裝 Java JDK 1.4時會自動安裝。然而,如果您想使用 JDBC-ODBC 橋。JDBC-ODBC 驅(qū)動程序可從 Sun 的 Java 網(wǎng)站 (
) 輕松地找到并下載。在您擴充并安裝了這個驅(qū)動程序后,必須執(zhí)行下列步驟:
將 \jdbc-odbc\classes; 路徑添加到您的 PATH 環(huán)境變量中。
將 \jdbc-odbc\classes; 路徑添加到您的 CLASSPATH 環(huán)境變量中。
JDBC 驅(qū)動程序的類型
Java 程序連接數(shù)據(jù)庫的方法實際上有四種:
1. JDBC-ODBC 橋和 ODBC 驅(qū)動程序 — 在這種方式下,這是一個本地解決方案,因為 ODBC 驅(qū)動程序和橋代碼必須出現(xiàn)在用戶的每臺機器中。從根本上說這是一個臨時解決方案。
2. 本機代碼和 Java 驅(qū)動程序 — 它用另一個本地解決方案(該平臺上的 Java 可調(diào)用的本機代碼)取代 ODBC 和 JDBC-ODBC 橋。
3. JDBC 網(wǎng)絡的純 Java 驅(qū)動程序 — 由 Java 驅(qū)動程序翻譯的 JDBC 形成傳送給服務器的獨立協(xié)議。然后,服務器可連接任何數(shù)量的數(shù)據(jù)庫。這種方法使您可能從客戶機 Applet 中調(diào)用服務器,并將結果返回到您的 Applet。在這種情況下,中間件軟件提供商可提供服務器。
4. 本機協(xié)議 Java 驅(qū)動程序 — Java 驅(qū)動程序直接轉(zhuǎn)換為該數(shù)據(jù)庫的協(xié)議并進行調(diào)用。這種方法也可以通過網(wǎng)絡使用,而且可以在 Web 瀏覽器的 Applet 中顯示結果。在這種情況下,每個數(shù)據(jù)庫廠商將提供驅(qū)動程序。
如果您希望編寫代碼來處理 PC 客戶機數(shù)據(jù)庫,如 dBase、Foxbase 或 Access,則您可能會使用之一種方法,并且擁有用戶機器上的所有代碼。更大的客戶機-服務器數(shù)據(jù)庫產(chǎn)品(如 IBM 的 DB2)已提供了第 3 級別的驅(qū)動程序。
兩層模型和三層模型
當數(shù)據(jù)庫和查詢它的應用程序在同一臺機器上,而且沒有服務器代碼的干預時,我們將生成的程序稱為兩層模型。一層是應用程序,而另一層是數(shù)據(jù)庫。在 JDBC-ODBC 橋系統(tǒng)中通常是這種情況。
當一個應用程序或 applet 調(diào)用服務器,服務器再去調(diào)用數(shù)據(jù)庫時,我們稱其為三層模型。當您調(diào)用稱為“服務器”的程序時通常是這種情況。
編寫 JDBC 代碼訪問數(shù)據(jù)庫
用 ODBC 注冊您的數(shù)據(jù)庫
連接數(shù)據(jù)庫
所有與數(shù)據(jù)庫有關的對象和方法都在 java.sql 包中,因此在使用 JDBC 的程序中必須加入 “import java.sql.* “。 JDBC 要連接 ODBC 數(shù)據(jù)庫,您必須首先加載 JDBC-ODBC 橋驅(qū)動程序
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
該語句加載驅(qū)動程序,并創(chuàng)建該類的一個實例。然后,要連接一個特定的數(shù)據(jù)庫,您必須創(chuàng)建 Connect 類的一個實例,并使用 URL 語法連接數(shù)據(jù)庫。
String url = “jdbc:odbc:Northwind”;
Connection con = DriverManager.getConnection(url);
請注意,您使用的數(shù)據(jù)庫名是您在 ODBC 設置面板中輸入的“數(shù)據(jù)源”名稱。
URL 語法可能因數(shù)據(jù)庫類型的不同而變化極大。
jdbc:subprotocol:subname
之一組字符代表連接協(xié)議,并且始終是 jdbc。還可能有一個子協(xié)議,在此處,子協(xié)議被指定為 odbc。它規(guī)定了一類數(shù)據(jù)庫的連通性機制。如果您要連接其它機器上的數(shù)據(jù)庫服務器,可能也要指定該機器和一個子目錄:
jdbc:bark//doggie/elliott
最后,您可能要指定用戶名和口令,作為連接字符串的一部分:
jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof
訪問MSSQL Server方法:(驅(qū)動程序需要:msutil.jar,mase.jar,mssqlServer.jar)
DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver
URL=jdbc:microsoft:
username=sa
password=
maxcon=10
mincon=1
poolName=SkyDev
利用我們開發(fā)的數(shù)據(jù)庫類,使用方法如下:
DbObject DbO = new DbObject(new SqlServerConnectionFactory(“l(fā)ocalhost”,
1433, “demo”, “sa”, “”));
Connection con = DbO.getConnection();
//類代碼(不含連接工廠實現(xiàn))
package skydev.modules.data;
public final class SqlServerConnectionFactory
extends ConnectionFactory {
private final String dbDriver =
“com.microsoft.jdbc.sqlserver.SQLServerDriver”;
private String host;
private int port;
private String databaseName;
public SqlServerConnectionFactory() {
super.setDriverName(dbDriver);
}
/**
*
* @param host 數(shù)據(jù)庫所在的主機名:如”localhost”
* @param port SQL服務器運行的端口號,如果使用缺省值 1433,傳入一個負數(shù)即可
* @param databaseName 數(shù)據(jù)庫名稱
* @param userName 用戶名
* @param password 口令
*/
public SqlServerConnectionFactory(String host,
int port,
String databaseName,
String userName,
String password) {
this.setHost(host);
this.setPort(port);
this.setDatabaseName(databaseName);
this.setUserName(userName);
this.setPassword(password);
init();
}
private void init() {
super.setDriverName(dbDriver);
super.setUrl(“jdbc:microsoft: + host.trim() + “:” +
new Integer(port).toString() + “;DatabaseName=” +
databaseName.trim());
//super.setUrl(“jdbc:microsoft:
}
……
//
訪問MySQL的方法:
DBDriver=com.mysql.jdbc.Driver
URL=jdbc:
username=
password=
maxcon=5
mincon=1
poolName=zhengmao
訪問數(shù)據(jù)庫
一旦連接到數(shù)據(jù)庫,就可以請求表名以及表列的名稱和內(nèi)容等信息,而且您可以運行 SQL 語句來查詢數(shù)據(jù)庫或者添加或修改其內(nèi)容??捎脕韽臄?shù)據(jù)庫中獲取信息的對象有:
DatabaseMetaData 有關整個數(shù)據(jù)庫的信息:表名、表的索引、數(shù)據(jù)庫產(chǎn)品的名稱和版本、數(shù)據(jù)庫支持的操作。
ResultSet 關于某個表的信息或一個查詢的結果。您必須逐行訪問數(shù)據(jù)行,但是您可以任何順序訪問列。
ResultSetMetaData 有關 ResultSet 中列的名稱和類型的信息。
盡管每個對象都有大量的方法讓您獲得數(shù)據(jù)庫元素的極為詳細的信息,但在每個對象中都有幾種主要的方法使您可獲得數(shù)據(jù)的最重要信息。然而,如果您希望看到比此處更多的信息,建議您學習文檔以獲得其余方法的說明。
ResultSet
ResultSet 對象是 JDBC 中最重要的單個對象。從本質(zhì)上講,它是對一個一般寬度和未知長度的表的一種抽象。幾乎所有的方法和查詢都將數(shù)據(jù)作為 ResultSet 返回。ResultSet 包含任意數(shù)量的命名列,您可以按名稱訪問這些列。它還包含一個或多個行,您可以按順序自上而下逐一訪問。在您使用 ResultSet 之前,必須查詢它包含多少個列。此信息存儲在 ResultSetMetaData 對象中。
//從元數(shù)據(jù)中獲得列數(shù)
ResultSetMetaData rd;
rd = results.getMetaData();
numCols = rd.getColumnCount();
當您獲得一個 ResultSet 時,它正好指向之一行之前的位置。您可以使用 next() 方法得到其他每一行,當沒有更多行時,該方法會返回 false。由于從數(shù)據(jù)庫中獲取數(shù)據(jù)可能會導致錯誤,您必須始終將結果集處理語句包括在一個 try 塊中。
您可以多種形式獲取 ResultSet 中的數(shù)據(jù),這取決于每個列中存儲的數(shù)據(jù)類型。另外,您可以按列序號或列名獲取列的內(nèi)容。請注意,列序號從 1 開始,而不是從 0 開始。ResultSet 對象的一些最常用方法如下所示。
getInt(int); 將序號為 int 的列的內(nèi)容作為整數(shù)返回。
getInt(String); 將名稱為 String 的列的內(nèi)容作為整數(shù)返回。
getFloat(int); 將序號為 int 的列的內(nèi)容作為一個 float 型數(shù)返回。
getFloat(String); 將名稱為 String 的列的內(nèi)容作為 float 型數(shù)返回。
getDate(int); 將序號為 int 的列的內(nèi)容作為日期返回。
getDate(String); 將名稱為 String 的列的內(nèi)容作為日期返回。
next(); 將行指針移到下一行。如果沒有剩余行,則返回 false。
Close(); 關閉結果集。
getMetaData(); 返回 ResultSetMetaData 對象。
ResultSetMetaData
您使用 getMetaData() 方法從 ResultSet 中獲取 ResultSetMetaData 對象。您可以使用此對象獲得列的數(shù)目和類型以及每一列的名稱。
getColumnCount(); 返回 ResultSet 中的列數(shù)。
getColumnName(int); 返回列序號為 int 的列名。
getColumnLabel(int); 返回此列暗含的標簽。
isCurrency(int); 如果此列包含帶有貨幣單位的一個數(shù)字,則返回 true。
isReadOnly(int); 如果此列為只讀,則返回 true。
isAutoIncrement(int); 如果此列自動遞增,則返回 true。這類列通常為鍵,而且始終是只讀的。
getColumnType(int); 返回此列的 SQL 數(shù)據(jù)類型。這些數(shù)據(jù)類型包括
BIGINT
BINARY
BIT
CHAR
DATE
DECIMAL
DOUBLE
FLOAT
INTEGER
LONGVARBINARY
LONGVARCHAR
NULL
NUMERIC
OTHER
REAL
ALLINT
TIME
TIMESTAMP
TINYINT
VARBINARY
VARCHAR
DatabaseMetaData
DatabaseMetaData 對象可為您提供整個數(shù)據(jù)庫的信息。您主要用它獲取數(shù)據(jù)庫中表的名稱,以及表中列的名稱。由于不同的數(shù)據(jù)庫支持不同的 SQL 變體,因此,也有多種方法查詢數(shù)據(jù)庫支持哪些 SQL 方法。
getCatalogs() 返回該數(shù)據(jù)庫中的信息目錄列表。使用 JDBC-ODBC Bridge 驅(qū)動程序,您可以獲得用 ODBC 注冊的數(shù)據(jù)庫列表。這很少用于 JDBC-ODBC 數(shù)據(jù)庫。
getTables(catalog, schema,tableNames, columnNames) 返回表名與 tableNames 相符而且列名與 columnNames 相符的所有表的說明。
getColumns(catalog, schema,tableNames, columnNames) 返回表名與 tableNames 相符而且列名與 columnNames 相符的所有表列說明。
getURL(); 獲得您所連接的 URL 名稱。
getDriverName(); 獲得您所連接的數(shù)據(jù)庫驅(qū)動程序的名稱。
獲取有關表的信息
您可以使用 DataBaseMetaData 的 getTables() 方法來獲取數(shù)據(jù)庫中表的信息。這個方法有如下4個 String 參數(shù):
results =dma.getTables(catalog, schema, tablemask, types);
其中參數(shù)的意義是:
Catalog 要在其中查找表名的目錄名。對于 JDBC-ODBC 數(shù)據(jù)庫以及許多其他數(shù)據(jù)庫而言,可將其設置為 null。這些數(shù)據(jù)庫的目錄項實際上是它在文件系統(tǒng)中的絕對路徑名稱。
Schema 要包括的數(shù)據(jù)庫“方案”。許多數(shù)據(jù)庫不支持方案,而對另一些數(shù)據(jù)庫而言,它代表數(shù)據(jù)庫所有者的用戶名。一般將它設置為 null。
Tablemask 一個掩碼,用來描述您要檢索的表的名稱。如果您希望檢索所有表名,則將其設為通配符 %。請注意,SQL 中的通配符是 % 符號,而不是一般 PC 用戶的 * 符號。
types 這是描述您要檢索的表的類型的 String 數(shù)組。數(shù)據(jù)庫中通常包括許多用于內(nèi)部處理的表,而對作為用戶的您沒什么價值。如果它是空值,則您會得到所有這些表。如果您將其設為包含字符串“TABLES”的單元素數(shù)組,您將僅獲得對用戶有用的表格。
一個簡單的 JDBC 程序
我們已經(jīng)學習了 JDBC 的所有基本功能,現(xiàn)在我們可以編寫一個簡單的程序,該程序打開數(shù)據(jù)庫,打印它的表名以及某一表列的內(nèi)容,然后對該數(shù)據(jù)庫執(zhí)行查詢。此程序如下所示:
package skydevkit;
import java.sql.*;
public class JdbcOdbc_test {
ResultSet results;
ResultSetMetaData rd;
DatabaseMetaData dma;
Connection con;
public JdbcOdbc_test() throws SQLException {
String url = “jdbc:odbc:Northwind”;
try {
//加載 JDBC-ODBC 橋驅(qū)動程序
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
con = DriverManager.getConnection(url);//連接數(shù)據(jù)庫
dma = con.getMetaData();//獲取數(shù)據(jù)庫的元數(shù)據(jù)
System.out.println(“Connected to:” + dma.getURL());
System.out.println(“Driver ” + dma.getDriverName());
} catch (Exception e) {
System.out.println(e);
}
try {
Statement stmt = con.createStatement();
results = stmt.executeQuery(“select * from 客戶;”);
ResultSetMetaData resultMetaData = results.getMetaData();
int cols = resultMetaData.getColumnCount();
String resultRow = “”;
for (int i = 1; i
resultRow += resultMetaData.getColumnName(i) + “;”;
}
System.out.println(resultRow);
while (results.next()) {
resultRow = “”;
for (int i = 1; i
try {
resultRow += results.getString(i) + “;”;
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}
}
System.out.println(resultRow);
}
} catch (Exception e) {
System.out.println(“query exception”);
} finally {
results.close();
}
}
}
補充高級內(nèi)容
關于調(diào)用SQLServer存儲過程的例子:(用到了我們開發(fā)的數(shù)據(jù)庫連接類)
CREATE PROCEDURE .(@name char(10))
AS
Select * from Students where =@name
GO
DbObject DbO = new DbObject(new SqlServerConnectionFactory(“l(fā)ocalhost”,
1433, “demo”, “sa”, “”));
Connection con = DbO.getConnection();
CallableStatement pstmt = null;
System.out.println(“TestDB1()…………”);
/* try {
pstmt = con.prepareCall(“{call sp_getStudentById(?)}”);
pstmt.setInt(1, 1);
}*/
try {
pstmt = con.prepareCall(“{call sp_getStudentByName(?)}”); //注意參數(shù)如何傳遞
pstmt.setString(1, “Tom”);
}
……
使用輸出參數(shù):
CREATE PROCEDURE .(@name char(10),@age int,@id int OUTPUT) AS
insert into Students(,) values (@name,@age)
select @id=@@IDENTITY
GO
try {
pstmt = con.prepareCall(“{call sp_insertStudent(?,?,?)}”);
pstmt.setString(1, “zengqingsong”);
pstmt.setInt(2, 22);
pstmt.registerOutParameter(3, Types.INTEGER);
pstmt.executeUpdate();
int id = pstmt.getInt(3);
System.out.println(id);
}
使用返回參數(shù)的例子:
CREATE PROCEDURE .(@name char(10),@age int,@id int OUTPUT) AS
insert into Students(,) values (@name,@age)
select @id=@@IDENTITY –測試輸出參數(shù)
return 30 –測試返回30
GO
try {
pstmt = con.prepareCall(“{?=call sp_insertStudent(?,?,?)}”);
pstmt.setString(2, “zengqingsong”);
pstmt.setInt(3, 22);
pstmt.registerOutParameter(4, Types.INTEGER);
pstmt.registerOutParameter(1, Types.INTEGER);
int ret = pstmt.executeUpdate(); //執(zhí)行影響的行數(shù)
int ret2 = pstmt.getInt(1); //返回參數(shù)(輸出參數(shù))
int id = pstmt.getInt(4); //輸出參數(shù)
System.out.println(ret);
System.out.println(ret2);
System.out.println(id);
參考資料:
關于工廠數(shù)據(jù)庫 join的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務、應用軟件開發(fā)、網(wǎng)站建設推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎服務!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務器和獨立服務器。創(chuàng)新互聯(lián)——四川成都IDC機房服務器托管/機柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機房租用、服務器托管、機柜租賃、大帶寬租用,高電服務器托管,算力服務器租用,可選線路電信、移動、聯(lián)通機房等。
文章題目:工廠數(shù)據(jù)庫如何實現(xiàn)join的功能?(工廠數(shù)據(jù)庫join)
文章源于:http://fisionsoft.com.cn/article/dpesjip.html


咨詢
建站咨詢
