DriverManager  驱动管理类

  1.  注册驱动

   •  Class.forName("com.mysql.jdbc.Driver");

   •  Driver会在加载时调用注册。源码如下:

    

   •  提示:MySQL5之后的驱动包可以省略注册驱动的步骤,会自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类

  2.  获取数据库连接

   •  static Connecion getConnection(String url, String user, String password)

   •  url:连接路径

    ♦  语法:jdbc:mysql://域名/IP地址:端口号/数据库名字?参数键值对1&参数键值对2......

    ♦  示例:jdbc:mysql://127.0.0.1:3306/db1?useSSL=false

    ♦  细节:如果连接本机,端口是默认端口,可以简写jdbc:mysql:///数据库名字?参数键值对1&参数键值对2......

        配置useSSL=false参数,禁用安全连接方式,解决警告提示

   •  user:用户名

   •  password:密码

Connection

  1.  获取执行SQL对象

   •  普通执行SQL对象:Statement createStatement()

   •  预编译SQL的执行SQL对象:PreparedStatement prepareStatement(sql)

   •  执行存储过程的对象:CallableStatement prepareCall(sql)

  2.  管理事务

   •  MySQL的事务管理:

    ♦  开启事务:begin/start transaction;

    ♦  提交事务:commit;

    ♦  回滚事务:rollback;

   •  JDBC事务管理:Connection中定义了三个对应的方法

    ♦  开启事务:setAutoCommit(boolean autoCommit)  true为自动提交,false为手动提交,即开启事务

    ♦  提交事务:commit()

    ♦  回滚事务:rollback()

Statement:执行SQL语句

  1.  int executeUpdate(sql):执行DML DDL语句

   •  DML语句时返回值为影响的行数

   •  DDL语句执行后,执行成功也可能返回0

  2.  ResultSet executeQuery(sql):执行DQL语句

   •  返回值ResultSet为结果集对象

ResultSet:封闭了DQL查询语句结果

  1.  获取查询结果

   •  boolean Next()

    ♦  将光标从当前位置向下移动一行

    ♦  判断当前行是否为有效行

    ♦  返回值为true:有效行,当前行有数据

    ♦  返回值为false:无效行,当前行没有数据

   •  数据类型 Get数据类型(参数)

    ♦  例:int GetInt(参数)  String GetString(参数)

    ♦  int:列的编号,从1开始

    ♦  String:列的名字

PreparedStatement:预编译SQL语句并执行,预防SQL注入问题

  1.  SQL注入:通过操作输入来修改事先定义好的SQL语句,来达到执行代码对服务器进行攻击的方法

  2.  获取PreparedStatement对象

   •  String sql = "select * from user where username = ? and password = ?";

   •  PreparedStatement pstmt = conn.prepareStatement(sql);

  3.  设置参数值

   •  pstmt.setXxx(参数1, 参数2);  给?赋值

   •  Xxx:数据类型,例:pstmt.setInt(参数1, 参数2);

   •  参数1:?的位置编号,从1开始

   •  参数2:?的值

  3.  执行SQL

   •  executeUpdate();/executeQuery();  不需要再传递sql

  4.  好处

   •  预编译SQL,性能更高

   •  防止SQL注入,会将敏感字符进行转义

  5.  预编译默认是关着的

   •  开启方式:连接数据库时在后面加参数useServerPrepStmts=true

  6.  PreparedStatement执行过程

   •  获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译

   •  执行时不用再进行这些步骤

   •  如果sql模板一样,则只需要一次检查编译,可以多次执行

配置MySQL执行日志:在my.ini文件城加入以下语句

  log-output=FIFL

  general-log=1

  general_log_file="D:\mysql.log"

  slow-query-log=1

  slow_query_log_file="D:\mysql_slow.log"

  long-query-time=2