【数据库】JDBC编程

前言

小亭子正在努力的学习编程,接下来将开启javaEE的学习~~

分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~

同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~

目录

前言

什么是JDBC?

JDBC工作原理

 JDBC优势:

JDBC创建的过程:

1、准备数据库驱动包,并添加到项目的依赖中:

2、编写代码

详细说明:

1.创建并初始化一个数据源

2.和数据库服务器创建连接

3.构造SQL语句

4.执行SQL语句

5.释放必要的资源

查询的写法

各个类总结 

​编辑

java代码实现一个学生信息的插入和查询

插入数据

查询数据


数据库基础知识请参考 Mysql数据库基础知识总复习

什么是JDBC?

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

JDBC工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。
JDBC访问数据库层次结构

 JDBC优势:

  1. Java语言访问数据库操作完全面向抽象接口编程
  2. 开发数据库应用不用限定在特定数据库厂商的API
  3. 程序的可移植性大大增强

JDBC创建的过程:

1、准备数据库驱动包,并添加到项目的依赖中:

2、编写代码

  • JDBC 需要通过以下步骤来完成:
  • 1.创建并初始化一个数据源
  • 2.和数据库服务器创建连接
  • 3.构造SQL语句
  • 4.执行SQL语句
  • 5.释放必要的资源

详细说明:

(插入,删除的写法差不多,先以插入的为例讲解,删除的写法在构造sql语句哪里会说明)

1.创建并初始化一个数据源

说明:

(1)第一句使用了向上转型,下面的几句使用了向下转型,还可以写成这样:

(2)setURL: url 唯一资源定位符,描述网络上某个资源的位置

        MySQL数据连接的URL参数格式如下:
        jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值

 

(3)setUser:数据库用户名(数据库默认的是 root )

(4)setPassword:数据库密码

以上代码还可以用加载数据库驱动,用反射来写:

// 加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法区,并执行该类的静态方法块、静态属性。
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/test?
user=root&password=root&useUnicode=true&characterEncoding=UTF-8");

但是不建议这样写,原因有2.

1.个人认为反射不安全,而且读起来不方便

2.DataSource 内置了数据库连接池,可以复用连接,提高连接服务器的效率。(后面再详细说)

2.和数据库服务器创建连接

说明:

1.getConnection会有一个异常,抛出即可

 2.Connection 选JDBC的

3.构造SQL语句

(这里举的例子是从控制台输入数据,构造的语句看红框内的就行。)

说明:

1.上述写法用了   ? (占位符)和 prepareStatement ,可以防止SQL注入

2. 使用prepareStatement 预编译一下 SQL

3.Setxxx  中的set 后面是类型,可以根据实际需求选别的

 

注意:删除操作,把  insert 改为  delete就行

补充:

1.sql注入 

2.预编译

 

4.执行SQL语句

说明:

statement.executeUpdate():把sql语句(编译过来的)发送给数据库服务器,由服务器做出响应。

executeUpdate()  :包括 insert,delete,update 操作,返回值是 int 类型,表示影响的行数。

5.释放必要的资源

说明:

1.释放资源:先创建后释放 

【类似于开门,回家时先开的单元口的大门,再开家里的小门;出门时先开家里的小门,再开单元楼的大门。】

2.释放资源这里还有一种写法,判断资源是否为空,用try catch来实现关闭资源

//关闭结果集
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}

}
//关闭命令
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭连接命令
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

查询的写法

说明:

1.前面初始化数据和连接数据库都一样,构造sql的时候改成  select   

2.用 executeQuery 执行sql的结果 返回的对象是  ResultSet (结果集) 相当于一个表,

3.遍历结果集 使用了类似迭代器这样的语法风格。

 4.getXXX类似于上面的setXXX

 上述为 JDBC的基础用法


各个类总结 

java代码实现一个学生信息的插入和查询

注:运行这个代码需要按照上述步骤安装数据库驱动包,用Mysql创建相应的数据库和数据表。

插入数据

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        //1.创建并初始化一个数据源
        DataSource dataSoure = new MysqlDataSource();
        ((MysqlDataSource)dataSoure).setURL("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSoure).setUser("root");
        ((MysqlDataSource)dataSoure).setPassword("2222");
        //2.和数据库建立连接
        Connection connection = (Connection) dataSoure.getConnection();
        //3.构造sql语句
        //从控制台读取用户输入的内容
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学号:");
        int id = sc.nextInt();
        System.out.println("请输入姓名:");
        String name = sc.next();
        //构造sql语句的写法
        String sql = "insert into student value(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println(statement);

        //4.执行sql语句
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);
        //5.释放必要资源
        statement.close();
        connection.close();
    }
}

查询数据

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCSelect {
    //查询,前4步与JDBCinsert一样
    public static void main(String[] args) throws SQLException {
        DataSource dataSoure = new MysqlDataSource();
        ((MysqlDataSource)dataSoure).setURL("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSoure).setUser("root");
        ((MysqlDataSource)dataSoure).setPassword("2222");

        Connection connection = (Connection) dataSoure.getConnection();

        String sql = "select* from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        ResultSet resultSet = statement.executeQuery();
        //5.遍历结果集合
        while (resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = "+ id +",name = "+ name);
        }
        //6.释放资源
        resultSet.close();
        statement.close();
        connection.close();

    }
}

以上就是本文分享的所有内容,后序会在此文加入JDBC封装工具类的写法,关注小亭子,一起学java~~

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值