jdbc mysql api_JDBC Api详解

一.什么是JDBC

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

二.数据库驱动

JDBC是对数据库操作的接口抽象,而不同数据库厂商的数据库驱动程序则对应JDBC接口实现,通过抽象出JDBC接口,应用程序和实际的数据库驱动即JDBC实现解耦。

c0f4b233bdc660f4368db23976514f74.png

三、常用接口

1.Driver接口

Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如:

装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");

装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");

2.Connection接口

Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。DriverManager.getConnection(url, user, password)方法建立在JDBC URL中定义的数据库Connection连接上。

连接MySql数据库:Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");

连接Oracle数据库:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");

连接SqlServer数据库:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");

常用方法:

createStatement():创建向数据库发送sql的statement对象。

prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。

prepareCall(sql):创建执行存储过程的callableStatement对象。

setAutoCommit(boolean autoCommit):设置事务是否自动提交。

commit() :在链接上提交事务。

rollback() :在此链接上回滚事务。

3.Statement接口

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

三种Statement类:

Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。

PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。

CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。

常用Statement方法:

execute(String sql):运行语句,返回是否有结果集

executeQuery(String sql):运行select语句,返回ResultSet结果集。

executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。

addBatch(String sql) :把多条sql语句放到一个批处理中。

executeBatch():向数据库发送一批sql语句执行。

4.ResultSet接口

ResultSet提供检索不同类型字段的方法,常用的有:

getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。

getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。

getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。

getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。

getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。

ResultSet还提供了对结果集进行滚动的方法:

next():移动到下一行

Previous():移动到前一行

absolute(int row):移动到指定行

beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面。

使用后依次关闭对象及连接:ResultSet → Statement → Connection

四、使用JDBC的步骤

加载JDBC驱动程序 → 建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源

1.注册驱动 (只做一次)

方式一:Class.forName(“com.MySQL.jdbc.Driver”);

推荐这种方式,不会对具体的驱动类产生依赖。

方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver);

会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

2.建立连接

Connection conn = DriverManager.getConnection(url, user, password);

URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

0Jgby6gAAAABJRU5ErkJggg==

其他参数如:useUnicode=true&characterEncoding=utf8

3.创建执行SQL语句的statement

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //Statement

2 String id = "5";

3 String sql = "delete from table where id=" + id;

4 Statement st = conn.createStatement();

5 st.executeQuery(sql);

6 //存在sql注入的危险

7 //如果用户传入的id为“5 or 1=1”,那么将删除表中的所有记录

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //PreparedStatement 有效的防止sql注入(SQL语句在程序运行前已经进行了预编译,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令)

2 String sql = “insert into user (name,pwd) values(?,?)”;

3 PreparedStatement ps = conn.preparedStatement(sql);

4 ps.setString(1, “col_value”); //占位符顺序从1开始

5 ps.setString(2, “123456”); //也可以使用setObject

6 ps.executeQuery();

48304ba5e6f9fe08f3fa1abda7d326ab.png

4.处理执行结果(ResultSet)

1 ResultSet rs = ps.executeQuery();

2 While(rs.next()){

3 rs.getString(“col_name”);

4 rs.getInt(1);

5 //…

6 }

5.释放资源

48304ba5e6f9fe08f3fa1abda7d326ab.png

//数据库连接(Connection)非常耗资源,尽量晚创建,尽量早的释放

//都要加try catch 以防前面关闭出错,后面的就不执行了

1 try {

2 if (rs != null) {

3 rs.close();

4 }

5 } catch (SQLException e) {

6 e.printStackTrace();

7 } finally {

8 try {

9 if (st != null) {

10 st.close();

11 }

12 } catch (SQLException e) {

13 e.printStackTrace();

14 } finally {

15 try {

16 if (conn != null) {

17 conn.close();

18 }

19 } catch (SQLException e) {

20 e.printStackTrace();

21 }

22 }

23 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

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

相关文章

MySQL 修改视图

修改视图是指修改 MySQL 数据库中存在的视图&#xff0c;当基本表的某些字段发生变化时&#xff0c;可以通过修改视图来保持与基本表的一致性。 基本语法 可以使用 ALTER VIEW 语句来对已有的视图进行修改。 语法格式如下&#xff1a; ALTER VIEW <视图名> AS <SE…

php mysql 冒号_php – 使用pdo在搜索变量中使用冒号(:)进行查询

我有一个恼人的问题.我正在尝试做一些简单的事情,比如从db获取一个单元格值.这是你可以用db做的最基本的事情…给我一个值,其中有一个具有此值的单元格….问题是搜索查询包含冒号(:).我在一个准备好的语句的类中使用pdo函数,但没有运气.我已经尝试了一切,甚至将查询分开,因此它…

MySQL 删除视图

删除视图是指删除 MySQL 数据库中已存在的视图。删除视图时&#xff0c;只能删除视图的定义&#xff0c;不会删除数据。 基本语法 可以使用 DROP VIEW 语句来删除视图。 语法格式如下&#xff1a; DROP VIEW <视图名1> [ , <视图名2> …]其中&#xff1a;<视…

python计算经纬度之间的距离_python函数——根据经纬度计算距离公式的错误及修正...

函数import mathdef cal_dis(latitude1,longitude1,latitude2,longitude2):latitude1 (Math.PI/180)*latitude1latitude2 (Math.PI/180)*latitude2longitude1 (Math.PI/180)*longitude1longitude2 (Math.PI/180)*longitude2#因此AB两点的球面距离为:{arccos[sinb*sinycosb*c…

MySQL 自定义函数

在使用 MySQL 的过程中&#xff0c;MySQL 自带的函数可能完成不了我们的业务需求&#xff0c;这时候就需要自定义函数。 自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样&#xff0c;都是由 SQL 语句和过程式语句组成的代码片段&#xff0c;并且可以…

mysql frm 英文全称_FRM考试是中文还是英文?

FRM(Financial Risk Manager)是全球金融风险管理领域顶级的权威国际资格认证&#xff0c;由美国“全球风险管理协会”(Global Association of Risk Professionals &#xff0c;简称daoGARP)设立。所以全球的FRM考试都是英文的试卷。FRM考试是全英文考试&#xff0c;但其实要求并…

mysql业务数据库回退_理解MySQL数据库事务-隔离性

Transaction事务是指一个逻辑单元&#xff0c;执行一系列操作的SQL语句。事务中一组的SQL语句&#xff0c;要么全部执行&#xff0c;要么全部回退。在Oracle数据库中有个名字&#xff0c;叫做transaction ID在关系型数据库中&#xff0c;事务必须ACID的特性。原子性&#xff0c…

ply补全为立方体_PLY文件格式

一、PLY简介PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式&#xff0c;图形学领域内很多著名的模型数据&#xff0c;比如Stanford的三维扫描数据库(其中包括很多文章中会见到的Happy Buddha, Dragon, Bunny兔子)&#xff0c;Geogia Tech的大型几何模型库&#xff0…

MySQL 修改存储过程

MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。 MySQL 中修改存储过程的语法格式如下&#xff1a; ALTER PROCEDURE 存储过程名 [ 特征 ... ]特征指定了存储过程的特性&#xff0c;可能的取值有&#xff1a; CONTAINS SQL 表示子程序包含 SQL 语句&#xff0c;但不包含读…

python 可执行文件打包_使用可执行文件打包Python库

通常,当整个项目适合单个模块文件时,您只将python包作为模块分发.如果您的项目比这更复杂,通常最好将项目构造为包含__init__.py文件的包.这是您的项目看起来像转换为包的内容Project/|-- README|-- requirement.txt|-- setup.py|-- scripts/| |-- driver.py|-- driver/| |-- _…

MySQL 删除存储过程

当 MySQL 数据库中存在废弃的存储过程时&#xff0c;我们需要将它从数据库中删除。 MySQL 中使用 DROP PROCEDURE 语句来删除数据库中已经存在的存储过程。语法格式如下&#xff1a; DROP { PROCEDURE | FUNCTION } [ IF EXISTS ] <过程名>语法说明如下&#xff1a; 过…

java socket 阻塞模式_Java中Socket Read阻塞问题

本人来说并不熟悉JAVA语言&#xff0c;只是近期在分析某个简单的java agent程序时&#xff0c;根据对应的代码写了一个对接的程序&#xff0c;两者之间是典型的C/S socket编程。客户端在向服务端发送相应的指令后&#xff0c;服务端(装agent的主机)执行后会返回执行的数据给客户…

java 窗体 源码_Java制作MDI窗体源代码

由于实际需要做一个MDI窗体&#xff0c;百度里面找到一个不错的源代码给大家分享一下。import javax.swing.*;import java.awt.event.*;import java.awt.*;class JInternalFrame1 extends JFrame implements ActionListener{JDesktopPane desktopPane;int count 1;public JInt…

MySQL 创建触发器

触发器是与 MySQL 数据表有关的数据库对象&#xff0c;在满足定义条件时触发&#xff0c;并执行触发器中定义的语句集合。 基本语法 在 MySQL 5.7 中&#xff0c;可以使用 CREATE TRIGGER 语句创建触发器。 语法格式如下&#xff1a; CREATE <触发器名> < BEFORE …

java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...

本文主要向大家介绍了Java语言通过URL读取网页数据并保存到本地文件(代码实例)&#xff0c;通过具体的内容向大家展示&#xff0c;希望对大家学习JAVA语言有所帮助。Java通过URL读取网页数据并保存到本地文件(代码实例)import java.io.*;import java.net.MalformedURLException…

MySQL 修改和删除触发器

修改触发器可以通过删除原触发器&#xff0c;再以相同的名称创建新的触发器。 基本语法 与其他 MySQL 数据库对象一样&#xff0c;可以使用 DROP 语句将触发器从数据库中删除。 语法格式如下&#xff1a; DROP TRIGGER [ IF EXISTS ] [数据库名] <触发器名>语法说明如…

java做主成分分析_主成分分析(PCA) Java

导入jar包:Jama-1.0.2.jar//计算类import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.TreeMap;import Jama.Matrix;/**…

idl文件生成java_IDL和生成代码分析

IDL:接口描述语言这里使用thrift-0.8.0-xsb这个版本来介绍IDL的定义以及简单实例分析。1. namespace 定义包名2.struct 结构体&#xff0c;定义服务接口的参数和返回值用到的类结构。基本类型不需要使用struct.3.service 定义接口&#xff1a;demo.thrift1 namespace java com.…

java从控制台读取数据_Java不同版本从控制台读取数据方法及优缺点分析

从JDK 5.0版本开始&#xff0c;能从控制台中输入数据的方法每增加一个版本号&#xff0c;就有一种新增的方法&#xff0c;这也增加了选择的种类&#xff0c;可以依据不同的要求来进行选择。下面和绿茶小编一起来了解一下各个版本从控制台中读取数据的方法以及各自的优缺点。1、…

java类和对象程序_Java类与对象程序设计基础

Java类与对象程序设计基础一、实验目的&#xff1a;通过编制一个独立应用程序&#xff0c;使得学生掌握Java的系统所提供类的引用方法&#xff1b;通过编制一个完整的应用程序&#xff0c;使得学生对Java的应用程序的基本构成和基本算法熟练掌握&#xff0c;同时熟悉Java开发环…