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);
        }
    }
}









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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值