目錄
背景
今天需要實現將Oracle數據庫中的指定字段取出來,使用Base64進行加密,然後將加密結果存回去,涉及到Oracle數據庫的操作。
一、獲取數據庫連接
public static Connection getConnection(){
Connection conn = null;
//設置數據庫的連接地址
// String url = "jdbc:oracle:thin:@localhost:1521:test";//改格式數據庫連接時一直報錯
String url = "jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT =1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =test)))";
String user = "crawlm";
String passwd = "crawlm_Sd";
try{
//加載數據庫驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
//獲取數據庫連接
conn = DriverManager.getConnection(url,user,passwd);
} catch (ClassNotFoundException e){
e.printStackTrace();
System.out.println("加載數據庫啓動失敗!");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("獲取數據庫連接失敗!");
}
return conn;
}
二、關閉數據庫連接
public static void closeConnection(Connection conn, PreparedStatement ps, ResultSet rs){
//關閉結果集對象
try{
if (rs != null){
rs.close();
}
}catch (SQLException e){
e.printStackTrace();
System.out.println("關閉ResultSet失敗!");
}
//關閉SQL語句預編譯對象
try {
if (ps != null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("關閉PreparedStatement失敗!");
}
//關閉數據庫連接
try{
if (conn != null){
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
System.out.println("關閉Connetion失敗!");
}
}
三、獲取查詢數據
public static ResultSet getResultSet(){
Connection conn = null;
PreparedStatement statement = null;
ResultSet rs = null;
String querySql = "select KEYWORDS1 from KEYWORDS_ALL";
try{
conn = OracleUtil.getConnection();
if (conn == null){
System.out.println("獲取連接失敗");
}
statement = conn.prepareStatement(querySql);
rs = statement.executeQuery();
return rs;
} catch (SQLException e) {
e.printStackTrace();
return rs;
}finally {
OracleUtil.closeConnection(conn,statement,rs);
return rs;
}
}
四、對數據進行加密並批量更新
public static int updateBatchData(List<KeyWords2Base64> data){
Connection conn = null;
PreparedStatement statement = null;
ResultSet rs = null;
//更新SQL語句
String updateSql = "update KEYWORDS_ALL set KEYWORDS2=? where KEYWORDS1=?";
try{
conn = OracleUtil.getConnection();
if (conn == null){
System.out.println("獲取連接失敗");
}
//關閉自動提交事務
conn.setAutoCommit(false);
//創建一個 PreparedStatement 對象來將參數化的 SQL語句發送到數據庫
statement = conn.prepareStatement(updateSql);
//將一組參數添加到此 PreparedStatement 對象的批處理命令中
for (KeyWords2Base64 subdata: data){
statement.setString(1,subdata.getKeyword2());
statement.setString(2,subdata.getKeyword1());
statement.addBatch();
}
//執行更新操作
statement.executeBatch();
//語句執行完畢,提交事務
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
System.out.println(1);
return -1;
}finally {
OracleUtil.closeConnection(conn,statement,rs);
System.out.println(2);
return -2;
}
}
五、完整代碼
package program;
import java.sql.*;
import java.util.List;
/**
* @ClassName OracleUtil
* @Date 2020/3/26 8:34
* @Description
* Oracle數據庫工具類
*/
public class OracleUtil {
/**
* 獲取Oracle數據庫連接
* @return connnetion
*/
public static Connection getConnection(){
Connection conn = null;
//設置數據庫的連接地址
// String url = "jdbc:oracle:thin:@localhost:1521:test";//改格式數據庫連接時一直報錯
String url = "jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT =1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =test)))";
String user = "crawlm";
String passwd = "crawlm_Sd";
try{
//加載數據庫驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
//獲取數據庫連接
conn = DriverManager.getConnection(url,user,passwd);
} catch (ClassNotFoundException e){
e.printStackTrace();
System.out.println("加載數據庫啓動失敗!");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("獲取數據庫連接失敗!");
}
return conn;
}
/**
* 關閉數據庫連接方法
* @param conn Connection
* @param ps PreparedStatement
* @param rs ResultSet
*/
public static void closeConnection(Connection conn, PreparedStatement ps, ResultSet rs){
//關閉結果集對象
try{
if (rs != null){
rs.close();
}
}catch (SQLException e){
e.printStackTrace();
System.out.println("關閉ResultSet失敗!");
}
//關閉SQL語句預編譯對象
try {
if (ps != null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("關閉PreparedStatement失敗!");
}
//關閉數據庫連接
try{
if (conn != null){
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
System.out.println("關閉Connetion失敗!");
}
}
/**
* 獲取數據庫數據方法
* @return
*/
public static ResultSet getResultSet(){
Connection conn = null;
PreparedStatement statement = null;
ResultSet rs = null;
String querySql = "select KEYWORDS1 from KEYWORDS_ALL";
try{
conn = OracleUtil.getConnection();
if (conn == null){
System.out.println("獲取連接失敗");
}
statement = conn.prepareStatement(querySql);
rs = statement.executeQuery();
return rs;
} catch (SQLException e) {
e.printStackTrace();
return rs;
}finally {
OracleUtil.closeConnection(conn,statement,rs);
return rs;
}
}
/**
* 更新數據庫方法
* @param data
* @return
*/
public static int updateBatchData(List<KeyWords2Base64> data){
Connection conn = null;
PreparedStatement statement = null;
ResultSet rs = null;
//更新SQL語句
String updateSql = "update KEYWORDS_ALL set KEYWORDS2=? where KEYWORDS1=?";
try{
conn = OracleUtil.getConnection();
if (conn == null){
System.out.println("獲取連接失敗");
}
//關閉自動提交事務
conn.setAutoCommit(false);
//創建一個 PreparedStatement 對象來將參數化的 SQL語句發送到數據庫
statement = conn.prepareStatement(updateSql);
//將一組參數添加到此 PreparedStatement 對象的批處理命令中
for (KeyWords2Base64 subdata: data){
statement.setString(1,subdata.getKeyword2());
statement.setString(2,subdata.getKeyword1());
statement.addBatch();
}
//執行更新操作
statement.executeBatch();
//語句執行完畢,提交事務
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
System.out.println(1);
return -1;
}finally {
OracleUtil.closeConnection(conn,statement,rs);
System.out.println(2);
return -2;
}
}
}