java資料庫類
1. java鎿嶄綔鏁版嵁搴撶殑鏂瑰紡鏈夊摢浜
JDBC鏄痡ava鏁版嵁搴撹繛鎺ユ妧鏈鐨勭畝縐,瀹冩彁渚涗簡榪炴帴鍚勭嶆暟鎹搴撶殑鑳藉姏,榪欎究浣跨▼搴忕殑鍙緇存姢鎬у拰鍙鎵╁睍鎬уぇ澶х殑鎻愰珮浜.JDBC榪炴帴鏁版嵁搴撳父瑙佺殑椹卞姩鏂瑰紡鏈変袱縐,涓縐嶆槸jdbc-odbc鍗蟲ˉ榪炲彟澶栦竴縐嶆槸綰痡ava椹卞姩.涓鑸鍦ㄥ仛java寮鍙戠殑鏃跺欑敤絎浜岀.so鍓嶄竴縐嶆垜灝變笉璇翠簡,綰痡ava椹卞姩鏂瑰紡榪炴帴姝ラゅ備笅:
1.鍏堟妸涓涓猨dbc鐨刯ar鍖呭煎叆鍒伴」鐩(鐢∕yEclipse寮鍙)鐨刲ib涓.
2.浠g爜濡備笅:
[c-sharp]view plain
importjava.sql.*;
/**
*榪炴帴鏁版嵁搴撳府鍔╃被
*@authorAdministrator
*
*/
publicclassBaseDao{
="com.microsoft.sqlserver.jdbc.SQLServerDriver";
privatestaticfinalStringURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManageSystem";
="sa";
="sa";
/**
*榪炴帴鏁版嵁搴
*@return鏁版嵁搴撹繛鎺ュ硅薄
*@throwsClassNotFoundException
*@throwsSQLException
*/
publicConnectiongetConn()throwsClassNotFoundException,SQLException{
Class.forName(DRIVER);
Connectionconn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
returnconn;
}
/**
*閲婃斁璧勬簮
*@paramconn
*@parampstmt
*@paramrs
*@throwsSQLException
*/
publicvoidcloseAll(Connectionconn,PreparedStatementpstmt,ResultSetrs)throwsSQLException{
if(rs!=null){
rs.close();
}
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
/**
*鎵ц孲QL璇鍙ワ紝鍙浠ヨ繘琛屽炪佸垹銆佹敼鐨勬搷浣
*@paramsql
*@return褰卞搷鏉℃暟
*@throwsClassNotFoundException
*@throwsSQLException
*/
publicintexecuteSQL(Stringsql)throwsClassNotFoundException,SQLException{
Connectionconn=this.getConn();
PreparedStatementpstmt=conn.prepareStatement(sql);
intnumber=pstmt.executeUpdate();
this.closeAll(conn,pstmt,null);
returnnumber;
}
}
<Resourcename="jdbc/book"auth="Container"type="javax.sql.DataSource"
maxActive="100"maxIdle="20"maxWait="100"username="sa"password="sa"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;dataBaseName=book"
/>鍦╟onfig.xml鏂囦歡涓鍔犲叆Resource鏍囩,鐒跺悗瀵規暟鎹搴撲俊鎮榪涜岄厤緗,褰撶劧榪欎釜鏁版嵁搴撴寚鐨勪篃鏄痵qlserver鏈夌枒闂鍙浠qq757966892鑱旂郴
packageweb.login.;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.sql.DataSource;
publicclassBaseDao{
protectedConnectionconn;
protectedPreparedStatementps;
protectedResultSetrs;
protectedStringsql;
publicConnectiongetConn(){
try{
Contextcontext=newInitialContext();
DataSourceds=(DataSource)context.lookup("java:comp/env/jdbc/user");
returnds.getConnection();
}catch(Exceptione){
e.printStackTrace();
returnnull;
}
}
publicvoidcloseAll(Connectionconn,PreparedStatementps,ResultSetrs){
try{
if(rs!=null){
rs.close();
rs=null;
}
if(ps!=null){
ps.close();
ps=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
- 涔嬪悗渚垮彲浠ュ緩絝嬩笟鍔$被浠庤屽規暟鎹搴撹繘琛屾搷浣.
浠庝唬鐮佺煡閬撻栧厛鍚jdbc椹卞姩綾昏呰澆java鉶氭嫙鏈轟腑,鍗矯lass.forName(DRIVER);鍏舵″姞杞介┍鍔ㄥ苟寤虹珛浜庢暟鎹搴撶殑榪炴帴Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);;鐒跺悗鍙戦丼QL璇鍙ュ苟鐨勫埌緇撴灉闆.涔嬪悗澶勭悊緇撴灉,鏈鍚庤佸叧闂鏁版嵁搴撶殑榪炴帴,閲婃斁璧勬簮.褰撶劧鎴戣寸殑榪欐牱榪炴帴鏁版嵁搴撶殑鏂瑰紡浣跨敤鐨勮蔣浠舵槸sql鍜孧yEclipse.
浣跨敤閰嶇疆鏂囦歡鏉ヨ繛鎺ユ暟鎹搴,褰撶劧榪欐牱鐨勮繛鎺ラ渶瑕佽繘琛屼竴浜涢厤緗.鍏跺疄榪欐牱鐨勮繛鎺ョ敤涓撲笟鏈璇鏉ヨ村氨鏄榪炴帴奼,榪炴帴奼犳槸璐熻矗鍒嗛厤綆$悊鍜岄噴鏀炬暟鎹搴撹繛鎺.瀹冨厑璁哥敤鐢ㄧ▼搴忛噸澶嶄嬌鐢ㄤ竴涓鐜版湁鐨勬暟鎹搴撹繛鎺ヤ笉鍐嶉噸澶嶅緩絝嬭繛鎺.閲婃斁絀洪棽鏃墮棿瓚呰繃鏈澶х┖闂叉椂闂寸殑鏁版嵁搴撹繛鎺ヤ互閬垮厤鍥犱負娌℃湁閲婃斁鏁版嵁搴撹屽紩璧風殑鏁版嵁搴撻仐婕.
榪炴帴奼犵殑鍒涘緩鍒嗕負浠ヤ笅鍑犱釜姝ラ:1.閰嶇疆context.xml鏂囦歡 榪欎釜鏂囦歡鏄鏈嶅姟鍣(鎸噒omcat)鐨勪竴涓猚onf鏂囦歡澶逛腑,鎷瘋礉鍑烘潵鏀懼叆欏圭洰鐨刲ib鏂囦歡澶逛腑,鍏蜂綋閰嶇疆濡備笅:
[c-sharp]view plain
涔嬪悗鎶婃暟鎹搴撶殑椹卞姩鍖,榪欓噷鎸囩殑鏄痵ql2005鐨勫寘鏀懼叆鏈嶅姟鍣ㄧ殑lib涓,榪欐牱浠ュ悗濡傛灉鍦ㄤ綘鑷宸辯殑鏈哄瓙涓婇兘涓嶇敤鍦ㄩ噸鏂板煎叆榪欎釜鍖呬簡.
鐒跺悗灝辨槸浠嶮yEclipse涓鍙栧緱榪欐牱鐨勮繛鎺ヤ粠鑰屽規暟鎹搴撹繘琛屼竴浜涙搷浣滃叿浣撲唬鐮佸備笅:
[c-sharp]view plain
2. Java中每個資料庫的優勢是什麼
提及資料庫類型,人們先想到的是SQL,不過隨著大規模數據集合多重數據種類帶來的挑戰,NoSQL應運而生。專業人士分析,隨著雲計算、物聯網以及大數據的進一步發展,NewSQL將成為未來資料庫的主角。
SQL
SQL是Structured Query Language(結構化查詢語言)的縮寫,是傳統的關系型資料庫、資料庫領域主流模型,經典應用在金融和電信行業,確保資料庫的數據不會出錯和丟失。而SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持SQL。
NoSQL
NoSQL泛指非關系型的資料庫,它的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。NoSQL的強項是特別適合處理大量分布式數據,與傳統的關系型資料庫相比,NoSQL資料庫為軟體開發人員及其他用戶提供了更快的速度和更高的靈活性。目前在市場上有超過24個開源和商業NoSQL資料庫。
NewSQL
NewSQL是指一類新式的關系型資料庫系統,針對OLTP(讀-寫)工作負載,追求提供和NoSQL系統相同的擴展性能,且仍然保持ACID和SQL等特性。對企業而言,使用NewSQL不僅免去傳統數據倉庫的ETL過程,降低存儲成本的同時極大的縮短數據分析的延遲,使得實時分析決策系統成為可能。
MySQL
優點:
體積小、速度快、總體擁有成本低,開源;
支持多種操作系統;
是開源資料庫,提供的介面支持多種語言連接操作 ;
SqlServer
優點:
易用性、適合分布式組織的可伸縮性、用於決策支持的數據倉庫功能、與許多其他伺服器軟體緊密關聯的集成性、良好的性價比等;
Oracle
優點:
開放性: Oracle 能所有主流平台上運行(包括 windows)完全支持所有工業標准採用完全開放策略使客戶選擇適合解決方案對開發商全力支持。
可伸縮性,並行性:oracle 並行伺服器通過使組結點共享同簇工作來擴展windownt能力提供高用性和高伸縮性簇解決方案windowsNT能滿足需要用戶把資料庫移UNIXOracle並行伺服器對各種UNIX平台集群機制都有著相當高集成度。
以上我的回答希望對你有所幫助
3. java,為什麼資料庫類型nchar(10)和Stirng結果永遠為false, 無亂碼現象,換成varchar類型比較沒問題
nchar(10)字元串長度不夠10時自動填充空格
譬如:存入字元串"123"
最終變成"123"
這時候拿出來和"123"對比一定是false
"123".equals("123")=>false
而varchar 長度不夠 不會填充空格,存進去是什麼,取出來就是什麼
char 與varchar的區別:
char的長度是不可變的,而varchar的長度是可變的,也就是說,定義一個char[10]和varchar[10],如果存進去的是『csdn』,那麼char所佔的長度依然為10,除了字元『csdn』外,後面跟六個空格,而varchar就立馬把長度變為4了,取數據的時候,char類型的要用trim()去掉多餘的空格,而varchar是不需要的,盡管如此,char的存取數度還是要比varchar要快得多,因為其長度固定,方便程序的存儲與查找;但是char也為此付出的是空間的代價,因為其長度固定,所以難免會有多餘的空格佔位符占據空間,可謂是以空間換取時間效率,而varchar是以空間效率為首位的。再者,char的存儲方式是,對英文字元(ASCII)佔用1個位元組,對一個漢字佔用兩個位元組;而varchar的存儲方式是,對每個英文字元佔用2個位元組,漢字也佔用2個位元組,兩者的存儲數據都非unicode的字元數據。
若有疑問,再追問
4. java 操作資料庫時一個屬性是DateTime類型的寫入資料庫時可弄成Varchar么
通常上來說,資料庫和實體類間的欄位建立聯系,盡量讓實體的屬性類型與數據欄位類型一一對應,比如你使用的是oracle資料庫,那麼表的主鍵如果為NUMBER,那麼實體對應主鍵屬性java類型就定義為Long或Integer(依欄位長度決定),如果資料庫表欄位為VARCHAR,實體類對應屬性就應該是String,如果資料庫欄位為小數,則定義為Double,屬性建議使用包裝類型,不用基本類型。至於時間,資料庫一般由Date,DateTime,以及timestamp表示,對應於java實體類,一般用Date封裝即可,對時間進精度要求高的話,就用TimeStamp封裝。
當然,你說的情況是可以的,也就是說,使用java的String類型,理論上可以封裝所有的資料庫欄位類型,你可以把任何資料庫的有效欄位都封裝為String,因為java中的所有數據類型,都有toString()方法,可以以字元串形式展示任何數據類型,還可以通過重寫對象的toString()方式達到自定義顯示數據的方式,可以說很方便。但是時間類型一旦用字元串表示,你便失去了直接調用時間類型特有的一些有用的方法,比如獲取時分秒,比較時間大小等等。而是需要手動再轉化為時間對象再進行操作,這無疑又多了一個步驟。因此,除非是比較特殊的情況,比如,單純的進行數據導出,不做特殊處理,你可以建一個屬性全為String的實體類,來封裝資料庫查詢的數據,然後導出為excel或word文件之類的操作。否則,強烈建議使用匹配的數據類型和資料庫欄位類型建立關聯!
希望我的回答能幫到你!
5. java中定義一個類,主要從資料庫中獲取欄位怎麼編寫
首先連接資料庫,你也沒說什麼資料庫,給你三種連接,
package com.cai.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties ;
public class ConnectionUtil {
/**
* 1
*在方法中固化連接參數
* @return 資料庫連接
*/
public Connection getConnection(){
Connection conn = null ;
try{
Class.forName("com.mysql.jdbc.Driver") ;
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stud", "root", "root") ;
return conn ;
}catch(Exception e){
e.printStackTrace() ;
}
return null ;
}
/**
* 2
*通過方法參數方式傳遞連接參數
* @return 資料庫連接
*/
public Connection getConnection(String driver, String url, String user, String password){
Connection conn = null ;
try{
Class.forName(driver) ;
conn = DriverManager.getConnection(url, user, password) ;
return conn ;
}catch(Exception e){
e.printStackTrace();
}
return null ;
}
/**
* 3
*通過properties配置文件的方式靈活配置連接參數,properties中的屬性名固化
* @return 資料庫連接
*/
public Connection openConnection(){
Connection conn = null ;
String driver = "" ;
String url = "" ;
String user = "" ;
String password = "" ;
Properties props = new Properties() ;
try{
props.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties")) ;
driver = props.getProperty("driver") ;
url = props.getProperty("url") ;
user = props.getProperty("user") ;
password = props.getProperty("password") ;
Class.forName(driver) ;
conn = DriverManager.getConnection(url, user, password) ;
return conn ;
}catch(Exception e){
e.printStackTrace() ;
}
return null ;
}
public static void main(String []args){
ConnectionUtil cu = new ConnectionUtil() ;
System.out.println("1、---->" + cu.getConnection()) ;
System.out.println("2、---->" + cu.getConnection("com.mysql.jdbc.Driver",
"jdbc:mysql://localhost:3306/stud", "root", "root")) ;
System.out.println("3、---->" + cu.openConnection()) ;
}
}
連接上資料庫就可以操作數據了,在寫sql語句 根據sql執行就有返回相應欄位值了