Java通過JDBC連接數據庫的三種方式!!!並對數據庫實現增刪改查


前言
java連接數據庫完整流程為:
1,獲得驅動(driver),數據庫連接(url),用戶名(username),密碼(password)基本信息的三種方式。
2,通過獲得的信息完成JDBC實現連接數據庫。
注:連接前請導入jar包,例:連接mysql數據庫需要導入mysql-connector-java-5.1.39-bin.jar包

連接數據庫的三種方式
三種方式中二,三最為常用

一,直接獲取數據庫信息,並jdbc驅動連接

這里寫代碼片  public static Connection connection() {
        //獲得連接數據庫連接
        Connection conn=null;
        try {
        //初始化Driver類,注冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //連接數據庫
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/web", "root", "root");

        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn; 
    }

二,獲得db.properties文件中的配置信息獲得

注解: 
ResourceBundle 類的作用就是讀取資源屬性文件(properties),根據.properties文件的名稱信息(本地化信息),匹配當前系統的國別語言信息(也可以程序指定),然后獲取相應的properties文件的內容。
public class Jdbc_Conn2 {
      private static String driver;
      private static String url;
      private static String username;
      private static String password;
      static {
          //通過ResourceBundle獲得db文件中的信息
          ResourceBundle bundle = ResourceBundle.getBundle("db");
          //通過key值獲得db文件中的配置信息
          driver=bundle.getString(driver);
          url=bundle.getString(url);
          username=bundle.getString(username);
          password=bundle.getString(password);
      }

    public static Connection mysqlconn() {
        //連接數據庫
        Connection conn=null;
            Class.forName(driver);
            conn= DriverManager.getConnection(url, username, password);
            return conn; 
    }

三、通過IO流獲得db文件中配置信息

注解: 
*首先,調用對象的getClass()方法是獲得對象當前的類類型,這部分數據存在方法區中,而后在類類型上調用getClassLoader()方法是得到當前類型的類加載器,在Java中所有的類都是通過加載器加載到虛擬機中的,
而且類加載器之間存在父子關系,就是子知道父,父不知道子,這樣不同的子加載的類型之間是無法訪問的(雖然它們都被放在方法區中),所以在這里通過當前類的加載器來加載資源也就是保證是和類類型同一個加載器加載的。 最后調用了類加載器的getResourceAsStream()方法來加載文件資源
*
public class Jdbc_Conn3 {
    private static String dirver;
    private static String url;
    private static String username;
    private static String password;
    static {
    //IO流
        InputStream is=Jdbc_Conn3.class.getClassLoader().getResourceAsStream("db.properties");
        Properties props=new Properties();
        try {
            props.load(is);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        dirver=props.getProperty("driver");
        url=props.getProperty("url");
        username=props.getProperty("username");
        password=props.getProperty("password");
    }


    public static Connection mysqlconn() {
        //1,獲得連接數據庫的驅動
        Connection conn=null;
        Class.forName(dirver);
        conn= DriverManager.getConnection(url, username, password);
        return conn; 
    }

連數據庫后,使用完畢需要關閉連接

關閉數據庫需要關閉以下資源:1,Connection(連接).2,PreparedStatement(預編譯).3,Result(結果集)

 public static void mysqlcolse(Connection con,PreparedStatement pstem,ResultSet rs) {

            try {
                if(con!=null) {
                con.close();
                }
                if(pstem!=null)
                {
                    pstem.close();
                }
                if(rs!=null) {
                    rs.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


    }

完成以上步驟便是一個連接數據庫的java模板了,以上連接方法與關閉方法存於一個java文件中即可完成。

增、刪、改、查

前言

1   以下代碼在完成連接數據庫的基礎之上完成,通過java實現對數據庫的增刪改查

一、查詢功能
注:
Connection中prepareStatement()方法,提供占位符(?),占位符設置參數setXXX(index,value)。優點:改動參數時,不需改動sql,通過占位符修改。
ResultSet類,作為查詢條件的返回集的作用

//先聲明對象,優點在於方便下方任意代碼塊調用對象信息。
    Connection con=null;
    PreparedStatement pstm=null;
    ResultSet rs=null;

    @Test
    public void testJv3()
    {
    //1,通過JDBC的模板連接上數據庫
    con=Jdbc_Conn3.mysqlcon();
    //2,編寫sql語句
    String sql="select * from user where uid=?";
    try {
    //3.預編譯需要執行的sql
        pstm = con.prepareStatement(sql);
        //prepareStatement中占位符?,通過setXXX(index,values)來進行設置,index從1開始,
        pstm.setInt(1, 1);
        //執行sql並返回查詢結果
        ResultSet rs = pstm.executeQuery();
        if(rs.next())
        {
            String password=rs.getString(3);
            String uname=rs.getString(2);
            System.out.println(uname+":"+password);
        }else {
            System.out.println("沒有結果");
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally {
        Jdbc_Conn3.mysqlcolse(con, pstm, rs);
    }

    }

額外知識點:查詢條件輸出方式 
if():當只有一條結果時,可用if 
while():當有多條結果時,可用while

二、增,刪,改

增刪改,只需要改對應sql即可,以下代碼為模板。
PreparedStatement pstm=null;
        Connection con=null;
        //1,實例化MyDataSource
        ComboPooledDataSource mdsc= new ComboPooledDataSource();
        //2.從MyDataSource的池中獲得連接對象
        try {
            con= mdsc.getConnection();
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        //3.寫sql
        String sql="insert into user values (null,?,?)";
        //4,預編譯
        try {
            pstm= con.prepareStatement(sql);
            pstm.setString(1, "zj");
            pstm.setString(2, "zj");
            int col=pstm.executeUpdate();
            if(col>0) {
                System.out.println("添加成功:"+col+"條數");
            }else {
                System.out.println("添加失敗");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            JDBCUtils_V3.release(con, pstm, null);
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM