JDBC简介与常用方法-待补充

什么是JDBC?

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范

JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。

Java提供访问数据库的规范(一套类和接口)称为JDBC,而生产厂商提供规范的实现类称为驱动。

这里写图片描述

JDBC是接口,驱动是接口的实现

JDBC的使用步骤

导包等过程不赘述,以下为使用步骤

import java.sql.*;


/*
1. 注册驱动: 告知JVM 即将使用哪种数据库
2. 建立连接   和MySQL之间建立TCP连接,保证可靠传输
3. 获得语句执行平台:通过连接对象 获得sql 语句的执行者对象
4. 执行sql语句: 通过执行者对象 来执行sql 语句  获取执行后的结果
5. 处理结果:如果有结果才进行处理,例如执行查询语句,对结果集合进行处理
6. 释放资源(例如TCP连接)  调用一堆close();
*/
public class JDBCDemo {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        //1.注册驱动  利用反射机制加载类即可  Driver类中的static代码块 会自动注册新的驱动注释掉的方法会向JVM注册两次,浪费资源
//        DriverManager.registerDriver(new Driver());
        Class.forName("com.mysql.jdbc.Driver");
//        2.与数据库建立连接
        String url = "jdbc:mysql://localhost:3306/mybase";
        String name = "root";
        String password = "123";
        Connection con = DriverManager.getConnection(url,name,password);
//        3.通过连接得到执行sql语句的对象
        Statement stat = con.createStatement();
//        4.通过stat 对象执行 sql语句
        String sql = "INSERT INTO sort(sname,sprice,sdesc) VALUES('飞机杯',200,'玩具');";
        int row = stat.executeUpdate(sql);
        System.out.println(row);
//        5.处理结果

//        6.释放资源,一系列的close()
        stat.close();
        con.close();
    }
}

1.执行SQL语句的两种不同类 Statement 和 PreparedStatement

第1种 Statement 类

//        3.通过连接得到执行sql语句的对象,sql 为所要执行的SQL语句的字符串形式
        String sql = "select 8 from sort;";
        Statement stat = con.createStatement();
        stat.executeUpdate(sql);//sql为跟新操作
        stat.excuteQuery(sql);//sql为查询操作,会返回 ResultSet 接口的实现类的对象,可以进行遍历等操作

这种方式每次都会向数据库发送SQL语句,数据库进行编译。如果经常使用,会造成多次编译,浪费资源。

第2种 PreparedStatement 类
PreparedStatement 是Statement 的子类,它是预编译的SQL语句的抽象表示。使用PreparedStatement 相较于Statement 主要有两个优点

  1. 避免了不必要的多次编译,减少了数据库的负担
  2. 可以避免SQL注入问题

为了解决注入问题,PreparedStatement在SQL语句中通过使用占位符?来代替常量字段值,setXXX( parameterIndex, )方法来填充字段值,取代掉占位符,形成完整的可执行的SQL语句。parameterIndex为?的下标

在设定的参数的以下示例中, con表示一个活动连接:

  PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                     SET SALARY = ? WHERE ID = ?");
   pstmt.setBigDecimal(1, 153833.00)
   pstmt.setInt(2, 110592) 

此外,对于数据库的配置通常采用XXXX.properties文件来进行配置,这样修改更加方便,而不是直接将配置型写在源代码中。

package jdbcutils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
/*
    driverClass 数据库驱动类名
    url 数据库连接地址
    name 登录名
    password 密码  
    以上配置信息写在 database.properties文件中
*/

public class JDBCUtiles {
    private static Connection con ;
    private static String driverClass, name, password,url;

    static {
        try {
            loadConfig();
            Class.forName(driverClass);
            con = DriverManager.getConnection(url,name,password);

        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static void loadConfig() throws IOException {
        InputStream in =
                JDBCUtiles.class.getClassLoader().getResourceAsStream("database.properties");
        Properties pro = new Properties();
        pro.load(in);
        driverClass = pro.getProperty("driverClass");
        name = pro.getProperty("name");
        password = pro.getProperty("password");
        url = pro.getProperty("url");
    }

    public static Connection getConnection() {
        return con;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_40901329/article/details/79846023
今日推荐