20201027+袁鑫

学习日志

知识总结

JDBC

客户端操作MySQL的方式

  1. 使用第三方客户端来访问 MySQL : SQLyog 、 Navicat 、 SQLWave 、 MyDB Studio 、 EMS SQL Manager for MySQL

  2. 使用 MySQL 自带的命令行方式

    1. 通过 Java 来访问 MySQL 数据库
JDBC概念

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

有了JDBC,向各种数据库发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问 MySQL数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问DB2数据库又编写另 一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将 Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它 在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

Java数据库连接体系结构是用于应用程序连接数据库的标准方法。对程序员而言是,对实现与数据库连 接的服务提供商而言是接口模型。作为,为程序开发提供标准的接口,并为数据库厂商及第三方中间件 厂商实现与数据库的连接提供了标准方法。实现了所有这些面向标准的目标并且具有简单、严格类型定 义且高性能实现的接口。

JDBC的作用
  1. 与数据库建立连接

  2. 将Java中拼写的SQL语句发送到数据库中执行

  3. 处理执行结果

JDBC API

image-20201027215532924

JDBC在运行时执行的顺序如下:

  1. 先用DriverManager 类驱动数据库
  2. 再用Connection接口负责将Java程序和数据库建立连接。
  3. 再用Statement/PreparedStatement 接口将SQL语句发送到数据库中。
  4. 再由ResultSet接口处理数据库返回的结果集。
DriverManager

java.sql.DriverManager 用于管理一组 JDBC 驱动程序的基本服务。可以通过该管理类来建立并获 取和指定数据库之间的连接。

static 方法
  • public static Connection getConnection(String url, String user, String password) :使用账号 user 和密码 password ,建立到指定数据库 URL 的连接,连接成功后返回 新的数据库连接

  • public static Connection getConnection(String url) :尝试查找了解给定URL的驱动程序 (将数据库用户信息包含在 url 中)

  • public static void registerDriver(java.sql.Driver driver) :向 DriverManager 注册给定驱动程序

数据库连接字符串

​ DriverManager 类在加载数据库驱动时,需要指明 url ,这里的 url 通常称作数据库连接字符串。数 据库连接字符串用于确定连接协议、连接的数据库服务器、端口号、数据库名称及其连接参数。

主协议:子协议://数据库服务器:端口号/数据库名称?连接参数

 jdbc:mysql://localhost:3306/company_info?user=root&password=root

常用参数表

image-20201027220512939

Connection

java.sql.Connection 用于与特定数据库的连接(会话)。 执行SQL语句并在连接的上下文中返回结 果。只有在数据库连接后,才能将SQL语句发送到数据库中执行。

常用方法

Statement createStatement() :创建一个 Statement 对象,用于将SQL语句发送到数据库

PreparedStatement prepareStatement(String sql) :创建一个 PreparedStatement 对象, 用于将参数化的SQL语句发送到数据库。

PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) :创建一个 默认的 PreparedStatement 对象,该对象获取自动生成的键, autoGeneratedKeys 值可以是: Statement.RETURN_GENERATED_KEYS / Statement.NO_GENERATED_KEYS

void setAutoCommit(boolean autoCommit) :将此连接的自动提交模式设置为给定状态,默认为 自动提交

void commit() :使自上次提交/回滚以来所做的所有更改都将永久性,并释放此 Connection对象 当前持有的任何数据库锁。

void rollback() :撤消在当前事务中所做的所有更改,并释放此 Connection对象当前持有的任 何数据库锁。

void rollback(Savepoint savepoint) :撤消在给定的 Savepoint对象设置后进行的所有更改

Savepoint setSavepoint() :在当前事务中创建一个未命名的保存点,并返回代表它的新的Savepoint对象。

Savepoint setSavepoint(String name) :在当前事务中创建具有给定名称的保存点,并返回代 表它的新的 Savepoint对象。

boolean isClosed() :检索此 Connection对象是否已关闭

void close() :Connection释放此Connection对象的数据库和JDBC资源,而不是等待它们自动 释放。 在已关闭的Connection对象上调用方法close是无操作的

Statement

java.sql.Statement 用于执行静态SQL语句并返回其生成的结果的对象。默认情况下,每个 Statement对象只能有一个ResultSet对象同时打开。

常用方法

  • boolean execute(String sql) :执行给定的SQL语句,这可能会返回多个结果

  • boolean execute(String sql, int autoGeneratedKeys) : 执行给定的 SQL 语句(该语句 可能返回多个结果),并通知驱动程序所有自动生成的键都应该可用于获取。 autoGeneratedKeys 值可以是: Statement.RETURN_GENERATED_KEYS / Statement.NO_GENERATED_KEYS

  • ResultSet getGeneratedKeys() :检索由执行此Statement对象而创建的任何自动生成的密钥。 如果此Statement对象未生成任何键,则返回空的ResultSet对象

  • ResultSet getResultSet() :检索当前结果为ResultSet对象。 每个结果应该只调用一次这个方法。

  • int getUpdateCount() :将当前结果作为更新计数检索; 如果结果是ResultSet对象或没有更多的 结果,则返回-1。 每个结果应该只调用一次这个方法。

  • int executeUpdate(String sql) :执行给定的SQL语句,这可能是INSERT ,UPDATE或 DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。

  • int executeUpdate(String sql, int autoGeneratedKeys) :执行给定的 SQL 语句,并用给 定标志通知驱动程序由此 Statement 生成的自动生成键是否可用于获取

  • ResultSet executeQuery(String sql) :执行给定的SQL语句,该语句返回单个ResultSet对象

  • boolean isClosed() :如果这个Statement对象关闭,则为true; 如果它仍然开放,则为false

  • void close() :Statement释放此Statement对象的数据库和JDBC资源,而不是等待其自动关闭 时发生。调用已关闭的Statement对象上的方法close不起作用。当一个Statement对象关闭时, 其当前的ResultSet对象(如果存在)也被关闭

PreparedStatement

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

常用方法

该接口继承自 Statement 接口,扩展了以下常用方法:

  • void setObject(int parameterIndex, Object x) :使用给定对象设置指定参数的值
  • ResultSet executeQuery() :执行此 PreparedStatement对象中的SQL查询,并返回查询 PreparedStatement的 ResultSet对象
  • int executeUpdate() :执行在该SQL语句PreparedStatement对象,它必须是一个SQL数据操纵语言(DML)语句,如INSERT ,UPDATE或DELETE ; 或不返回任何内容的SQL语句,例如DDL语句

ResultSet

java.sql.ResultSet 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet 对象保持一个光标指向其当前的数据行。 最初,光标位于第一行之前。 next方法将光标移动到下一 行,并且由于在ResultSet对象中没有更多行时返回false ,因此可以在while循环中使用循环来遍历结果 集。

常用方法

  • boolean next() :将光标从当前位置向前移动一行。 ResultSet光标最初位于第一行之前; 第一次 调用方法next使第一行成为当前行; 第二个调用使第二行成为当前行,依此类推。返回值true如果 新的当前行有效; false如果没有更多的行
  • Object getObject(int columnIndex) :获取此的当前行中指定列的值ResultSet作为对象Object 在Java编程语言。第一列是1
  • Object getObject(String columnLabel) :获取此的当前行中指定列的值ResultSet作为对象 Object在Java编程语言。使用SQL AS子句指定的列的标签
  • void close() :ResultSet发布此ResultSet对象的数据库和JDBC资源,而不是等待此事件在自动 关闭时发生。
  • boolean isClosed() :检索此 ResultSet对象是否已关闭

ResultSetMetaData

java.sql.ResultSetMetaData 可用于获取有关ResultSet对象中列的类型和属性的信息的对象。使用 ResultSet 对象的 getMetaData() 获取

方法

  • String getCatalogName(int column) 获取指定列的表目录名称。
  • String getColumnClassName(int column) 如果调用方法 ResultSet.getObject 从列中获取 值,则返回构造其实例的 Java 类的完全限定名称。
  • int getColumnCount() 返回此ResultSet对象中的列数。
  • int getColumnDisplaySize(int column) 指示指定列的最大标准宽度,以字符为单位。
  • String getColumnLabel(int column) 获取用于打印输出和显示的指定列的建议标题。
  • String getColumnName(int column) 获取指定列的名称。
  • int getColumnType(int column) 获取指定列的 SQL 类型。
  • String getColumnTypeName(int column) 获取指定列的数据库特定的类型名称。
  • int getPrecision(int column) 获取指定列的指定列宽。
  • int getScale(int column) 获取指定列的小数点右边的位数。
  • String getSchemaName(int column) 获取指定列的表模式。
  • String getTableName(int column) 获取指定列的名称。
  • boolean isAutoIncrement(int column) 指示是否自动为指定列进行编号。
  • boolean isCaseSensitive(int column) 指示列的大小写是否有关系。
  • boolean isCurrency(int column) 指示指定的列是否是一个哈希代码值。
  • boolean isDefinitelyWritable(int column) 指示在指定的列上进行写操作是否明确可以获得成功。
  • int isNullable(int column) 指示指定列中的值是否可以为 null。
  • boolean isReadOnly(int column) 指示指定的列是否明确不可写入。
  • boolean isSearchable(int column) 指示是否可以在 where 子句中使用指定的列
  • boolean isSigned(int column) 指示指定列中的值是否带正负号。
  • boolean isWritable(int column) 指示在指定的列上进行写操作是否可以获得成功。

心得

今天学了JDBC ,敲了还是挺多的代码,方法有些多,用还是对着都会用,但是可能有点记不太住。还需要大量的练习!

标签

评论

this is is footer