• JDBC学习篇(二)


    JDBC学习篇(二)

    JDBC的一种普通版本思路

    1 内容

    就是直接调用一些类的方法去实现,修改账户密码不方便

    且换了一个数据库,就也得重写数据库的业务逻辑

    更改性质不好,安全性能也不好,因为使用的是Statement对象

    容易出现sql注入问题

    2 核心思路

    2.1 导入jar包

    之前写过的导入jar包的流程

    2.2 注册驱动

    DriverManager.registerDriver(new Driver());
    //注意这个new Drive()对象是com.mysql.jdbc下的一个类,因此需要导入com.mysql.jdbc.Driver
    
    • 1
    • 2

    2.3 建立连接

    String url="jdbc:mysql://localhost:3306/库名?characterEncoding=utf-8";
    //连接你要操作的数据库是那个主机上面的,3306的MySQL这个软件对应的端口号
    //zking0618是你要操作的数据表所在的数据库(类似于在dos界面输入use zking0618这条指令)
    //characterEncoding=utf-8是保证更新的数据(新增、修改)为中文时,不会出现乱码问题(idea默认是utf8编码格式)
    String user="root";
    String pwd="root对应的密码";
    Connection conn=DriverManager.getConnection(url,user,pwd);
    /*因为要处理异常,因此将定义一般在try块的上方*/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.4 创建数据库操作对象

    Statement st=conn.createStatement();
    
    • 1

    2.5 处理查询结果

    String sql="DQL语句/DML语句";
    //若sql是DQL语句,需要用ResultSet来接收,通过next()方法和getString方法获取值
    ResultSet rs=st.executeQuery(sql);
    while(rs.next){
        String 变量名=rs.getString("字段名");
        /*通过字段名获取字段名对应的值,一般java的类的取名会和数据库的字段名保持一致
        即变量名和字段名看起来是一样的内容
        */
        ......
    }
    /*若sql语句是DML语句,需要用int类型接收,因为返回的是受影响的行数
    如果受影响行数不为0,则DML操作成功,否则失败
    */
    int count=st.executeUpdate(sql);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.6.释放资源

    /*释放资源的代码一般写在finally代码块中
    因为无论你的程序是抛出异常还是没有异常,它都进行finally代码块去进行资源的关闭
    关闭资源是调用的.close()方法,但是得要这个对象不为空才能去点方法
    因为在释放资源前,需要进行非空判断
    先关闭里面的资源,即st.close再去执行conn.close()
    原理其实很简单,就是联系生活,外面的门和里面的门都要关,你先把外面的门关掉了,此时就没有办法去关闭里面的那条门了,因次就需要先关闭里面的资源,再去关闭外面的资源
    */
    if (st != null) {
           try {
               st.close();
           } catch (SQLException throwables) {
               throwables.printStackTrace();
           } finally {
           }
    }
    if (conn != null) {
            try {
                 conn.close();
            } catch (SQLException throwables) {
                 throwables.printStackTrace();
            } finally {
            }
    }
    /*如果是sql语句是DQL语句的话,在st.close()之前需要rs.close()*/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    3 实现

    3.1 DQL语句

    3.1.1 示例代码
    import com.mysql.jdbc.Driver;
    
    import java.sql.*;
    import java.util.Date;
    
    public class JDBCTest02 {
        public static void main(String[] args) {
            Connection conn=null;
            Statement st=null;
            String url=null,user=null,pwd=null;
            ResultSet rs=null;
            try {
                //1.注册驱动
                DriverManager.registerDriver(new Driver());
                //2.建立连接
                url="jdbc:mysql://localhost:3306/zlz_temp?characterEncoding=utf-8";
                user="root";
                pwd="123456";
                conn=DriverManager.getConnection(url,user,pwd);
                //3.创建数据库操作对象
                st=conn.createStatement();
                //4.执行sql语句,sql语句里面的末尾不要写分号,查询用executeQuery()方法
                String sql="SELECT * FROM copy_emp WHERE ename='SMITH'";
                rs=st.executeQuery(sql);
                System.out.println("SMITH的信息如下所示:");
                //5.对结果进行处理
                while(rs.next()){
                    System.out.println("工号为"+rs.getString("empno"));
                    System.out.println("名字为"+rs.getString("ename"));
                    System.out.println("职位为"+rs.getString("job"));
                    System.out.println("上级领导工号为"+rs.getString("mgr"));
                    System.out.println("入职日期"+rs.getString("hiredate"));
                    System.out.println("薪水"+rs.getString("sal"));
                    System.out.println("津贴"+rs.getString("comm"));
                    System.out.println("部门编号为"+rs.getString("deptno"));
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } finally {
                //6。关闭资源,从内往外关(后面使用的先关闭)
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    } finally {
                    }
                }
                if (st != null) {
                    try {
                        st.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    } finally {
                    }
                }
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    } finally {
                    }
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    3.1.2 示例代码运行截图

    在这里插入图片描述

    3.3 DML语句

    3.1.1 示例代码
    /*修改名字为SMITH的员工的津贴为300元*/
    import com.mysql.jdbc.Driver;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JDBCTest01 {
        public static void main(String[] args) {
           Connection conn=null;
           Statement st=null;
           String url=null,user=null,pwd=null;
            try {
                //1.加载驱动
                DriverManager.registerDriver(new Driver());
                //2。建立连接
                url="jdbc:mysql:///zlz_temp?characterEncoding=utf-8";
                user="root";
                pwd="123456";
                conn=DriverManager.getConnection(url,user,pwd);
                //3.创建数据库操作对象
                st=conn.createStatement();
                //4.执行sql语句
                String sql="UPDATE copy_emp SET comm=300 WHERE ename='SMITH'";
                int count=st.executeUpdate(sql);
                //5.对结果集进行处理
                System.out.println(count>0?"更新成功":"更新失败");
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } finally {
                //6.释放资源
                if (st != null) {
                    try {
                        st.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    } finally {
                    }
                }
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    } finally {
                    }
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    3.1.2 示例代码运行截图

    在这里插入图片描述

    3.1.3 数据表原来的数据截图

    在这里插入图片描述

    3.1.4 数据表更新后的数据截图

    在这里插入图片描述

  • 相关阅读:
    外设驱动库开发笔记45:MS4515DO压力传感器驱动
    OS2.3.2:进程互斥的软件实现方法
    深度学习——TensorBoard的使用
    1023. 驼峰式匹配
    第2章 Linux多进程开发 2.18 内存映射
    买学生台灯应该怎么选择?学生护眼台灯推荐
    Redux使用详解(二)--react-redux的使用
    【云原生】k8s存储管理中ConfigMap & Secret的使用
    一、入行程序员的一波三折
    MFC中CString的用法及使用示例
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/126382234