1-JDBC基础

JDBC 是什么?

  • JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API

JDBC库中所包含的API通常与数据库使用于:
1.连接到数据库
2.创建SQL或MySQL语句
3.在数据库中执行SQL或MySQL查询
4.查看和修改数据库中的数据记录

常见的JDBC组件
JDBC API提供以下接口和类:

  • DriverManager:此类管理数据库驱动程序列表。 使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序进行匹配。在JDBC下识别某个子协议的第一个驱动程序将用于建立数据库连接。
  • Driver:此接口处理与数据库服务器的通信。我们很少会直接与Driver对象进行交互。 但会使用DriverManager对象来管理这种类型的对象。 它还提取与使用Driver对象相关的信息。
  • Connection:此接口具有用于联系数据库的所有方法。 连接(Connection)对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。
  • Statement:使用从此接口创建的对象将SQL语句提交到数据库。 除了执行存储过程之外,一些派生接口还接受参数。
  • ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。 它作为一个迭代器并可移动ResultSet对象查询的数据。
  • SQLException:此类处理数据库应用程序中发生的任何错误。

创建JDBC应用程序
1.导包
如果使用IDE,可将上面代码可放在IDE(如:Eclipse/Netbeans)中加入mysql-connector-java-5.1.37-bin.jar 库并执行,jar包放在\libs 目录中。
在程序中包含数据库编程所需的JDBC类。大多数情况下,使用 import java.sql.* 就足够了,

//STEP 1. Import required packages
import java.sql.*;

2.注册JDBC驱动程序
需要初始化驱动程序,这样就可以打开与数据库的通信。

//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");

3.创建数据库连接对象
使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接

//STEP 3: Open a connection
//Database credentials
//DB_URL: 数据库连接地址,格式: jdbc:mysql://数据库IP地址:3306/数据库名
//USER: 登录数据库用户名
//PASS: 用户名密码
con = DriverManager.getConnection(DB_URL,USER,PASS);

4.获取执行对象,执行sql语句
需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询。

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = con.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

注意: 增、删、改 用executeUpdate(),返回值为int型,表示被影响的行数; 查询用executeQuery()方法,返回结果集
5.从结果集中提取数据
可以使用适当的ResultSet.getXXX()方法来检索的数据

//STEP 5: Extract data from result set
while(rs.next()){
    //Retrieve by column name

    //需要使用相应的ResultSet.getXXX()方法从结果集中检索数据。
    int id  = rs.getInt("id");
    int age = rs.getInt("age");
    String first = rs.getString("first");
    String last = rs.getString("last");

    //Display values
    System.out.print("ID: " + id);
    System.out.print(", Age: " + age);
    System.out.print(", First: " + first);
    System.out.println(", Last: " + last);
}
/*
ResultSet接口中 next()方法详细信息

boolean next()
      throws SQLException
将光标从当前位置向前移动一行。 一个ResultSet指针最初位于第一行之前; (不用担心取不到第一行。) 方法next的第一个调用使第一行成为当前行; 第二个调用使第二行成为当前行,依此类推。 
当对next方法的调用返回false ,光标位于最后一行之后。 任何调用需要当前行的ResultSet方法将导致抛出SQLException 。 如果结果集类型为TYPE_FORWARD_ONLY ,它是指定的JDBC驱动程序实现是否会返回供应商false或抛出SQLException上的后续调用next 。 

如果当前行的输入流已打开,则对方法next的调用将隐式关闭它。 读取新行时,将清除ResultSet对象的警告链。 

结果 
true如果新的当前行有效; false如果没有更多的行 
*/

6.释放资源
在使用JDBC与数据交互操作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费,对依赖于JVM的垃圾收集

//STEP 6: Clean-up environment
rs.close();
stmt.close();
con.close();

7.第一个JDBC程序

package com.itheima01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCDemo01 {
    public static void main(String[] args) throws Exception {
        // 导入jar包
        //2.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取链接
        Connection con = DriverManager.getConnection("jdbc:mysql://IP地址/库名", 登录用户", "密码");
        //4.获取执行者对象
        Statement stat = con.createStatement();
        //5.执行sql语句,并接收返回结果集
         String  sql = "SELECT * FROM user";
        ResultSet rs = stat.executeQuery(sql);
        //6.处理结果
        while (rs.next()){
            System.out.println(rs.getInt("id")+"\t"+rs.getString("name"));
        }
        //7.释放资源
        con.close();
        stat.close();
        rs.close();
    }
}

SQL注入攻击

  • 就是利用sql语句的漏洞来对系统进行
  • SQL注入攻击的原理
    1.按照正常道理来说,我们在输入密码处输入的所有内容,都应该认为是密码的组成
    2.但是现在Statement对象在执行sql语句时,将密码的一部内容当作查询条件来执行了

SQL注入攻击的解决

  • PerparedStatement 预编译执行者对象
    1.在执行sql语句之前,将sql语句进行提前编译,明确SQL语句之后,就不会改变了,剩余的内容都会认为是参数!
    2.SQL语句中的参数使用?作为占位符
  • 为?占位符赋值的方法: setXXX(参数1,参数2)
    1.XXX代表: 数据类型
    2.参数1: 代表?的位置编号(标号从1开始)
    3.参数2: ?的实际参数

JDBC如果管理事务

  • 管理事务的功能类: Connection
    1.开启事务: setAutoCommit(boolean autoCommit);参数为false,则开启事务
    2.提交事务: commit();
    3.回滚事务: rollback();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 1. JDBC 1.1 什么是JDBC 今天我来介绍下JDBC. JDBC英文全程Java Database Co...
    sixleaves阅读 1,250评论 0 3
  • title: "Jdbc"date: 2019-08-14T11:03:49+08:00draft: true 本...
    Nuoccc阅读 341评论 0 1
  • 掌握数据库开发是java工程师的基本要求,而JDBC是数据库开发的基础,通过JDBC可以实现Java程序对后端数据...
    lingyv阅读 994评论 0 9
  • JDBC API 是一系列的接口。它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果。 Drive...
    怪蜀黍Zzzzlw阅读 399评论 0 2
  • 1.现在有一个学生表,一个课程成绩表,请问,怎么找出学生课程的最高分数,谈一谈思路 参考答案: 关联查询,然后对查...
    是小猪童鞋啦阅读 121评论 0 0