小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

JDBC基础

Java,java,数据库 额外说明

收录于:17天前

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");
//前面是索引,后面是数据

. . .

相关推荐

额外说明

SpringBoot+Shiro+Jwt+Vue+elementUI 实现前后端分离单系统Demo

记录一下使用SpringBoot集成Shiro框架和Jwt框架实现前后端分离Web项目的过程,后端使用SpringBoot整合Shiro+Jwt(auth0),前端使用vue+elementUI框架,前后端的交互使用的是jwt的token,shiro的会

额外说明

了解 TCP 和 UDP

TCP协议1 1.1 关于TCP理解的重点 1.1.1 TCP协议工作在传输层,对上是服务于socket接口,对下是调用IP层;4层:应用层(API) 传输层(TCP/UDP) 数据链路层(IP) 物理层 1.1.2 TCP协议层面向链接,通信前必须先3

额外说明

莱迪思系列FPGA

博主的帖子很不错:时间的诗 是有关fpga的系列文章,是有阅读价值的。 https://blog.csdn.net/times_poem/article/category/6649772

额外说明

V3-12 路由导航守卫, session 左侧页面显示+ user表展示[暂未完成,等待修改]

01实现用户登录 1.1. 用户登录凭证存储 说明: 由于用户登录后,后端传回来的token给前端,前端需要保存,不然一次请求一次响应结束,数据就被销毁了 1.2 Session与Cookie ----->session介绍 会话控制 ---->cook

额外说明

C++ 虚拟析构函数 (virtual destructor)

C++ 虚拟析构函数 概述 问题 虚析构函数 总结 概述 虚析构函数 (virtual destructor) 可以帮我们实现基类指针删除派生类对象. 问题 当我们从派生类的对象从内存中撤销时会先调用派生的析构函数, 然后再基类的析构函数, 由此就会产生

额外说明

使用GDIView排查GDI对象泄漏导致的程序UI界面绘制异常问题

目录 1、问题说明 2、初步分析 3、查看任务管理器,并使用GDIView工具分析

额外说明

OpenCV-Python实战(番外篇)——OpenCV中绘制模拟时钟显示当前时间

OpenCV-Python实战(番外篇)——OpenCV中绘制模拟时钟显示当前时间 前言 模拟时钟外观 计算时针刻度 hours_orig 和 hours_dest 数组 使用模拟时钟显示当前时间 clock_appearance.py 完整代码 相关链

额外说明

批量归一化(标准化)处理

        其实对于样本数据的归一化处理,我们在前面的 Kaggle房价预测的练习(K折交叉验证)  已经做过很好的具体实验,也得到了不错的效果,这里主要侧重单独说下怎么做归一化,以及为什么要做这样一个处理,有什么好处。 当我们拿到数据样本的时候,里

额外说明

javascript正则表达式与.NET正则表达

另外要说明一点,在.NET等使用Unicode的语言和javascript等使用ASCII码的语言中,/b的意义虽然可以采用同样的解释,但是匹配的结果是不一样的 源字符串:a中文 正则表达式:a/b 在.NET中是匹配失败的,而在javascript中是

额外说明

wordpress发邮件_如何修复WordPress不发送电子邮件的问题

使用 WordPress 发送电子邮件 WPBeginner 上最常见的问题之一是如何解决 WordPress 不发送电子邮件的问题。 WPBeginner 上最常见的问题之一是如何解决 WordPress 不发送电子邮件的问题。 我们的许多初级用户问我

ads via 小工具