第27次文章:简单了解JDBC

2019-09-27 17:25:25 浏览数 (1)

本周开始接触数据库了,第一次接触,倒腾了好久才把环境弄好,这周的学习内容有点少咯,下周补起来!嘿嘿,加油!


一、Mysql特点

(1)是一种开放源代码的关系型数据库管理系统(RDBMS)

(2)目前很多大公司(新浪、京东、阿里等)都在使用mysql

(3)适应于所有的平台

(4)支持多线程,充分利用CPU资源,性能出色

(5)大数据库处理

下面的代码中将会使用到的数据库界面和服务器以及驱动程序都放在这里啦!希望对你们有用哟!

链接:https://pan.baidu.com/s/1XN8WU8mMYA-PJ32RmBH0PQ

提取码:582t

二、JDBC(Java Database Connection)

1、什么是JDBC

JDBC为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。是java程序与数据库系统通信的标准API。JDBC API使得开发人员可以使用纯java的方式来连接数据库,并执行操作。

2、访问数据库流程:

驱动管理器(加载JDBC驱动程序)——>连接数据库(建立与数据库的连接)——>SQL语句(发送SQL查询)——>结果集(得到查询结果)

3、 JDBC常用接口

(1)Driver接口

  • Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以了
  • 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。
  • 驱动:就是各个数据库厂商实现的sun公司提出的JDBC接口。即对Connection等接口的实现类的jar文件
  • 装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");
  • 装载Oracle驱动:Class.forName("orcale.jdbc.driver.OracleDriver");

(2)DriverManager接口

  • DriverManager是JDBC的管理层,作用于用户和驱动程序之间
  • DriverManager跟踪可用的驱动程序,并在数据库和相应的额驱动程序之间建立连接

(3)Connection接口

  • Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。
  • DriverManager的getConnection()方法,建立在JDBC URL中定义的数据库Connection连接上
  • 连接MYSQL数据库:Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://host:post/testjdbc", "user", "password");

测试一下连接数据库

代码语言:javascript复制
package com.peng.jdbc;
import java.sql.DriverManager;import java.sql.SQLException;
import com.mysql.jdbc.Connection;/** * 测试跟数据库建立连接 */public class Demo01 {  public static void main(String[] args) {    try {      //加载驱动类      Class.forName("com.mysql.jdbc.Driver");      long start = System.currentTimeMillis();      Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc", "root", "123456");      long end = System.currentTimeMillis();      System.out.println(conn);      System.out.println("建立连接,耗时:" (end - start) "ms毫秒");    } catch (ClassNotFoundException e) {      e.printStackTrace();    } catch (SQLException e) {      e.printStackTrace();    }  }}

tips :

(1)在运行上面的这段代码时,首先需要将驱动程序的包导入到java环境中,驱动程序包已经放在了最上面的百度云链接中了。有需要的同学可以自取哈!

(2)建立连接过程中,连接对象内部其实包含了socket对象,是一个远程的连接。比较耗时!这是Connection对象管理的一个要点。所以在真正开发中,为了提高效率,都会使用连接池来管理连接对象!

(4)Statement接口

  • 用于执行静态SQL语句并返回它所产生结果的对象。
  • 三种Statement类:

1.Statement:由createStatement创建,用于发送简单的SQL语句。(不带参数的)

2.PreparedStatement:继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的sql语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入。我们一般都用PreparedStatement.

3.CallableStatement:继承自PreparedStatement。由方法prePareCall创建,用于调用存储过程。

测试Statement接口

代码语言:javascript复制
package com.peng.jdbc;
import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;
import com.mysql.jdbc.Connection;/** * 测试执行SQL语句,以及SQL注入问题 */public class Demo02 {  public static void main(String[] args) {    try {      //加载驱动类      Class.forName("com.mysql.jdbc.Driver");      long start = System.currentTimeMillis();      Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc", "root", "123456");            //测试Statement语句,向数据库中增加一条信息//      Statement stmt = conn.createStatement();//      String sql = "insert into t_user1 (username,pwd,regTime) values ('赵六',6666,now())";//      stmt.execute(sql);            //测试SQL注入      Statement stmt = conn.createStatement();      String id = "5 or 1=1";      String sql = "delete from t_user1 where id=" id;      stmt.execute(sql);          } catch (ClassNotFoundException e) {      e.printStackTrace();    } catch (SQLException e) {      e.printStackTrace();    }  }}

tips:

在上面的代码中,我们分开执行了两种命令。第一个是“测试Statement,向数据库中增加一条信息”,第二个是“测试SQL注入”。

(1)增加信息这段命令中,我们对t_user1表格中,加入了信息:'赵六',6666,now()。分别代表着表格中的属性信息,username,pwd,regTime。

(2)在使用Statement语句在实际的开发过程中是一个较为危险的语句,存在着SQL注入的危险。在我们的第二段“测试SQL注入”的语句中将会看到这种情况。在实际的应用中,数据库的各种属性都是外界传输进来的参数。如果在删除操作中,有用户恶意的传入id参数,例如上面代码中的"5 or 1=1",此时1=1将一直被执行,执行完Statement语句之后,我们的数据库将会全部被清空。外界也能够随意的修改我们的数据库了。

0 人点赞