jdbc與druid連接池的使用詳解
使用jdbc實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作
Ⅰ 獲取數(shù)據(jù)庫(kù)連接
package org.example.utils;
import java.sql.*;
public class JavaDateConnection {
/**
* 獲取數(shù)據(jù)庫(kù)連接
* @return Connection
*/
public Connection getConn() {
//project為數(shù)據(jù)庫(kù)名
String url = "jdbc:mysql://localhost:3306/project";
//用戶名
String username = "root";
//密碼
String password = "Hyk59308";
Connection conn = null;
try {
//注冊(cè)驅(qū)動(dòng)
Class.forName("com.mysql.jdbc.Driver");
//classLoader,加載對(duì)應(yīng)驅(qū)動(dòng)
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
Ⅱ編寫SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作
String sql1="insert into myTable values(?,?,?,?)";//定義sql語(yǔ)句
String sql2="select * from myTable"; //定義sql語(yǔ)句
int result=0; //修改操作的返回值是一個(gè)整數(shù),即受影響的行數(shù)
``/**
* PreparedStatement繼承自Statement接口,PreparedStatement的對(duì)象已預(yù)編譯過,
* 執(zhí)行速度快于Statement對(duì)象,創(chuàng)建其對(duì)象時(shí),需要SQL命令字符串作為對(duì)象
*/
PreparedStatement ps=connection.prepareStatement(sql1);
ps.setString(1,"tanker");
ps.setString(2, "m");
ps.setString(3,"1991-11-20");
ps.setString(4, "Franch");
result=ps.executeUpdate();
if(result>0)
System.out.println("插入成功");
else
System.out.println("插入失敗");
//Statement用于將sql語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)
Statement statement=connection.createStatement();
//執(zhí)行數(shù)據(jù)庫(kù)操作返回的結(jié)果集,其定義的是數(shù)據(jù)庫(kù)游標(biāo)
ResultSet results=statement.executeQuery(sql2);
System.out.println("name"+" "+"sex"+" "+"birth"+" "+"birthaddr");
System.out.println("------------------------");
while(results.next())
{
System.out.println(results.getString("name")+" "+
results.getString("sex")+" "+
results.getString("birth")+" "+
results.getString("birthaddr"));
}
System.out.println("搞定!");
Ⅲ關(guān)閉相關(guān)資源
* 關(guān)閉Connection PreparedStatement
* @param connection
* @param preparedStatement
*/
public static void closeConnection(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
使用Druid連接池u對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作
Ⅰ創(chuàng)建Druid連接池對(duì)象并獲取
package util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DBUtil {
private static DataSource ds;
static {
//1.加載配置文件
Properties pro = new Properties();
try {
pro.load(DBUtil.class.getClassLoader().getResourceAsStream("/db.properties"));
//獲取DataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//獲取連接
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
Ⅱ創(chuàng)建SQL語(yǔ)句實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作
/**
* @param sql SQL語(yǔ)句
* @param objs SQL語(yǔ)句占位符實(shí)參,如果沒有參數(shù)則傳入null
* @return 返回增刪改的結(jié)果,類型為int
*/
public static int executeDML(String sql,Object...objs){
// 聲明jdbc變量
Connection conn = null;
PreparedStatement ps = null;
int i = -1;
try {
// 獲取連接對(duì)象
conn = DBUtil.getConnection();
// 開啟事務(wù)管理
conn.setAutoCommit(false);
// 創(chuàng)建SQL命令對(duì)象
ps = conn.prepareStatement(sql);
// 給占位符賦值
if(objs!=null){
for(int j=0;j<objs.length;j++){
ps.setObject(j+1,objs[j]);
}
}
// 執(zhí)行SQL
i = ps.executeUpdate();
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
DBUtil.closeAll(null, ps, conn);
}
return i;
}
Ⅲ關(guān)閉相關(guān)資源
//關(guān)閉資源
public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
到此這篇關(guān)于jdbc與druid連接池的使用的文章就介紹到這了,更多相關(guān)jdbc與druid連接池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中使用DOM4J生成xml文件并解析xml文件的操作
這篇文章主要介紹了Java中使用DOM4J來生成xml文件和解析xml文件的操作,今天通過代碼給大家展示了解析xml文件和生成xml文件的方法,需要的朋友可以參考下2021-09-09
Springboot @Configuration @bean注解作用解析
這篇文章主要介紹了springboot @Configuration @bean注解作用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Windows下Java+MyBatis框架+MySQL的開發(fā)環(huán)境搭建教程
這篇文章主要介紹了Windows下Java+MyBatis框架+MySQL的開發(fā)環(huán)境搭建教程,Mybatis對(duì)普通SQL語(yǔ)句的支持非常好,需要的朋友可以參考下2016-04-04
idea項(xiàng)目中target文件提示拒絕訪問的解決
這篇文章主要介紹了idea項(xiàng)目中target文件提示拒絕訪問的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
SpringBoot+vue+Axios實(shí)現(xiàn)Token令牌的詳細(xì)過程
Token是在服務(wù)端產(chǎn)生的,前端可以使用用戶名/密碼向服務(wù)端請(qǐng)求認(rèn)證(登錄),服務(wù)端認(rèn)證成功,服務(wù)端會(huì)返回?Token?給前端,Token可以使用自己的算法自定義,本文給大家介紹SpringBoot+vue+Axios實(shí)現(xiàn)Token令牌,感興趣的朋友一起看看吧2023-10-10

