亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java JDBC連接數(shù)據(jù)庫(kù)常見(jiàn)操作總結(jié)

 更新時(shí)間:2019年03月08日 10:20:07   作者:時(shí)間在這里停頓  
這篇文章主要介紹了Java JDBC連接數(shù)據(jù)庫(kù)常見(jiàn)操作,結(jié)合實(shí)例形式總結(jié)分析了java基于jdbc連接mysql、Oracle數(shù)據(jù)庫(kù)及連接池相關(guān)操作技巧,需要的朋友可以參考下

本文實(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ì)有所幫助。

您可能感興趣的文章:

相關(guān)文章

  • 詳解Java的MyBatis框架中的事務(wù)處理

    詳解Java的MyBatis框架中的事務(wù)處理

    利用MyBatis框架的配置管理比直接使用JDBC API編寫(xiě)事務(wù)控制要來(lái)得更加輕松,這里我們就來(lái)詳解Java的MyBatis框架中的事務(wù)處理,尤其是和Spring框架集成后更加exciting
    2016-06-06
  • Java中FileOutputStream流的write方法

    Java中FileOutputStream流的write方法

    這篇文章主要為大家詳細(xì)介紹了Java中FileOutputStream流的write方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • SpringData JPA實(shí)現(xiàn)查詢(xún)分頁(yè)demo

    SpringData 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-03
  • SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解

    SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解

    這篇文章主要介紹了SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java排序算法之計(jì)數(shù)排序解析

    Java排序算法之計(jì)數(shù)排序解析

    這篇文章主要介紹了Java排序算法之計(jì)數(shù)排序解析,找到數(shù)組中數(shù)值最大的元素,創(chuàng)建一個(gè)長(zhǎng)度為最大元素+1的臨時(shí)數(shù)組,這樣就可以把原始數(shù)組轉(zhuǎn)換為以原始數(shù)組元素值為下標(biāo),相同元素個(gè)數(shù)為值的臨時(shí)數(shù)組,需要的朋友可以參考下
    2023-10-10
  • Java字符串split使用方法代碼實(shí)例

    Java字符串split使用方法代碼實(shí)例

    這篇文章主要介紹了Java字符串split使用方法代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java如何操作MongoDB常用API文檔

    Java如何操作MongoDB常用API文檔

    這篇文章主要介紹了Java如何操作MongoDB常用API文檔,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java結(jié)合keytool如何實(shí)現(xiàn)非對(duì)稱(chēng)加密與解密詳解

    java結(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)、異步)

    這篇文章主要介紹了java 三種調(diào)用機(jī)制(同步、回調(diào)、異步),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 基于Java編寫(xiě)串口通信工具

    基于Java編寫(xiě)串口通信工具

    這篇文章主要為大家詳細(xì)介紹了基于Java編寫(xiě)的一個(gè)帶有圖形界面的簡(jiǎn)單串口通信工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評(píng)論