Java JDBC連接數(shù)據(jù)庫(kù)常見(jiàn)操作總結(jié)
本文實(shí)例總結(jié)了Java JDBC連接數(shù)據(jù)庫(kù)常見(jiàn)操作。分享給大家供大家參考,具體如下:
db.properties
配置文件(MySql數(shù)據(jù)庫(kù))
# db.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=123456 # paramter for BasicDataSource initSize=2 maxActive=2
db.properties
配置文件(Oracle數(shù)據(jù)庫(kù))
# db.properties jdbc.driver=oracle.jdbc.OracleDriver jdbc.url=jdbc:oracle:thin:localhost:1521:orcl jdbc.username=root jdbc.password=123456 # paramter for BasicDataSource initSize=2 maxActive=2
JDBC直接連接數(shù)據(jù)庫(kù)
package JDBC; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; /** * JDBC連接數(shù)據(jù)庫(kù)管理工具類(lèi) */ public class JDBC { static String driver; static String url; static String username; static String password; static { try { Properties cfg = new Properties(); InputStream in = JDBC.class.getClassLoader().getResourceAsStream("db.properties"); cfg.load(in); //將文件內(nèi)容加載到Properties對(duì)象中(以散列表形式存在) driver = cfg.getProperty("jdbc.driver"); url = cfg.getProperty("jdbc.url"); username = cfg.getProperty("jdbc.username"); password = cfg.getProperty("jdbc.password"); in.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 創(chuàng)建數(shù)據(jù)庫(kù)連接 */ public static Connection getConnection() { try { Class.forName(driver); //注冊(cè)驅(qū)動(dòng) Connection conn = DriverManager.getConnection(url, username, password); return conn; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } /* * 關(guān)閉數(shù)據(jù)庫(kù)的連接 */ public static void close(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
通過(guò)連接池連接數(shù)據(jù)庫(kù)
package JDBC; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; /** * 連接池版本的數(shù)據(jù)庫(kù)連接管理工具類(lèi) */ public class DBUtils { private static String driver; private static String url; private static String username; private static String password; private static int initSize; private static int maxActive; private static BasicDataSource dbs; static { dbs = new BasicDataSource(); Properties cfg = new Properties(); try { InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("db.properties"); cfg.load(in); // 初始化參數(shù) driver = cfg.getProperty("jdbc.driver"); url = cfg.getProperty("jdbc.url"); username = cfg.getProperty("jdbc.username"); password = cfg.getProperty("jdbc.password"); initSize = Integer.parseInt(cfg.getProperty("initSize")); maxActive = Integer.parseInt(cfg.getProperty("maxActive")); in.close(); // 初始化連接池 dbs.setDriverClassName(driver); dbs.setUrl(url); dbs.setUsername(username); dbs.setPassword(password); dbs.setInitialSize(initSize); dbs.setMaxActive(maxActive); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 創(chuàng)建數(shù)據(jù)庫(kù)連接,從連接池中獲取連接,如果連接池滿(mǎn)了,則等待. */ public static Connection getConnection() { try { Connection conn = dbs.getConnection(); return conn; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /* * 關(guān)閉數(shù)據(jù)庫(kù)的連接,歸還到連接池 */ public static void close(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } //回滾,僅在禁用自動(dòng)提交時(shí)使用 public static void rollback(Connection conn) { if (conn != null) { try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); } } } }
連接數(shù)據(jù)庫(kù)后的使用
Connection conn=null; try{ conn=DbUtils.getConnection(); Statement st=conn.createStatement(); String sql="select id, name from people"; ResultSet rs=st.executeQuery(sql); while(rs.next()){ int id=rs.getInt("id"); String name=rs.getString("name"); System.out.println(id+","+name); } //結(jié)果集元數(shù)據(jù) ResultSetMetaData meta = rs.getMetaData(); int n = meta.getColumnCount(); //多少列 for(int i=1; i<=n; i++){ String name= meta.getColumnName(i); //獲取列名 System.out.println(name); } rs.close();//釋放查詢(xún)結(jié)果 st.close();//釋放語(yǔ)句對(duì)象 }catch(Exception e){ e.printStackTrace(); }finally { DbUtils.close(conn); }
預(yù)編譯SQL執(zhí)行 及 取消自動(dòng)提交
try { conn = DBUtils.getConnection(); conn.setAutoCommit(false); //取消自動(dòng)提交, 后續(xù)手動(dòng)提交 String sql="update people set name=? where id=? "; PreparedStatement ps= conn.prepareStatement(sql); //按照順序發(fā)送參數(shù) ps.setString(1, "Lao Wang"); ps.setInt(2, 100); //執(zhí)行"執(zhí)行計(jì)劃" int n=ps.executeUpdate(); conn.commit(); //手動(dòng)提交 } catch (Exception e) { e.printStackTrace(); DBUtils.rollback(conn); //異常回滾 }finally{ DBUtils.close(conn); }
Statement的addBatch(sql)
和executeBatch()
方法可以批量執(zhí)行sql。
Statement st=conn.createStatement(); st.addBatch(sql1); //sql1 添加到Statement的緩存中 st.addBatch(sql2); st.addBatch(sql3); int[] ary=st.executeBatch(); //執(zhí)行一批SQL
PreparedStatement也支持批量參數(shù)的處理
PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1, 1); ps.setString(2, "wang"); ps.addBatch(); //將參數(shù)添加到ps緩存區(qū) ps.setInt(1, 2); ps.setString(2, "li"); ps.addBatch(); //將參數(shù)添加到ps緩存區(qū) int[] ary = ps.executeBatch(); // 批量執(zhí)行
PreparedStatement ps = conn.prepareStatement(sql);
還可以傳入第二個(gè)參數(shù)用以獲取自增主鍵或者序號(hào)自增的列
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java使用JDBC操作數(shù)據(jù)庫(kù)技巧總結(jié)》、《Java+MySQL數(shù)據(jù)庫(kù)程序設(shè)計(jì)總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java文件與目錄操作技巧匯總》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java基礎(chǔ)之JDBC的數(shù)據(jù)庫(kù)連接與基本操作
- java使用JDBC連接數(shù)據(jù)庫(kù)的五種方式(IDEA版)
- Java連接 JDBC基礎(chǔ)知識(shí)(操作數(shù)據(jù)庫(kù):增刪改查)
- Java 數(shù)據(jù)庫(kù)連接(JDBC)的相關(guān)總結(jié)
- Java 如何使用JDBC連接數(shù)據(jù)庫(kù)
- 詳解Java數(shù)據(jù)庫(kù)連接JDBC基礎(chǔ)知識(shí)(操作數(shù)據(jù)庫(kù):增刪改查)
- Java如果通過(guò)jdbc操作連接oracle數(shù)據(jù)庫(kù)
- Java連接數(shù)據(jù)庫(kù)JDBC技術(shù)之prepareStatement的詳細(xì)介紹
- Java之jdbc連接mysql數(shù)據(jù)庫(kù)的方法步驟詳解
- java數(shù)據(jù)庫(kù)開(kāi)發(fā)之JDBC的完整封裝兼容多種數(shù)據(jù)庫(kù)
- Java基礎(chǔ)開(kāi)發(fā)之JDBC操作數(shù)據(jù)庫(kù)增刪改查,分頁(yè)查詢(xún)實(shí)例詳解
- java數(shù)據(jù)庫(kù)開(kāi)發(fā)之JDBC基礎(chǔ)使用方法及實(shí)例詳解
- Java使用JDBC連接postgresql數(shù)據(jù)庫(kù)示例
- Java實(shí)現(xiàn)JDBC連接數(shù)據(jù)庫(kù)簡(jiǎn)單案例
- java使用jdbc連接數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)例
- Java使用jdbc連接MySQL數(shù)據(jù)庫(kù)實(shí)例分析
- Java基于JDBC連接數(shù)據(jù)庫(kù)及顯示數(shù)據(jù)操作示例
- 詳細(xì)說(shuō)明關(guān)于Java的數(shù)據(jù)庫(kù)連接(JDBC)
相關(guān)文章
Java中FileOutputStream流的write方法
這篇文章主要為大家詳細(xì)介紹了Java中FileOutputStream流的write方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08SpringData JPA實(shí)現(xiàn)查詢(xún)分頁(yè)demo
本篇文章主要介紹了SpringData JPA實(shí)現(xiàn)查詢(xún)分頁(yè)demo,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解
這篇文章主要介紹了SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11java結(jié)合keytool如何實(shí)現(xiàn)非對(duì)稱(chēng)加密與解密詳解
這篇文章主要給大家介紹了關(guān)于java結(jié)合keytool如何實(shí)現(xiàn)非對(duì)稱(chēng)加密與解密的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08詳解java 三種調(diào)用機(jī)制(同步、回調(diào)、異步)
這篇文章主要介紹了java 三種調(diào)用機(jī)制(同步、回調(diào)、異步),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04