狗凡

导航

MySQL数据库 JDBC 有注入攻击bug

 
 
 
 
 
JDBC对数据库表进行增删改查操作
  • 导入jar包
  • 注册驱动 告诉jvm 我们使用哪种驱动程序
Class.forName("com.mysql.jdbc.Driver");
  • 获得连接对象 Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称","用户名","密码")
  • 获得执行者对象 Statement用于执行SQL语句 把SQL语句发送到数据库执行 Statement state = conn.createStatement() 
  • 执行SQL语句 返回结果
int row=state.executeUpdate(sql语句);----→增删改
ResultSet rs=state.executeQuery(sql语句);----→查
  • 处理结果 (打印行数、遍历结果集)
  • 释放资源
 
 
 
//封装一个工具类
package cn.kgc.utils;
import java.sql.*;
public class UtilsJDBC {
    /**
         * 创建工具类 工具中的方法都是静态方法 方便直接通过类名调用
     * 定义四个静态成员变量 用于连接数据库的相关信息
     * 定义静态代码块 注册驱动
     * 定义一个静态方法获得Connection对象 并返回conn对象 遇到异常时需要把编译异常改为运行异常
     * 定义一个静态方法 释放资源
     */
    //1.定义四个静态成员变量 用于连接数据库的相关信息
  private static String driver="com.mysql.jdbc.Driver";
    private static String url="jdbc:mysql://localhost:3306/day03";
    private static String user="root";
    private static String password="123456";
    //2.静态代码块 优先执行 只执行一次
  //注册驱动
    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection(){
        Connection conn=null;
        try {
            conn=DriverManager.getConnection(url,user,password);
        } catch (SQLException e) {
            //如果数据连接失败 那么程序没有必要继续了
            //需要把编译异常改为运行异常
            throw new RuntimeException("获取数据库失败");
        }
        return conn;
    }
    //3.定义一个静态方法 释放资源
    public static void close(ResultSet rs, Statement state,Connection conn){
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (state!=null){
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
 
 
 
//测试
package cn.kgc.utils;
import java.sql.Connection;
public class Test {
    public static void main(String[] args) {
        Connection conn = UtilsJDBC.getConnection();
        System.out.println(conn);
    }
}
 
 
//操作
package cn.kgc.utils;
import org.junit.Test;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JDBC {
    //添加数据
    @Test
    public void testInsert(){
        //1 2 注册驱动 获得连接
        Connection conn = UtilsJDBC.getConnection();
        //3 获得执行者对象
        Statement state=null;
        try {
            state = conn.createStatement();
            //4 执行SQL语句
            int row1 = state.executeUpdate("INSERT INTO products \n" +
                    "VALUES('p0012','华为',2999,'2',002),('p0013','华为p10',4000,'3',003)");
            int row2 = state.executeUpdate("DELETE FROM products WHERE pid='p003'");
            int row3 = state.executeUpdate("ALTER TABLE products CHANGE flag top VARCHAR(2)");
            //处理结果 (打印行数)
       System.out.println(row1+"行数据添加成功");
            System.out.println(row2+"行数据删除成功");
            System.out.println(row3+"行数据更改成功");
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            UtilsJDBC.close(null,state,conn);
        }
    }
}
 
 
 
//原生
package cn.kgc.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
 
public class Demo01JDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //注册驱动 告诉jvm 我们使用哪种驱动程序
        Class.forName("com.mysql.jdbc.Driver");
        //获得连接对象 Connection
        Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/day03","root","123456");
        System.out.println(connection);
        //获得执行者对象 Statement用于执行SQL语句 把SQL语句发送到数据库执行
        Statement statement = connection.createStatement();
        System.out.println(statement);
        //执行SQL语句 返回结果 增删改:int affected(受影响的)影响数据库的行数 查询:ResultSet结果集
        int row = statement.executeUpdate("INSERT INTO category(cname)VALUES ('化妆品'),('宠物用品'),('饮料');");
        System.out.println(row);
        //释放资源
        statement.close();
        connection.close();
    }
}
 
 
 

posted on 2019-06-13 17:43  狗凡  阅读(185)  评论(0编辑  收藏  举报