使用JDBC操作数据库时对各个语句理解的意思

news/2024/12/29 18:52:14/

这里列举了使用JDBC操作数据库时我对各个语句理解的意思,如有错误请指正。

目录

碰到的null

Connection conn = null;

PreparedStatement ptst = null;

ResultSet rs = null;

if (rs != null) {rs.close();}

编码问题

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

驱动连接问题

Class.forName(driver);

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

conn = new ConnectionMethod().ConnectionGet();

文本问题

e.printStackTrace();

PrintWriter out = response.getWriter();

异常

SQLException e

Statement对象的使用

Statement

st = conn.createStatement();

rs = st.executeQuery(selectUsername);

ptst = (PreparedStatement)

            conn.prepareStatement(selectPassword);

ptst.setString(1, loginName);

rs = ptst.executeQuery();

passwordList.add(rs.getString(1));

强制刷新

flush();


碰到的null

Connection conn = null;

PreparedStatement ptst = null;

是使用懒加载减少内存浪费。就是等到它们没被使用时,java垃圾回收机制能将该部分内存释放

ResultSet rs = null;

  1. 这句话一般声明在try catch块外,然后再在try catch块里面初始化
  2. 声明在外边是为了可以在最后关闭rs,完成资源释放。

if (rs != null) {rs.close();}

这句话一般放在后面,是因为数据库资源允许的并发访问连接数量有限,因此,当数据库资源使用完毕后,一定要释放资源。每一次查询后要关闭rs,不然连接数据库时就会报错。


编码问题

request.setCharacterEncoding("UTF-8");

设置请求编码

response.setContentType("text/html;charset=UTF-8");

设置响应方式和编码


驱动连接问题

Class.forName(driver);

  1. 是使用纯java驱动连接mysql数据库,加载驱动程序到java解释器中。根本目的就是为了调用DriverManager.registerDriver,加载要连接数据库的驱动程序。
  2. 一般在后面会写一个ClassNotFoundException e的异常类,这个是在运行时找不到所需的类的异常,也就是如果Class.forName(driver);找不到相关驱动,该异常类就会报异常。

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

  1. 是DriverManager类跟踪已注册的驱动程序,通过getConnection(URL)方法, 找到一个能够连接至URL中指定的数据库驱动程序。

conn = new ConnectionMethod().ConnectionGet();

  1. 即调用ConnectionMethod类的ConnectionGet()方法,从而获取与数据库的链接,一般写在一个Servlet里,这样就可以调用外面的连接类。
  2. ConnectionMethod类你也可以改名成其他的,只是我这里写成这个名字。


文本问题

e.printStackTrace();

经常出现在异常类中,是在命令行打印异常信息在程序中出错的位置及原因。

PrintWriter out = response.getWriter();

  1. out是一个PrintWriter对象,该对象可以将字符文本返回给客户端。
  2. 这个字符打印流使用返回的字符编码getCharacterEncoding()。如果响应的字符编码没被指定,也就是获取编写器会将编码格式确定为默认返回的ISO-8859-1编码格式。
  3. 如果发生输入或输出异常会被java.io.IOException捕获


异常

SQLException e

实例化SQLException类型的对象,当try块出现异常时就捕捉异常并做响应的处理。


Statement对象的使用

Statement

是 Java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。

st = conn.createStatement();

是用createStatement()创建一个 Statement 对象,为了将下面传入的 SQL 语句发送到数据库

rs = st.executeQuery(selectUsername);

这里的selectUsername是我写的一个String类型的sql语句,发送该sql语句到数据库后执行,后从数据库返回得到结果集rs。

ptst = (PreparedStatement)

            conn.prepareStatement(selectPassword);

  1. 这里的selectPassword是我写的一个String类型的sql语句,prepareStatement()会将我的该条SQL语句发送给数据库预编译,PreparedStatement会引用着预编译后的结果,这个结果就是ptst
  2. 可以给PreparedStatement对象多次传入不同的参数并执行。
  • 使用该方法可以减少SQL编译次数,提高效率。
  • 使用该方法安全性更高,没有SQL注入的隐患。

ptst.setString(1, loginName);

        设置ptst参数,即为第一个参数设置一个string 类型的值,设置的值为loginName。

rs = ptst.executeQuery();

        使用java环境自带的执行查询的方法executeQuery()查询当前loginName下的内容,返回ResultSet 集合rs

passwordList.add(rs.getString(1));

是获取结果集中第一列的数据。如果你写成2就是获取第二列的数据。


强制刷新

flush();

  1. 英文名是刷新的意思,它可以提交PrintWriter的响应。
  2. IO流也有缓冲区这种东西,对于输出,较短的字符序列格式化之后并不马上输出,而是保存在缓冲区里,待累积到一定规模之后再传递到外部设备。而flush() 是要求立即将缓冲区的数据输出到接收方,从而清空缓冲区,也就是强制刷新。这样做可以防止没有调用flush();就直接调用close()方法关闭读写流而造成的数据丢失。

JDBC确实有很多需要学习的地方,需要不断钻研不断学习。


http://www.ppmy.cn/news/296561.html

相关文章

双向交错CCM图腾柱无桥单相PFC学习仿真与实现(1)系统问题分解

目录 前言 系统硬件架构 系统软件架构 仿真实现 仿真效果 总结 前言 目前正在做双向交错CCM图腾柱无桥单相PFC的项目,硬件拓扑兼容三相和单相的PFC,三相PFC功能目前已经完成,准备把单相的PFC学习和开发过程记录一下,以及后面…

perc s100 linux,DELL服务器集成raid卡PERC S100_S300详细配置手册

DELL服务器集成raid卡PERC S100_S300详细配置手册 分享到: 作者来源: 未知 发布时间:2014-09-26 此文档为自行整理,非官方提供资料,仅供参考。疏漏之处敬请反馈。 对RAID进行操作很可能会导致数据丢失,请在操作之…

kinova_j2s6s300【Cartesian position control Finger position control】

1、Cartesian position control 笛卡尔位置控制可以通过在自定义节点中调用KinovaComm::setCartesianPosition()来实现。或者,您可以简单地调用 kinova_demo 包中的节点pose_action_client.py。 这个函数需要三个参数:kinova_robotType (eg. j2n6s300)…

西门子s300编程实例,【西门子S7-300PLC 编程 】该死的 FC+Temp

start和driver是外部输入输出接口。 例:如果在TEMP接口中新建一个变量A,数据类型为BOOL,地址0.0 1,正确的FC程序如下: | #start #A |--| |---------() | | #A #driver |--|/|---------() 2,错误的例子: | #A #driver |--|/|---------() | | #start #A |--| |---------()…

西门子s300编程实例_数控车床加工编程典型实例分析(西门子802S数控系统编程教学)...

这是一篇带有教学色彩的习作,文章对数控编程的方式和步骤进行了简明的阐述,并针对一个典型零件的数控车削加工给出了一套程序。程序是以西门子802S数控系统为例编写的。 数控机床是一种技术密集度及自动化程度很高的机电一体化加工设备,是综合应用计算机、自动控制、自动检测…

kinova_j2s6s300【Torque control】

Torque control New in release 1.2.0 扭矩控制变得更加容易。现在您可以像关节/笛卡尔速度一样发布扭矩/力命令。为此,您需要: 1、可选 - 设置扭矩参数 通常默认参数应该适用于大多数应用程序。但是如果你需要改变一些扭矩参数,你可以设置…

西门子s300编程实例_几个西门子plc编程实例图解(含程序应用实例)

一、十字路口的交通指挥信号灯布置如下图: 1、控制要求 (1)信号灯系统由一个启动开关控制,当启动开关接通时,该信号灯系 统开始工作,当启动开关关断时,所有信号灯都熄灭。 (2)南北绿灯和东西绿灯不能同时亮。如果同时亮应关闭信号灯系统, 并立刻报警。 (3)南北红灯亮维持…

kinova_j2s6s300【Joint position control】

关节位置控制可以通过在自定义节点中调用KinovaComm::setJointAngles()来实现,也可以直接调用kinova_demo包中的节点joints_action_client.py。 这个函数需要三个参数:kinova_robotType (eg. j2n6s300), unit {degree |radian}和value(每个…