• jdbc连接操作mysql,直接操作和预处理方式


    步骤:
    1. 加载sql数据库驱动
    Class.forName(“com.mysql.jdbc.Driver”);
    2. 连接数据库
    con = DriverManager.getConnection(url, username, pwd);
    3.获得Statement
    stmt = con.createStatement();
    4.写入想要执行的sql语句
    eg: String sql = “select * from student”;
    5.操作数据库

    为方面理解下面是本人操作的数据库内容:
    这里写图片描述

    这里写图片描述

    package com.wql.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    /**
     * @author wql
     *
     */
    public class jdbc {
        public static void main(String[] args) {
            /// 加载sql数据库驱动
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            Connection con = null;
            Statement stmt = null;
            ResultSet result = null;
            PreparedStatement pstm = null;// 预处理
    
            String url = "jdbc:mysql://localhost:3306/work"; // 数据库所在位置
            String username = "root"; // 数据库用户名
            String pwd = "123456"; // 数据库密码
            try {
                /// 连接数据库
                con = DriverManager.getConnection(url, username, pwd);
    
                /// 获得Statement
                stmt = con.createStatement();
    
                /// 写入想要执行的sql语句
                String sql = "select * from student";
    
                /// 获得sql语句执行后的集
                result = stmt.executeQuery(sql);
    
                // 在控制台打印出数据库内容
                System.out.println("学号" + " 姓名" + "    年    龄    " + "  性别");
                while (result.next()) {
                    int id = result.getInt(1); // 这里对应数据库中表的第一个字段属性,接受内容的属性要根据数据库的属性
                    String name = result.getString(2);
                    String age = result.getString(3);
                    String sex = result.getString(4);
                    System.out.println(" " + id + "  " + name + " " + age + " " + sex);
    /////////////////////下面有验证截图1 /////////////////////////
                }
    
                // 用Statement向表中插入数据
                String sql2 = "insert into student values(9,"李丽","1990-12-25","女")";          
                stmt.executeUpdate(sql2);// 更新数据
    /////////////////////下面有验证截图2 /////////////////////////
    
    
            ///// 上面用Statement操作数据库十分麻烦,在一些特定场合可以使用预处理方法来操作数据库
                String sql3 = "insert into student values(?,?,?,?)";/// 插入数据
                pstm = con.prepareStatement(sql3);
    
                pstm.setInt(1, 10); /// 前面的数字1代码表中的第1字段,后面的9是要插入表中第1个字段的内容
                pstm.setString(2, "流星雨");
                pstm.setString(3, "1998-02-03");
                pstm.setString(4, "男");
    
                pstm.executeUpdate();
    /////////////////////下面有验证截图 /////////////////////////
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(con!=null){
                    con.close();
                }
                if(stmt!=null){
                    stmt.close();
                }
                if(result!=null){
                    result.close();
                }
                if(pstm!=null){
                    pstm.close();
                }
            }
        }
    }
    

    截图1:
    这里写图片描述

    截图2:
    截图2

    截图3:
    截图3


    上面对数据库的操作可以举一反三,重点说下:预处理的好处:
    jdbc连接预处理可以预防SQL注入,提高安全性。因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时, 即使参数里有敏感字符如 or’1=1’也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令, 如此,就起到了SQL注入的作用了!

  • 相关阅读:
    sychronized面试问题浅析
    打造一款属于自己的web服务器——开篇
    JVM学习总结五——性能监控及故障处理工具
    【转】Git常用命令备忘
    HTTP上传文件探究
    JVM学习总结四——内存分配策略
    JVM学习总结三——垃圾回收器
    JVM学习总结二——垃圾回收算法
    Vue生命周期中mounted和created的区别
    spring org.springframework.web.bind.annotation 常用注解
  • 原文地址:https://www.cnblogs.com/wangqilong/p/9417555.html
Copyright © 2020-2023  润新知