JDBC基础

JDBC简介

JDBC(Java Database Connectivity) Java数据库连接,他是用于一套执行SQL语句的Java API。应用程序可以通过这套API连接关系型数据库并使用sql语句操作数据库。

在这里插入图片描述
JDBC API位于java.sql包下,该包定义了一系列数据库的接口和包。

Driver接口

Driver接口是JDBC驱动程序必须实现的接口,该接口提供给数据库厂商使用。该接口主要适用于调用数据库驱动程序,所以驱动程序必须加载到项目的classpath中。

DriverManager类

DriverManager类用于注册JDBC驱动并配置连接信息,如数据库用户,密码等配置。
在这里插入图片描述

Connection接口

Connection接口代表Java程序与数据连接,只有获取连接对象后才能访问数据库,并操作数据库表。
在这里插入图片描述

Statement接口

Statement接口用于执行sql语句,并返回一个结果对象。
在这里插入图片描述

PreparedStatement接口

PreparedStatement接口执行动态sql语句和文件类型上传。使用?作为占位符代替参数,通过setXX()方法为sql语句赋值。
在这里插入图片描述

ResultSet接口

ResultSet接口用于保存JDBC执行的sql语句的结果集,该结果集封装在一个逻辑表格中。ResultSet接口中提供了一个游标(或指针)next()在遍历逻辑表格。在初始化之前游标在第一行之前,调用next()后到第一行。当下一行没有数据返回false。使用while循环更适合ResultSet

在这里插入图片描述

实现JDBC程序

在这里插入图片描述

加载并注册驱动

DriverManager.registerDriver(Driver driver);
//或
Class.forName("DriverName");

com.mysql.cj.jdbc.Driver

通过驱动创建数据链接

 Connection connection=DriverManager.getConnection(url,username,password);

jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true

test是数据库名
localhost是主机地址,如果是远程的改为ip地址
3306是mysql默认端口号

通过数据库连接操作对象

//创建Staetment
 Statement statement=connection.createStatement();
//创建PrepareStatement 
 Statement statement=connection.createStatement();

通过操作对象返回结果集

 ResultSet resultSet=statement.executeQuery(sql);

以上对象都是在java.sql包下的。
核心步骤:

Class.forName("com.mysql.cj.jdbc.Driver");
String url="";
String username="";
String password="";
Connection connection=DriverManager.getConnection(url,username,password);
Statement statement=connection.createStatement();
String sql="";
ResultSet resultSet=statement.executeQuery(sql);
while (resultSet.next()){
	//...
}

完整案例

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import cms.example.domain.*;
public class App {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Statement statement=null;
        Connection connection=null;
        ResultSet resultSet=null;
        ArrayList<User> list=new ArrayList<User>();

        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/smbms?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true";
        String username="root";
        String password="root";

        connection=DriverManager.getConnection(url,username,password);

        statement=connection.createStatement();

        String sql="select userCode,userPassword from smbms_user";
        resultSet=statement.executeQuery(sql);

        while (resultSet.next()){
            String user=resultSet.getString("userCode");
            String pass=resultSet.getString("userPassword");
            //System.out.println(user+pass);
            User user1=new User();
            user1.setUsername(user);
            user1.setPassword(pass);
            list.add(user1);
            //System.out.println(user1);
        }
        //System.out.println(list);

    }
}


User.java:

public class User{
	private String username;
	private String password;
	
	//setter && getter
	// toString
}

ResultSet接口的next()对应数据库的数据项(即一行数据),接口提供的getXXX()方法是获取数据项的某个字段,getXXX()的数量和类型与sql语句对应。增删改不需要。

通过getXXX()方法获取的是一个个零散的字段(字符串)引用,需要将这些字段封装为一个Java Bean对象如User。将sql中查询的两个字段userCode,userPassword通过ResultSet的getString()获取并通过Usersetter方法赋值。这样查询的字段都封装为一个User对象,就可以通过该对象来访问数据了。

动态sql
Statement对象只能执行静态sql语句(完整的sql语句),而实际会遇到动态sql即需要将数据填充到sql上。PreparedStatement提供了对动态sql的支持。

在sql语句中通过?作占位符,通过PreparedStatement接口提供的setXXX()方法给?赋值。甚至可以通过输入输出流来上传多媒体文件。

//静态对象直接调用
...
PreparedStatement preparedStatement=null;
...
String sql="INSERT INTO user(username,password) VALUES(?,?)";
ResultSet resultSet=preparedStatement.executeQuery(sql);
preparedStatement.setString(1,"admin");
preparedStatement.setStrong(2,"000000");
//前面是索引,后面是数据

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xvwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值