JDBC常見操作開發

小菜一碟

1.鏈接mysql數據庫

package com.cnn;

import com.mysql.jdbc.Connection;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
 * 
 * 鏈接數據庫
 * 
 * */
public class Connect {
    public static void main(String[] args) throws Exception {
        //1.加載Driver驅動進入jvm
        Class.forName("com.mysql.jdbc.Driver");
        //數據庫鏈接地址 格式jdbc:mysql:數據庫url/數據庫名
        String url = "jdbc:mysql://localhost:3306/jdbc_learn";
        String user = "root";
        String pwd = "123456";
        Connection cnn=null;
        Statement st=null;

        try {
            //2.獲取連接對象
            cnn = (Connection) DriverManager.getConnection (url, user, pwd);

            //3.創建sql語句
            //創建一個數據表
            String sql="create table student(id int,name varchar(50),age int)";
            //創建一個“連接管道”
            st =cnn.createStatement ();

            //4.執行sql語句
            st.executeUpdate (sql);
        } catch (SQLException e) {
            e.printStackTrace ();
        
        } finally {

            //5.釋放資源
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace ();
            }
            try {
                cnn.close();
            } catch (Exception e) {
                e.printStackTrace ();
            }
        }
    }
}

2.插入操作 插入修改等操作 在執行的時候用executeUpdate

package com.cnn;

import com.mysql.jdbc.Connection;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 插入數據
 * 
 * */
public class Insert {
    public static void main(String[] args) throws Exception {
        //1.加載Driver驅動進入jvm
        Class.forName ("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/jdbc_learn";
        String user = "root";
        String pwd = "123456";

        Connection cnn = null;
        Statement st= null;
        try {

            //2.獲取連接對象
            cnn = (Connection) DriverManager.getConnection (url, user, pwd);
            //3。創建sql語句
            String sql="insert into  student values (1,'zc',20)";
            //4.創建連接管道
            st = cnn.createStatement ();
            //5.執行sql語句
            //返回一個行數。插入成功一行 就返回1
            int row= st.executeUpdate (sql);
            System.out.println (row);
        } catch (SQLException e) {
            e.printStackTrace ();
        } finally {
            if(st!=null)
                try {
                    //釋放資源  先關閉這個msqql 到msql.exe的這個通道
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace ();
                }
            if(cnn!=null)
                try {
                    //關閉java到mysql的通道
                    cnn.close();
                } catch (SQLException e) {
                    e.printStackTrace ();
                }
        }



    }




}

3.查詢數據 查詢語句執行的時候用executeQuery

package  com.cnn;

import com.mysql.jdbc.Connection;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 查詢獲得多條數據
 * */


public class DQLDatasClass {
    public static void main(String[] args) throws Exception {
        //1.將Driver驅動加載進jvm
        Class.forName ("com.mysql.jdbc.Driver");
        //數據庫鏈接地址 格式 jdbc:mysql:數據庫網址/數據庫名
        String url="jdbc:mysql://localhost:3306/jdbc_learn";
        String user="root";
        String pwd="123456";
        Connection cnn=null;
        Statement st = null;

        try {
            //2.創建鏈接對象
            cnn= (Connection) DriverManager.getConnection (url,user,pwd);
            //3。創建sql語句
            String sql="select * from student";

            //創建鏈接管道
            st=cnn.createStatement ();
            //4.執行sql語句
            ResultSet res=st.executeQuery (sql);
            //如果只想要查詢返回 滿足一條的數據,那麼去掉while 變爲if就可以
            while(res.next ()){
                int id=res.getInt ("id");
                String name=res.getString ("name");
                int age=res.getInt ("age");
                System.out.println (" id= "+id+" name= "+name+" age= "+age);
            }
        } catch (SQLException e) {
            e.printStackTrace ();
        } finally {
            if(st!=null){
                try {
                	//5。釋放資源  釋放管道
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace ();
                }
            }
            if(cnn!=null){
                try {
                	//5.釋放資源  釋放連接器
                    cnn.close();
                } catch (Exception e) {
                    e.printStackTrace ();
                }
            }

        }
    }
}


主菜

jdbc數據庫開發例子:

一些概念與規範:

概念:

1.DAO思想 (DATA Access Object)數據存取對象 裏面封裝了一些操作數據庫的方法。比如插入數據,獲得查詢數據,修改數據等方法

2.對象ORM對象關係映射

面向對象概念 面向關係概念
對象 一條記錄
屬性 字段

3.domain 類

作用:用戶於數據庫的中轉站

裏面放着一些數據的set和get方法

規範:總的來說要見名知意

1.包的命名規範

域名倒寫.模塊名稱.組件名稱

damain包 com.zc.jdbc.domain

dao接口包 com.zc.jdbc.dao

實現包:com.zc.jdbc.impl

測試包 com.zc.jdbc.test

2.類命名規範

以一個學生表爲例子

domain類 那麼取名Student

dao接口類 StudentDao

dao接口實現類 StudentDaoImpl

測試方法 StudentTest

4.jdbc 數據庫開發正確操作步驟:

  1. 數據庫中創建表
  2. 建立domain包domian類
  3. 建立Dao包和dao接口類
  4. 建立dao.impl包和dao接口實現類
  5. 創建測試類
  6. 實現類中編寫dao接口中聲明的方法
  7. 每次實現一個dao接口方法,就測試一次

jdbc整個代碼流程

  1. 加載驅動Driver進入jvm
  2. 創建連接對象
  3. 創建sql語句
  4. 執行sql語句
  5. 釋放資源 先釋放ResultSet結果資源 Statement資源 最後釋放Connection連接資源

java通過 jdbc連接mysql示意圖
在這裏插入圖片描述

[外鏈圖片轉存失敗(img-XcdkAhLj-1562594842681)(C:\Users\MI\Pictures\java\jdbc.png)]

實際演練

分爲幾個模塊 Dao接口模塊 dao Dao接口實現模塊impl 工具類模塊jdbcutil domain模塊 Test模塊。

因爲你每對一次數據庫進行操作 就會重複很多代碼,連接msql,登陸用戶密碼,釋放資源等都是重複的,因此將它們封裝成工具類,減小代碼耦合性,增加彈性。

注意:由於每對數據庫操作一次都重複了 驅動器加載的步驟 Class.forName(“com.jdbc.mysql.Driver”);因此將它放入了static靜態模塊裏,就可以只加載一次。

工程結構圖

在這裏插入圖片描述

代碼:

dao接口代碼

package databasedao.jdbc.dao;


import com.dao.Student;

import java.sql.SQLException;
import java.util.List;

/**
 * Stduent 表的Dao操作接口
 *
 * */
public interface iStudentDao {
    //1.保存數據
    void save(Student stu) throws  Exception;

    //2.獲取指定學生
    Student get(int id);
    //3.刪除學生
    void delete(int id);

     List<Student> getAll() ;
    //5.修改指定學生信息
    void upDate(int id,Student stu);


}

domain模塊代碼

package databasedao.jdbc.domain;

public class Student {
    private String name;
    private Integer id;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

實現類impl模塊代碼

package databasedao.jdbc.impl;

import com.dao.Student;
import databasedao.jdbc.dao.iStudentDao;
import databasedao.jdbc.jdbcutil.JdbcUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class StudentDaoImpls implements  iStudentDao {

    Connection cnn = null;
    Statement st = null;
    ResultSet res = null;


    @Override
    public void save(Student stu) {
        try {
            //返回連接對象
            JdbcUtil.getConnection ();
            st = cnn.createStatement ();
            Integer id = stu.getId ();
            String name = stu.getName ();
            Integer age = stu.getAge ();
            String sql = "insert into student(id,name,age)values (" + id + ",'" + name + "'," + age + ")";
            System.out.println (sql);
            //4.執行sql語句
            //insert插入操作用executeUpdate執行  獲得REsultSet對象
            int res = st.executeUpdate (sql);
        } catch (SQLException e) {
            e.printStackTrace ();
        } catch (Exception e) {
            e.printStackTrace ();
        } finally {
            JdbcUtil.close (res, st, cnn);
        }
    }

        @Override
        public Student get ( int id){
            try {

                cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
                //3。創建sql語句
                //創建連接管道
                st = cnn.createStatement ();

                String sql = "select * from student where  id =" + id + "";
                System.out.println (sql);
                //4.執行sql語句
                //查詢操作用executeQuery執行  獲得REsultSet對象
                res = st.executeQuery (sql);
                while (res.next ()) {
                    Student stu = new Student ();
                    stu.setAge (res.getInt ("id"));
                    stu.setName (res.getString ("name"));
                    stu.setAge (res.getInt ("age"));
                    return stu;
                }
            } catch (Exception e) {
                e.printStackTrace ();
            } finally {
                JdbcUtil.close (res,st,cnn);
            }
            return null;
        }




    @Override
    public void delete(int id) {
        try {
            cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
            //3。創建sql語句
            //創建連接管道
            st = cnn.createStatement ();

            String sql = "delete from student where id=" + id + "";
            System.out.println (sql);
            //4.執行sql語句
            //insert插入操作用executeUpdate執行  獲得ResultSet對象
            int res = st.executeUpdate (sql);
        } catch (SQLException e) {
            e.printStackTrace ();
        } catch (Exception e) {
            e.printStackTrace ();
        } finally {
            JdbcUtil.close (res, st, cnn);
        }
    }


    @Override
        public List<Student>getAll(){
            try {
                //1,加載驅動
                Class.forName (JdbcUtil.driverName);
                cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
                //3。創建sql語句
                //創建連接管道
                st = cnn.createStatement ();

                String sql = "select * from student";
                System.out.println (sql);
                //4.執行sql語句
                //查詢操作用executeQuery執行  獲得ResultSet對象
                ResultSet res = st.executeQuery (sql);
                Student s = new Student ();
                List<Student> stu = new ArrayList<> ();
                while (res.next ()) {
                    s.setId (res.getInt ("id"));
                    s.setName (res.getString ("name"));
                    s.setAge (res.getInt ("age"));
                    stu.add (s);
                } return stu;
            } catch (Exception e) {
                e.printStackTrace ();
            } finally {
                JdbcUtil.close (res,st,cnn);
            }
        return null;
        }





    @Override
        public void upDate ( int id, Student stu) {
            try {
                cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
                //3.建sql語句
                //創建連接管道
                st = cnn.createStatement ();
                String sql = "update  student set name='" + stu.getName () + "',age=" + stu.getAge () + " where id=" + id + "";
                System.out.println (sql);
                //4.執行sql語句
                //insert插入操作用executeUpdate執行  獲得REsultSet對象
                int res = st.executeUpdate (sql);
            } catch (Exception e) {
                e.printStackTrace ();
            } finally {
                JdbcUtil.close (res, st, cnn);
            }

        }
    }

工具類jdbcutil模塊

知識點 static關鍵字使用

package databasedao.jdbc.jdbcutil;

import com.cnn.Connect;

import java.sql.*;
import java.util.Collection;

public  class JdbcUtil {
    public static String url = "jdbc:mysql://localhost:3306/jdbc_learn";
    public static String user = "root";
    public static String pwd = "123456";
    public static String driverName = "com.mysql.jdbc.Driver";

    static{
        //1,加載驅動
        try {
            Class.forName (JdbcUtil.driverName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace ();
        }

    }

    //獲取連接對象
    public static Connection getConnection() {
        Connection cnn=null;
        try {
            cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
        } catch (Exception e) {
            e.printStackTrace ();
        }
        return  cnn;
    }


    /***
     * 釋放資源
     * 1.結果資源  2.Statement通道資源  3.Connection  java與mysql數據庫之間得連接資源
     */
    public static void   close(ResultSet res, Statement st,Connection cnn){
        if (res!= null) {
            try {
                res.close ();
            } catch (SQLException e) {
                e.printStackTrace ();
            } finally {
                if (st != null)
                    try {
                        st.close ();
                    } catch (SQLException e) {
                        e.printStackTrace ();
                    }if(cnn!=null){
                    try {
                        cnn.close();
                    } catch (SQLException e) {
                        e.printStackTrace ();
                    }
                }
            }
        }
    }
}


測試模塊

@Test 註解實現單元測試

package databasedao.jdbc.test;
import databasedao.jdbc.dao.iStudentDao;
import com.dao.Student;
import databasedao.jdbc.impl.StudentDaoImpls;
import org.junit.jupiter.api.Test;

import java.util.List;

public class StudentTest {
    public static void main(String[] args) throws Exception {
        Student stu=new Student ();
        stu.setId (1);
        stu.setName ("zc");
        stu.setAge (20);
        iStudentDao stuDao=new StudentDaoImpls ();
        stuDao.save (stu);
    }


    //單元測試
    @Test
    public void save() throws Exception {
        Student stu=new Student ();
        stu.setId (1);
        stu.setName ("zc");
        stu.setAge (20);
        iStudentDao stuDao=new StudentDaoImpls ();
        stuDao.save (stu);
    }
    @Test
    public void upDate() throws Exception {
        Student stu=new Student();
        stu.setName ("dasdsadasdasdsadsa");
        stu.setAge (200);
        iStudentDao dao=new StudentDaoImpls ();
        dao.upDate (2,stu);

    }
    @Test
    public void delete(){
        iStudentDao  dao=new StudentDaoImpls ();
        dao.delete (1);
    }
    @Test
    public void get(){
        iStudentDao dao=new StudentDaoImpls ();
        System.out.println (dao.get (2).toString ());

    }
    @Test
    public  void getAll() throws Exception {
        iStudentDao dao=new StudentDaoImpls ();

        List list=dao.getAll ();
        for(int i=0;i<list.size ();i++){
            Object obj=list.get (i);
            System.out.println (obj);
        }
    }
}









注意: 拼接方法
當不是字符串時: “+ 拼接值+”

是字符串的時候 ‘ “ + 拼接值+” ’

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