JDBC

Q1:什么是JDBC?

JDBC: 全称是Java DataBase Connection,也就是 Java数据库连接 ,我们可以用它来操作关系型数据库。

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


Q2:原生 JDBC操作数据库流程?

  1. Class.forName()加载数据库连接驱动;
  2. DriverManager.getConnection()获取数据连接对象(conn);
  3. 根据SQL获取sql会话对象。有 2 种方式 Statement、PreparedStatement ;
  4. 执行SQL处理结果集,执行 SQL 前如果有参数值就设置参数值 setXXX();
  5. 关闭结果集、关闭会话、关闭连接。

Q3:JDBC中的Statement 和PreparedStatement的区别?

(1)PreparedStatement 继承于 Statement,PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。

(2)作为Statement的子类 ,PreparedStatement继承了 Statement 的所有功能 。三 种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。

(3)Statement 一般用于执行固定的没有参数的SQL。

PreparedStatement 一般用于执行有 ?参数预编译的SQL语句。 P
reparedStatement支持 ? 操作参数,相对于Statement更加灵活。

(4)PreparedStatement可以防止SQL注入,安全性高于Statement。

在 JDBC 应用中,在任何时候都不要使用 Statement,原因如下:

代码的可读性和可维护性。Statement 需要不断地拼接,而 PreparedStatement 不会。

PreparedStatement 尽最大可能提高性能。DB 有缓存机制,相同的预编译语句再次被调用不会再次需要编译。

最重要的一点是极大地提高了安全性。Statement 容易被 SQL 注入,而PreparedStatement 传入的内容不会和 sql 语句发生任何匹配关系。


Q4:关系数据库中连接池的机制是什么?

前提: 为数据库连接建立一个缓冲池。

(1)从连接池获取或创建可用连接。

(2)使用完毕之后,把连接返回给连接池。

(3)在系统关闭前,断开所有连接并释放连接占用的系统资源。

(4)能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。


Q5:JDBC是如何实现的Java程序和JDBC驱动的松耦合的?

(1)通过制定接口,数据库厂商来实现。我们只要通过接口调用即可。

(2)驱动只有在通过的Class.forName反射机制来加载的时候才会出现。


Q6:有哪些不同的结果集?

1、一共有三种ResultSet对象。

ResultSet.TYPE_FORWARD_ONLY:这是默认的类型,它的游标只能往下移。

ResultSet.TYPE_SCROLL_INSENSITIVE:游标可以上下移动,一旦它创建后,数据库里的数据再发生修改,对它来说是透明的。

ResultSet.TYPE_SCROLL_SENSITIVE:游标可以上下移动,如果生成后数据库还发生了修改操作,它是能够感知到的。

2、ResultSet中有两种并发类型。

ResultSet.CONCUR_READ_ONLY:ResultSet是只读的,这是默认类型。

ResultSet.CONCUR_UPDATABLE:我们可以使用的ResultSet的更新方法来更新里面的数据。


Q7:常见的JDBC异常有哪些?

java.sql.SQLException:JDBC异常的基类。

java.sql.BatchUpdateException:当批处理操作执行失败的时候可能会抛出这个异常。这取决于具体的JDBC驱动的实现,它也可能直接抛出基类异常java.sql.SQLException中。

java.sql.SQLWarning:SQL操作出现的警告信息。

java.sql.DataTruncation:字段值由于某些非正常原因被截断了


Q8:JDBC的DataSource是什么,有什么好处?

DataSource即数据源,它是定义在javax.sql中的一个接口,跟DriverManager相比,它的功能要更强大。我们可以用它来创建数据库连接,当然驱动的实现类会实际去完成这个工作。除了能创建连接外,它还提供了如下的特性:

  1. 缓存PreparedStatement以便更快的执行

  2. 可以设置连接超时时间

  3. 提供日志记录的功能

  4. ResultSet大小的最大阈值设置

  5. 通过JNDI的支持,可以为servlet容器提供连接池的功能


Q9:execute,executeQuery,executeUpdate的区别是什么?

boolean execute() 可以用来执行任意SQL语句,返回一个boolean的值,表明该语句是否返回了一个结果集对象ResultSet。

int executeUpdate() 用来执行修改,插入,删除操作。(执行SELECT会抛出异常)

ResultSet executeQuery() 只能进行SELECT,从而得到结果集对象。(DELETE、UPDATE、INSERT操作都会抛出异常)

通常我们不使用execute,如果你不知道要执行的SQL语句是什么类型的,就可以使用execute。


Q10:数据库连接池的原理。为什么要使用连接池?

1. 数据库连接池的原理?

其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

2. 为什么要使用连接池?

数据库连接是一种关键的,有限的,昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。


Q11:JDBC的DriverManager是用来做什么的?

JDBC的DriverManager是一个工厂类,我们通过它来创建数据库连接。
Connection conn = DriverManager.getConnection();

当JDBC的Driver类被加载进来时,它会自己注册到DriverManager类里面,然后我们会把数据库配置信息传成DriverManager.getConnection()方法,DriverManager会使用注册到它里面的驱动来获取数据库连接,并返回给调用的程序。


Q12:RowSet和ResultSet的区别?

public interface RowSet extends ResultSet
RowSet继承自ResultSet,因此它有ResultSet的全部功能,同时它自己添加了些额外的特性。
RowSet一个最大的好处是它可以是离线的,这样使得它更轻量级,同时便于在网络间进行传输。





深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值