zoukankan      html  css  js  c++  java
  • 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注入的作用了!

  • 相关阅读:
    09不可变类型
    08浅拷贝和深拷贝
    07参数的传递
    06判等对象是否相等
    05引用类型以及特殊引用类型string
    报错:Missing type map configuration or unsupported mapping
    黄聪:VS2010开发T4模版引擎之基础入门
    黄聪:《网站高转换率法则》#2:你的网站是垃圾站吗?
    黄聪:《网站高转换率法则》#1:为什么要研究网站转换率?
    黄聪:百度知道中对HTML字符实体、字符编号,&开头字符的使用
  • 原文地址:https://www.cnblogs.com/wangqilong/p/8279790.html
Copyright © 2011-2022 走看看