JDBC的基本使用

文章目录

  • 概念
  • 基本使用步骤
  • 详解各个对象
    • DriverManager
      • 注册驱动
      • 获取数据库连接
    • Connection
      • 获取执行 SQL 语句的对象
      • 事务管理
    • Statement
      • 执行 SQL 语句
    • ResultSet
    • Preparedstatement

概念

Java DataBase Connectivity Java 数据库连接,即使用 Java 语言操作数据库

JDBC本质:
其实是官方(sun公司) 定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去写实现类来实现这套接口,并将这些实现类打成 jar 包,称之为数据库驱动包。我们可以使用这套接口(JDBC) 编程,而真正执行的代码是数据库驱动 jar 包中的实现类。

基本使用步骤

 // 1.注册驱动,即将驱动类加载进内存中
Class.forName("com.mysql.jdbc.Driver");
// 2.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
// 3.定义SQL语句
String sql = "update account set balance = 500 where id = 1";
// 4.获取执行SQL的对象Statement
Statement stmt = conn.createStatement();
// 5.执行SQL语句
int i = stmt.executeUpdate(sql);
// 6.处理结果
System.out.println(i);
// 7.释放资源
stmt.close();
conn.close();

详解各个对象

DriverManager

驱动管理对象,主要功能用来注册驱动、获取数据库连接。

注册驱动

注册驱动就是告诉程序使用哪个数据库驱动包。

注册驱动时,我们写的代码为:

Class.forName("com.mysql.jdbc.Driver");

但是类 Driver 中存在一个静态代码块为:

static {try {DriverManager.registerDriver(new Driver());} catch (SQLException var1) {throw new RuntimeException("Can't register driver!");}}

所以实际上是调用类 DriverManager 的静态方法 registerDriver 注册驱动的。

在 MySQL 5.0 版本之后,可以不必手动注册驱动包,因为 MySQL JDBC 驱动 JAR 包里面有一个配置文件,如果没有注册驱动包,会自动读取该文件,然后自动完成注册:
在这里插入图片描述

获取数据库连接

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");

其中 URL 的语法格式:jdbc:mysql://ip地址(域名):端口号/数据库名称,访问本地数据库可以简写为:jdbc:mysql:///数据库名称,即其中的localhost:3306 可以省略掉。

Connection

数据库连接对象。

获取执行 SQL 语句的对象

Statement createStatement()
PreparedStatement prepareStatement(String sql)

事务管理

设置是否自动提交事务:void setAutoCommit​(boolean autoCommit)
提交事务:void commit()
回滚事务:rollback()

Statement

用于执行静态 SQL 语句并返回它所生成结果的对象

执行 SQL 语句

int executeUpdate(String sql):执行 DML 语句(即 insert、update、delete 等语句),DDL 语句(create、drop、alter)。
返回值是指影响的行数。大于0表示执行成功,否则执行失败。

ResultSet executeQuery(String sql):执行 DQL 语句。

ResultSet

结果集对象,用来封装查询结果
next():游标向下移动一行,并且判断当前行是否结果集最后一行的后面,如果不是返回 true,是则返回 false
getXxx(参数):获取数据,其中参数可以是整数类型的 columnIndex,表示列的编号,从 1 开始,也可以是字符串类型的 columnLabel,表示列的名称。
例如,int getInt(1)、String getString(“name”)

扩展知识:
迭代器使用 hasNext() 和 next() 来迭代遍历数据

Preparedstatement

表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

预编译的 SQL 语句中的参数使用问号(?)作为占位符,然后通过调用方法给这些占位符赋值,从而构建完整的 SQL 语句。

Preparedstatement 对象可以解决 SQL 语句注入的问题,更加安全,且效率更好。

参考范例:

// 定义sql语句
String sql = "select * from user where account_name = ? and password = ?";
// 获取语句执行对象
pstmt = conn.prepareStatement(sql);
// 给预编译的sql语句参数赋值
pstmt.setString(1, accountName);
pstmt.setString(2, password);
// 执行sql语句
rs = pstmt.executeQuery();

步骤:
1.导入驱动jar包:mysql -connector- java-5.1.37-bin.jar
2.注册驱动
3.获取数据库连接对象Connection
4.定义sql
注意: sql的参数使用?作为占位符。 如: select * from user where account_name = ? and password = ?
5.获取执行sql语句的对象

Preparedstatement conn.prepareStatement(String sql)

6.给?赋值:
方法: setxxx(参数1 , 参数2)
参数1:?的位置编号从1开始
参数2:?的值
7.执行sql,接收返回结果,不需要传递sql语句
8.处理结果
9.释放资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlrelay mysql_php+sqlrelay+mysql实现连接池及读写负载均衡

phpsqlrelaymysql实现连接池及读写负载均衡上一篇 /下一篇 2008-04-02 18:25:19/ 个人分类:MySQL作者:ziqiusqlrelay.jpg(20.33 KB)2007-8-31 14:26在大型的web应用中数据库经常成为并发访问的一个瓶颈,为了有效的解决并发访问的瓶颈&#x…

maven 文件上传下载_使用Maven将文件上传和下载到S3

maven 文件上传下载多年来,我已经看到许多团队以许多不同的方式使用Maven。 Maven可用于许多ci / cd任务,而无需使用额外的管道代码,或者可用于在运行某些测试之前准备开发环境。 通常,它是一种方便的工具,在Java团队…

JDBC的事务管理

文章目录事务定义操作步骤示例代码事务定义 一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。 操作步骤 使用 Connection 对象来管理事务。 1.开启事务 2.提交事务 3.回滚事务 开启事务: setAutoC…

s71200模拟量输入输出_模拟用户输入并检查输出的简单方法

s71200模拟量输入输出最近,我的一些学生向我询问了赫尔辛基大学MOOC提供的单元测试的机制,我检查了它们的实现,并认为这对于初学者了解实际发生的情况是有帮助的,因此在此发表了这篇小文章。 我们将以“机场”项目为例&#xff0…

mysql设计一个简单的系统_一个简单数据库设计例子

一个曾经做过的简单的管理系统中数据库设计的例子,包括设计表、ER图、建模、脚本. 项目信息 Project Name: Book Manager System DB: MySQL5.5 DB Name: db_library Tables: 1). tb_book_info 2). tb_user 3). tb_admin_info 4). tb_borrow_return 5). tb_boo一个曾经做过的简单…

数据库连接池_DataSource_数据源(简单介绍C3P0和Druid)

文章目录概念好处实现C3P0基本使用配置文件druid下载 jar 包配置文件演示代码定义工具类示例代码概念 数据库连接池其实就是一个容器,而这个容器其实就是一个集合,这个集合存放着多个数据库连接对象。 系统在初始化的时候,将创建一定数量的数…

graal java_使用SparkJava和Graal的本机微服务

graal java使用SparkJava编写的微服务只是使用标准Java库的普通Java代码。 没有注释魔术,只有代码。 这种简单的编程风格的优点在于,它很简单。 非常简单,以至于Graal本机编译器只需编译就不会闪烁 ,这对于例如Spring之类的更复杂…

python消息订阅_python实现发布订阅

订阅者:import redisrc redis.StrictRedis(host‘127.0.0.1‘, port‘6379‘, db0)ps rc.pubsub()ps.subscribe(‘lbky‘) # 从lbky订阅消息for item in ps.listen(): # 监听状态:有消息发布了就拿过来print(item)if item[‘type‘] ‘message‘:prin…

使用JDBC连接数据库时,SQL语句中提示:Unable to resolve table...(原因:数据源未配置)

文章目录方法一、添加数据源方法二、输入全限定表名在 IDEA 中的 Java 代码中写 SQL 语句时,出现如下图所示的错误提示:方法一、添加数据源 要解决上面红色警告的问题,只需要添加数据源就可以解决。 方法二、输入全限定表名 前提&#xff1…

测试反模式冰激凌模式的不足_单元测试反模式,完整列表

测试反模式冰激凌模式的不足我前段时间写过有关OOP中的反模式的文章 。 现在该写单元测试反模式了,因为它们也存在,并且有很多。 我将尝试在列表中包括我知道的每个示例。 如果您认识其他任何人,请通过请求请求将其添加,或在下面发…

mysql导入三个基本表_mysql 基础导入导出

导入导出mysqldump导出:mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql导入:系统命令行: MySQL -u用户名 -p密码 常见选项:--all-databases, -A: 备份所有数据库--databases, -B: 用于备份…

Java代码中方法的特殊修饰符/修饰词/关键字

文章目录nativesynchronizednative 用该修饰符定义的方法在类中没有实现,而大多数情况下该方法的实现是用C、C编写的。 synchronized 多线程的支持。用该修饰符定义的方法被调用时,没有其它线程能够调用该方法,其它的 synchronized 方法也…

aws dynamodb_带有AWS DynamoDB的React式Spring Webflux

aws dynamodbAWS已经发布了Java版本2的AWS开发工具包 ,该开发工具包现在支持针对不同AWS服务的API调用的非阻塞IO。 在本文中,我将探讨如何使用AWS开发工具包2.x的DynamoDB API以及如何使用Spring Webflux堆栈公开响应式端点-这种方式,应用程…

centos6.5 rpm安装mysql_CentOS6.5系统下RPM包安装MySQL5.6(转)

1.查看操作系统相关信息。[rootlinuxidc ~]# cat /etc/issueCentOS release 6.5 (Final)Kernel \r on an \m[rootlinuxidc ~]# uname -aLinux linuxidc 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux2.创建需要下载rpm软件包的目…

对象作为参数示例java_功能Java示例 第6部分–用作参数

对象作为参数示例java这是称为“ Functional Java by Example”的系列文章的第6部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”,用于处理文档。 在前面的部分,我们试图通过移动尽可能多的副作用,如IO,该系统的外…

为什么Java在后来的版本中,给接口增加了默认方法、静态方法、私有方法?

在业务发展过程中,发现某个功能是所有子类都需要的,那么我们该怎么办?给接口增加抽象方法吗?如果直接在接口增加抽象方法,那么所有已经写好的具体实现类就会报编译错误。因为具体类必须实现接口的全部抽象方法。这样就…

linux 源码包安装mysql_LINUX下源码包安装mysql

tar xvfz mysql-5.1.50-linux-i686-glibc23.tar.gz -C /usr/local/解压到的目录cd /usr/local/[rootdrbd2 local]# ln -sv mysql-5.1.50-linux-i686-glibc23 mysql(创建连接)groupadd mysql 添加mysql的用户组useradd -g mysql mysql 增加mysql用户并把其加入mysql组cd mysql[r…

jdk 安全属性_系统属性的JDK 12 Javadoc标记

jdk 安全属性JDK 12 Early Access Build 20 ( 2018/11/15 )可用,可以用来试用新的Javadoc标签{systemProperty} 。 新的{systemProperty} Javadoc标记在core-libs-dev邮件列表消息“ FYI:用于记录系统属性的新javadoc标记 ”中进行…

Lambda表达式的学习

文章目录函数式编程思想函数式接口Lambda 的使用前提Lambda 的标准格式Lambda 极简特性演示代码函数式编程思想 与面向对象编程思想的区别: 1.面向对象的思想是做一件事情,找一个能解决这个事情的对象,调用对象的方法来完成事情 2.函数式编程…

公证服务信息_使用多个公证员提高网络吞吐量

公证服务信息您是否需要高吞吐量的Corda网络? 网络的吞吐量是否稳定? 您是否已经从其他领域挤出了所有可能的表现? 如果您对这些问题的回答是“是”,那么我可能会为您提供一些有用的信息。 我列出了这些问题,以减少您过…