JDBC操作数据库

article/2025/8/24 3:16:20

数据库驱动

10、JDBC

10.1、数据库驱动

驱动:声卡,显卡,数据库

10.2、JDBC

在这里插入图片描述

10.3、第一个JDBC程序

创建测试数据库

1、创建一个普通项目

CREATE DATABASE `jdbcstudy`CREATE TABLE  users
(
`id` INT (4) PRIMARY KEY,
`name` VARCHAR(40),
`password` VARCHAR(40),
`birthday` DATE
);INSERT INTO `users` (`id`,`name`,`password`,`birthday`) 
VALUES ('1','张三','123456','1999-02-02'),('2','李四','1234556','1999-08-02'),('3','王五','1288556','1998-02-15')
,('4','赵六','752156','1999-12-12')

2.导入数据库驱动

package JDBC01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class test01 {	public static void main(String[] args) throws ClassNotFoundException, SQLException {//1.加载驱动Class.forName("com.mysql.jdbc.Driver");//固定//2.连接用户信息和urlString url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";String username ="root";String password="ehero000921";//3.连接成功,数据库对象 ConnectionConnection connection=DriverManager.getConnection(url, username, password);//4.执行sql对象Statement statement  =connection.createStatement();//5.执行sql的对象去执行sqlString sql="select * from users";ResultSet rs=statement.executeQuery(sql);while (rs.next()){System.out.print("id="+rs.getObject("id")+" ");System.out.print("name="+rs.getObject("name")+" ");System.out.print("password="+rs.getObject("password")+" ");System.out.println("birthday="+rs.getObject("birthday"));}//6.释放连接rs.close();statement.close();connection.close();}
}

步骤总结:

1.加载驱动

2.连接数据库DriverManager

3.获取执行sql的对象Statement

4.获的返回的结果集

5.释放连接

DriverManager

Class.forName("com.mysql.jdbc.Driver");
//固定写法

URL

String  url ="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true"//mysql默认3306//协议://主机地址:端口号/数据库名?参数1&参数2&参数3

Statement 执行SQL的对象 PrepareStatement 执行的SQL的对象

String sql="sekect * from users";
statement.executeQuery();//查询
statement.execute();//执行任何SQL
statement.executeUpdate();//更新,插入,删除

ResultSet 查询的结果集:封装了所有的查询结果

获取定的数据类型

resultset.getint();
resultset.getobject();
resultset.getDate();
...//指针
resultset.beforFirst();//移动到第一个
resultset.afterLast();//移动到自动一个
resultset.absolute(row)//移动到指定类

10.4、statement对象

配置类

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true
username=root
password=ehero000921
##最好写在src目录文件下,注意看写在什么地方

工具类

package JDBC01;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class jdbcutils {private static String driver=null;private static String url=null;private static String username=null;private static String password=null;static{try{
//			InputStream in=jdbcutils.class.getClassLoader().getResourceAsStream("db.properties");InputStream in=jdbcutils.class.getClassLoader().getResourceAsStream("JDBC01/db.properties");//这样就好了 Properties properties=new Properties();properties.load(in);driver =properties.getProperty("driver");url =properties.getProperty("url");username =properties.getProperty("username");password =properties.getProperty("password");Class.forName(driver);//驱动只加载一次}catch(IOException e){e.printStackTrace();}catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//获取连接public static Connection getConnection() throws SQLException{return DriverManager.getConnection(url,username,password);}//释放连接资源public static void release(Connection conn,Statement st, ResultSet rs) throws SQLException{if(rs!=null){rs.close();}if(st!=null){st.close();}if(conn!=null){conn.close();}}}

代码:

package JDBC01;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class testinsert {public static void main(String[] args) throws Exception {Connection conn =null;Statement st=null;ResultSet rs=null;try {conn= jdbcutils.getConnection();st=conn.createStatement();String sql="INSERT INTO `users`  (`id`,`name`,`password`,`birthday`)"+ " VALUES ('9','大傻逼2','55201314','2000-12-11') ";int i=st.executeUpdate(sql);if(i>0){System.out.println("插入成功!");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {jdbcutils.release(conn, st, rs);}}
}
//只需要改sql

sql注入问题

sql存在漏洞,会导致被拼接

package JDBC01;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class sql {public static void main(String[] args) {sql.login(" 'or '1=1", "'or '1=1");}public static void login(String username,String password){Connection conn=null;Statement sta=null;ResultSet re=null;try {conn= jdbcutils.getConnection();sta=conn.createStatement();String sql="SELECT * FROM `users`  WHERE `name`='"+username+"' AND `password`='"+password+"'";re=sta.executeQuery(sql);while(re.next()){System.out.print(re.getString("name")+"  ");System.out.println(re.getString("password"));}} catch (SQLException e) {e.printStackTrace();}}
}

10.5、PreparedStatement

增加

package JDBC01;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;import com.mysql.fabric.xmlrpc.base.Data;public class test02 {public static void main(String[] args) {Connection con=null;PreparedStatement pst=null;try {con=jdbcutils.getConnection();String sql ="insert into users(id,name,password,birthday) values(?,?,?,?)";pst=con.prepareStatement(sql);pst.setInt(1, 7);pst.setString(2, "蠢货");pst.setString(3, "5201314888");pst.setDate(4, new java.sql.Date(new Date().getTime()) );int i=pst.executeUpdate();if(i==1)System.out.println("插进去了");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(pst!=null)try {pst.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(con!=null)try {con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

删除

package JDBC01;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class test03 {public static void main(String[] args) {Connection con=null;PreparedStatement pst=null;try {con=jdbcutils.getConnection();String sql="delete from users where id=? ";pst=con.prepareStatement(sql);pst.setInt(1, 7);int i=pst.executeUpdate();if(i==1)System.out.println("删了");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

改变

package JDBC01;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class test04 {public static void main(String[] args) {Connection con=null;PreparedStatement pst=null;try {con=jdbcutils.getConnection();String sql="update users set `name`='杂种' where `id`=?";pst=con.prepareStatement(sql);pst.setInt(1, 5);int i=pst.executeUpdate();if(i==1)System.out.println("成功");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

删除

package JDBC01;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;import com.mysql.fabric.xmlrpc.base.Data;public class test05 {public static void main(String[] args) {Connection con=null;PreparedStatement pst=null;ResultSet rs=null;try {con=jdbcutils.getConnection();String sql="select * from `users` where id=?";pst=con.prepareStatement(sql);pst.setInt(1, 2);rs=pst.executeQuery();while(rs.next()){System.out.println(rs.getInt("id"));System.out.println(rs.getString("name"));System.out.println(rs.getString("password"));System.out.println(rs.getString("birthday"));
//				System.out.println(rs.getDate(new java.sql.Date(new Date().getTime())));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

10.6、使用IDEA连接数据库

10.7、数据库连接池

数据库连接----执行完毕—释放

连接十分浪费资源

池化技术:准备一些预先的资源,过来就是连接准备好的

----开门----业务员:等待–服务—

常用连接数:10

最小连接数:10

最小连接数:100 业务最高承载上限

等待超时:100ms

编写连接池,实现一个接口 DateSource

开源数据源实现

DBCP

C3P0

Druid:阿里巴巴

使用这些数据库连接池后在项目就不需要写项目连接池了


http://chatgpt.dhexx.cn/article/uBHsGl4x.shtml

相关文章

JDBC中com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别

最近重装了系统,随后在官网下载了最新版本的MySQL8.0.13和相应的mysql-connector-java-8.0.13,运行程序时出现好几种错误。 之前的代码是这样的: driverClassNamecom.mysql.jdbc.Driver urljdbc:mysql:///db1?useUnicodetrue&characte…

JDBC概述

目录 一、JDBC概述二、JDBC搭建三、 PreparedStatement和Statement四、结果集处理 一、JDBC概述 1、JDBC(Java DataBase Connectivity)java 数据库连接 2、是一种用于执行SQL语句的java API ,可以为多种关系型数据库提供统一访问&#xff0c…

JDBC使用教程详解

文章目录 一、前言二、JDBC概述2.1 JDBC定义2.2 JDBC接口调用方和实现方JDBC接口调用方JDBC接口实现方 2.3 连接数据库驱动2.5 JDBC原理 三、JDBC编程url3.1URL3.3 SQL的分类 四、JDBC编程六步曲4.1 第一步:注册驱动4.2 第二步:获取数据库连接4.3 第三步…

【MySQL】JDBC编程

目录 1、什么是JDBC? 2、导入 jar 包 3、JDBC 的使用 4、总结 1、什么是JDBC? 实际开发中,SQL 是很少手动输入的,绝大多数的 SQL 都是通过代码,自动执行的,这个时候就需要让其他编程语言来操作数据库了…

MySQL JDBC编程

✏️作者:银河罐头 📋系列专栏:MySQL 🌲“种一棵树最好的时间是十年前,其次是现在” 文章目录 前置知识API JDBC的使用安装数据库代码插入操作查找操作 前置知识 API API(Application Program Interface)被定义为应用…

JDBC编程

目录 什么是 JDBC? JDBC 架构 常见的 JDBC 组件 分析Java连接MySQL的五种方式 方式一:将用户名和密码封装在Properties类中 方式二:在方式一的基础上,利用反射实现驱动 方式三:使用DriverManger替代driver进行统…

java——jdbc编程

文章目录 JDBC的概念JDBC的常用APIJDBC示例代码PreparedStatementCallableStatement JDBC(Java Database Connectivity)是Java的一种数据库访问标准,它提供了一套API,使得我们可以通过Java程序来访问和操作各种关系型数据库。 下面…

JDBC是什么

JDBC介绍 JDBC( Java DataBase Connectivity ) 称为 Java数据库连接 ,它是一种用于数据库访问的应用程序 API ,由一组用Java语言编写的类和接口组成,有了JDBC就可以 用统一的语法对多种关系数据库进行访问,而不用担心其数据库操作…

如何使用JDBC操作数据库?一文带你吃透JDBC规范

文章目录 1. 前言2. JDBC 概述2.1 概念2.2 优点 3. JDBC 快速入门4. JDBC API详解4.1 DriverManager4.1.1 注册驱动4.1.2 获取连接 4.2 Connection4.2.1 获取执行sql的对象4.2.2 事务管理 4.3 Statement4.4 ResultSet4.5 PreparedStatement4.5.1 sql注入问题4.5.2 preparedStat…

JDBC详解

1.JDBC是什么? Java DataBase Connectivity(Java语言连接数据库) 2.JDBC的本质是什么? JDBC是SUN公司制定的一套接口(interface) java.sql.*;(这个软件包下有很多接口) 接口都有…

JDBC简介

文章目录 一、JDBC简介二、JDBC执行步骤三、执行步骤中类的简介1、DriverManager类2.Connection类3、ResultSet类 一、JDBC简介 1.什么是jdbc JDBC全称:java database connectivity,简称jdbc, 翻译就是 Java 数据库连接。 2.jdbc有什么作用…

JDBC详细介绍

jdbc的概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。 2.jdbc的作用 JDBC为Java程序操作不同的数据库提…

JDBC详细全解(示例超多)

文章目录 JDBCJDBC的概念1.jdbc的概念2.jdbc的本质 JDBC快速入门JDBC功能详解1、DriverManager驱动管理对象2、Connection数据库连接对象3、Statement执行sql语句的对象4、ResultSet结果集对象 JDBC案例案例需求数据准备1、数据库数据准备2、创建student类 功能实现1、查询所有…

JDBC介绍

1 JDBC简介 概念:JDBC(Java DataBase Connectivity) :Java数据库连接技术:具体讲就是通过Java连接广泛的数据库,并对表中数据执行增、删、改、查等操作的技术。如图所示: 此前我们学习过SQL后,可以通过 Na…

JDBC 连接 MySQL

哈喽~大家好,这次我们来看看 JDBC 如何 连接 MySQL. 目录 一、开头 二、介绍 1、JDBC 的概念 2、JDBC 的功能 3、JDBC 的常用接口和类 三、数据库的创建(MySQL) 1、连接 MySQL (1)、注册驱动 (2)、获取连接 (3)、获取执行者连接 …

BindingNavigator 类 - MSDN

.NET Framework 2.0 其他版本 5(共 9)对本文的评价是有帮助 - 评价此主题 注意:此类在 .NET Framework 2.0 版中是新增的。 表示窗体上绑定到数据的控件的导航和操作用户界面 (UI)。 命名空间:System.Windows.Forms 程序集:System.Windows.Fo…

Android的一个BindView工具的实现

对于Android已经有很多Bind View的工具了,大多都是使用了反射和注解的方法。那么如何实现一个简易的代码生成工具呢?其实不难,只要会写代码都可以试试。这些天,我试了一下,并将它做成了工具。代码如下: pa…

setNavigationBarTitle

wx.setNavigationBarTitle就是用来改红框框里面的内容滴 在项目开发中经常用到 使用的场景就包括了多个地方用同一套页面的时候 wx.setNavigationBarTitle({title: "我的店铺",});

安卓ViewBinding详解

背景 之前我们通过Kotlin Android Extensions来访问布局文件中的元素,但是这个现在被废弃了,原因如下: 空安全:res下的任何id都可以被访问,有可能因访问了非当前Layout下的id而出错兼容性:只能在kotlin中…

Winform中用bindingNavigator和bingdingSource实现分页

BindingNavigator控件介绍 可以使用BindingNavigator控件来创建标准化的方法,以便用户搜索和更改 Windows 窗体上的数据。BindingNavigator 控件由包含一系列 ToolStripItem 对象的ToolStrip组成,可以实现:添加数据,删除数据&…