java與數據庫oracle連接學習之jdbc(8)--java和數據庫時間轉換

1、工具類

package com.DB;

import java.sql.*;

/**
 * JDBC的工具類:
 * 加載驅動:只需要加載一次
 * 建立連接:
 * 釋放資源:
 */

public class JDBCUTILS {
    private static final String DRIVER = "oracle.jdbc.OracleDriver";
    // 主機地址 連接本機 localhost  或者127.0.0.1
    // 端口號 Oracle 數據庫默認端口號 1521
    // 實例名 安裝全的是orcl,沒有安裝全的是XE
    private static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";   // jdbc:oracle:thin: @主機地址 :  端口號 : 實例名
    private static String USER = "wbd";
    private static String PASSWORD = "wbdpsd";
    static {//因爲驅動只需要加載一次,所以在靜態語句中進行
        try {
            Class.forName(DRIVER);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    /**
     *建立與數據庫的連接
     * @return 連接好的連接
     */
    public static Connection getConnection(){
        try {
            Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
            return  connection;
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    /**
     * 釋放資源
     * @param resultSet 結果集
     * @param statement 語句對象
     * @param connection 連接
     */
    public static void close(ResultSet resultSet, Statement statement, Connection connection){//查詢時
        try
        {
            if (resultSet != null && !resultSet.isClosed())
                resultSet.close();
        }
        catch(SQLException ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            try
            {
                if (statement != null && !statement.isClosed())
                    statement.close();
            }
            catch (SQLException ex)
            {
                ex.printStackTrace();
            }
            finally
            {
                try
                {
                    if (connection != null && !connection.isClosed())
                        connection.close();
                }
                catch(SQLException ex)
                {
                    ex.printStackTrace();;
                }
            }
        }
    }

    /**
     * 釋放資源
     * @param statement 語句對象
     * @param connection 連接
     */
    public static void close(Statement statement, Connection connection){//增刪改
        close(null,statement,connection);
    }
}


2、通用類

package com.DB;

//import oracle.sql.BfileDBAccess;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.*;
import java.util.*;

import static com.DB.JDBCUTILS.close;

/**
 * 通用的DAO,可以對任意表做增刪改
 */
public     class CommonDao extends JDBCUTILS {

    /**
     * 對任意表做增刪改,根據增刪改的字符串或數字不同操作
     * @return
     */

    public static int executeUpdate(String sql,Object ...params){
        Connection conn =null;
        PreparedStatement preparedStatement =null;
        int i=0;
        try {
            //獲取連接
            conn = getConnection();
            //創建語句對象
            preparedStatement = conn.prepareStatement(sql);
            if(params!=null && params.length>0){//判斷需要佔位符
                for(int j=0;j<params.length;j++){
                    //設置佔位符
                    preparedStatement.setObject(j+1,params[j]);
                }
            }
            i = preparedStatement.executeUpdate();//成功爲1
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        finally {//釋放資源
            close(preparedStatement,conn);
        }
        return i;
    }

    public static <T> List<T> queryBeenList(String sql,Class<T>classz ,Object ...paramas){
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        List<T>lst =new ArrayList<>();
        T tmp =null;
        try{
            //獲取連接
            connection = getConnection();
            //創建語句對象
            preparedStatement = connection.prepareStatement(sql);
            if(paramas!=null&&paramas.length>0){//需要設置佔位符
                for(int i=0;i<paramas.length;i++){
                    preparedStatement.setObject(i+1,paramas[i]);
                }
            }
            //執行SQL語句
            resultSet = preparedStatement.executeQuery();
            //處理結果
            //獲取所有的屬性
            Field[]fields=classz.getDeclaredFields();
            //獲取元數據
            ResultSetMetaData  metaData = resultSet.getMetaData();
            //獲取共多少行
            int columnCount = metaData.getColumnCount();
            //準備字符串數組,用來保存字段名
            String []columnNames =new String[columnCount];
            for(int i=0;i<columnCount;i++){         //從數據庫中獲取變量名
                columnNames[i] = metaData.getColumnName(i+1);
            }
            while(resultSet.next()){            //行數據
                tmp = classz.newInstance();
                for(Field  f:fields){           //從類的屬性名
                    String name = f.getName();
                    Class<?>type =f.getType();
                    //set屬性
                    String smn = "set"+name.substring(0,1).toUpperCase()+name.substring(1);
                    // 根據方法名找到方法類型
                    Method sm = classz.getMethod(smn, f.getType());
                    for(String columnName :columnNames){       //從數據庫獲取的變量名
                        if(columnName.equalsIgnoreCase(name) ) {        //忽略大小寫匹配,我的數據庫變量名和對象的變量名一樣,只是大小寫區別
                            Object value = resultSet.getObject(columnName);
                            if(value==null)
                                continue;
                            if(value instanceof BigDecimal && type ==int.class){
                                value = ((BigDecimal)value).intValue();
                            }
                            if(value instanceof BigDecimal && type ==double.class){
                                value = ((BigDecimal)value).doubleValue();
                            }
                            sm.invoke(tmp,value);
                        }
                    }
                }
                lst.add(tmp);
            }
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } finally {
            close(resultSet,preparedStatement,connection);
        }
        return lst;
    }

    public static <T> T  queryBeen(String sql,Class<T>classz,Object ...params){
        List<T>lst= queryBeenList(sql,classz,params);
        if(lst.size()>0){
            return lst.get(0);
        }
        return null;
    }

    public static int  queryBeenLength(String sql){
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        int num = 0;
        try{
            //獲取連接
            connection = getConnection();
            //創建語句對象
            preparedStatement = connection.prepareStatement(sql);

            //執行SQL語句
            resultSet = preparedStatement.executeQuery();
            //處理結果
            if(resultSet.next()){
                num = resultSet.getInt(1);
            }
        }
        catch(SQLException e){
            e.printStackTrace();
        }finally {
            close(resultSet,preparedStatement,connection);
        }
        return num;
    }
}


3、圖書記錄類

package com.DB;

import java.util.Date;

public class RB {
    private String uno;
    private String bno;
    private String rbDate;

    public String getUno() {
        return uno;
    }

    public void setUno(String uno) {
        this.uno = uno;
    }

    public String getBno() {
        return bno;
    }

    public void setBno(String bno) {
        this.bno = bno;
    }

    public String getRbDate() {
        return rbDate;
    }

    public void setRbDate(String rbDate) {
        this.rbDate = rbDate;
    }

    public String toString(){
        return uno+" borrowed "+bno+" at "+rbDate;
    }
}

4、最主要的調用

 public static void main(String []args){
        try {
            String inputString = "2020-06-22";
            String uno ="123";
            String bno ="0010";

            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            java.util.Date date1 = format.parse(inputString);
            System.out.println(date1);

            java.sql.Date date2 = new java.sql.Date(date1.getTime());
            System.out.println(date2);

            String sql="insert into rb  values(?,?,?)";

            Connection conn =null;
            PreparedStatement preparedStatement =null;
            try {
                //獲取連接
                conn = getConnection();
                //創建語句對象
                preparedStatement = conn.prepareStatement(sql);
                preparedStatement.setString(1,uno);
                preparedStatement.setString(2,bno);
                preparedStatement.setDate(3,date2);

                System.out.println(preparedStatement.execute());
                /*
                如果第一個結果是 ResultSet 對象,則返回 true;如果第一個結果是更新計數或者沒有結果,則返回 false
                意思就是如果是查詢的話返回true,如果是更新或插入的話就返回false了;
                 */
            }
            catch(SQLException e){
                e.printStackTrace();
            } finally {//釋放資源
                close(preparedStatement,conn);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章