JDBC 总结

一、JDBC概述

  • JDBC(Java DataBase Connectivity)java数据库连接
  • 是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问, 它由一组用Java语言编写的类和接口组成。
  • 有了JDBC,java开发人员只需要编写一次程序,就可以访问不同的数据库。
  • JavaAPI中提供了操作数据库的标准接口,最终由不同的数据库开发商实现这些标准接口来对数 据库操作。
  • Java定义者制定了JDBC规范 数据库开发商实现接口 程序员学习使用标准规范。

JDBC API 

供程序员调用的接口与类,集成在java.sql包中
JDBC 总结_第1张图片

二 、JDBC搭建

注册JDBC驱动程序

这需要初始化驱动程序,这样就可以打开与数据库的通信信道
JDBC 总结_第2张图片

建立与数据库的连接 

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

获得 Statment 执行 SQL 语句

JDBC 总结_第3张图片

获得 PrepareStatement 执行 SQL 语句

  • 在sql语句中参数位置使用占位符,使用setXX方法向sql中设置参数
  • PrepareStatement ps = connection.prepareStatement(sql);
  • PrepareStatement中的方法:
    JDBC 总结_第4张图片

关闭与数据库的链接通道 

每次操作完成后关闭所有与数据库交互的通道
e.g.:

JDBC 总结_第5张图片

代码示例如下:

import com.mysql.cj.jdbc.Driver;

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

public class Demo1 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        //2.注册驱动
         //Class.forName("com.mysql.cj.jdbc.Driver");//反射方式加载驱动类
           DriverManager.registerDriver(new Driver());

        //3.建立与数据库的连接
          String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
          String user = "root";
          String password = "root";//写自己数据库的密码
          Connection connection =  DriverManager.getConnection(url,user,password); //com.mysql.cj.jdbc.ConnectionImpl@25359ed8
        //4.发送sql
          Statement statement =  connection.createStatement(); //com.mysql.cj.jdbc.StatementImpl@442675e1

          statement.executeUpdate("insert into major(name)value('数学')");

          //5.关闭与数据库的连接
           statement.close();
           connection.close();
    }
}

三、 PreparedStatement 和 Statement

Statement(e.g.):

PreparedStatement (e.g.):
JDBC 总结_第6张图片

PreparedStatement 与 Statement 相比优势

  1. 代码的可读性和可维护性.
    虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无 论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次。
  2. 最重要的一点是极大地提高了安全性.,防止sql注入。
    注:
    1. 而如果你使用预编译语句,你传入的任何内容就不会和原来的语句发生任何匹配的关系。
    2. 预编译模式中每个占位符处,只能插入一个值,而会过滤其他语句。

四、结果集处理 

  • PreparedStatement 和 Statement 中的 executeQuery(  ) 方法中会返回一 个 ResultSet 对象,查询结果就封装在此对象中。
  • 使用ResultSet中的next()方法获得下一行数据。
  • 使用getXXX(String name)方法获得。

练习代码如下:

import com.mysql.cj.jdbc.Driver;

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

public class Demo2 {

    public static void main(String[] args) throws SQLException {

        //Demo2.insert("小明","男","2003-3-4","1533555",1.65);
        //Demo2.update(4,"小红","女","2003-3-4","15333333",1.65);
         Demo2.delete("0 or 1=1");

    }

    public static void insert(String name,String gender,String birthday,String phone,double height) throws SQLException {
        //注册驱动
        DriverManager.registerDriver(new Driver());
        String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";//写自己数据库的密码
        //建立与数据库的连接
        Connection connection = DriverManager.getConnection(url,user,password);
        //发送sql
        Statement statement =  connection.createStatement();
        statement.executeUpdate("insert into student(name,gender,birthday,phone,height)value('"+name+"','"+gender+"','"+birthday+"','"+phone+"',"+height+")");
        //关闭与数据库的连接
        statement.close();
        connection.close();

    }

    public static void update(int number,String name,String gender,String birthday,String phone,double height) throws SQLException {

        //注册驱动
        DriverManager.registerDriver(new Driver());
        String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";//写自己数据库的密码
        //建立与数据库的连接
        Connection connection = DriverManager.getConnection(url,user,password);
        //发送sql
        Statement statement =  connection.createStatement();
        statement.executeUpdate("update student set name='"+name+"',gender='"+gender+"',birthday='"+birthday+"',phone='"+phone+"',height="+height+" where number="+number);
        //关闭与数据库的连接
        statement.close();
        connection.close();

    }

    public static void delete(String number) throws SQLException {
        //注册驱动
        DriverManager.registerDriver(new Driver());
        String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";//写自己数据库的密码
        //建立与数据库的连接
        Connection connection = DriverManager.getConnection(url,user,password);
        //发送sql
        Statement statement =  connection.createStatement();
        statement.executeUpdate("delete from student where number= "+number); //直接将字符串拼接到sql中,不能防止sql注入攻击" 0 or 1=1"
        //关闭与数据库的连接
        statement.close();
        connection.close();

    }
}

你可能感兴趣的:(oracle,数据库)