• JDBC主要API学习总结


    JDBC主要API学习

    一、JDBC主要API简介

      JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果。

    二、Driver 接口

      Java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现

      在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现

    三、加载与注册 JDBC 驱动

      加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名

      DriverManager 类是驱动程序管理器类,负责管理驱动程序

      通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用DriverManager.registerDriver() 方法来注册自身的一个实例

    四、建立连接

      可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

      JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

      JDBC URL的标准由三部分组成,各部分间用冒号分隔。

      ①jdbc:<子协议>:<子名称>
      ②协议:JDBC URL中的协议总是jdbc
      ③子协议:子协议用于标识一个数据库驱动程序
      ④子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息

     五、几种常用数据库的JDBC URL

      ①对于 Oracle 数据库连接,采用如下形式:
      jdbc:oracle:thin:@localhost:1521:sid

      ②对于 SQLServer 数据库连接,采用如下形式:
      jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid

      ③对于 MYSQL 数据库连接,采用如下形式:
      jdbc:mysql://localhost:3306/sid

    六、访问数据库

      数据库连接被用于向数据库服务器发送命令和 SQL 语句,在连接建立后,需要对数据库进行访问,执行 sql 语

      在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式:
      ①Statement
      ②PrepatedStatement
      ③CallableStatement

    七、Statement

      通过调用 Connection 对象的 createStatement 方法创建该对象

      该对象用于执行静态的 SQL 语句,并且返回执行结果

      Statement 接口中定义了下列方法用于执行 SQL 语句:
      ①ResultSet excuteQuery(String sql)
      ②int excuteUpdate(String sql)

    八、ResultSet

      通过调用 Statement 对象的 excuteQuery() 方法创建该对象

      ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现

      ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行

      ResultSet 接口的常用方法:

    boolean absolute(int row)
              将光标移动到此 ResultSet 对象的给定行编号。
     void afterLast()
              将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后。
     void beforeFirst()
              将光标移动到此 ResultSet 对象的开头,正好位于第一行之前。
     void cancelRowUpdates()
              取消对 ResultSet 对象中的当前行所作的更新。
     void clearWarnings()
              清除在此 ResultSet 对象上报告的所有警告。
     void close()
              立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
     void deleteRow()
              从此 ResultSet 对象和底层数据库中删除当前行。
     int findColumn(String columnLabel)
              将给定的 ResultSet 列标签映射到其 ResultSet 列索引。
     boolean first()
              将光标移动到此 ResultSet 对象的第一行。
     Array getArray(int columnIndex)
              以 Java 编程语言中 Array 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Array getArray(String columnLabel)
              以 Java 编程语言中 Array 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     InputStream getAsciiStream(int columnIndex)
              以 ASCII 字符流的形式获取此 ResultSet 对象的当前行中指定列的值。
     InputStream getAsciiStream(String columnLabel)
              以 ASCII 字符流的形式获取此 ResultSet 对象的当前行中指定列的值。
     BigDecimal getBigDecimal(int columnIndex)
              以具有全精度的 java.math.BigDecimal 的形式获取此 ResultSet 对象的当前行中指定列的值。
     BigDecimal getBigDecimal(int columnIndex, int scale)
              已过时。  
     BigDecimal getBigDecimal(String columnLabel)
              以具有全精度的 java.math.BigDecimal 的形式获取此 ResultSet 对象的当前行中指定列的值。
     BigDecimal getBigDecimal(String columnLabel, int scale)
              已过时。  
     InputStream getBinaryStream(int columnIndex)
              以未解释字节的流的形式获取此 ResultSet 对象的当前行中指定列的值。
     InputStream getBinaryStream(String columnLabel)
              以未解释的 byte 流的形式获取此 ResultSet 对象的当前行中指定列的值。
     Blob getBlob(int columnIndex)
              以 Java 编程语言中 Blob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Blob getBlob(String columnLabel)
              以 Java 编程语言中 Blob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     boolean getBoolean(int columnIndex)
              以 Java 编程语言中 boolean 的形式获取此 ResultSet 对象的当前行中指定列的值。
     boolean getBoolean(String columnLabel)
              以 Java 编程语言中 boolean 的形式获取此 ResultSet 对象的当前行中指定列的值。
     byte getByte(int columnIndex)
              以 Java 编程语言中 byte 的形式获取此 ResultSet 对象的当前行中指定列的值。
     byte getByte(String columnLabel)
              以 Java 编程语言中 byte 的形式获取此 ResultSet 对象的当前行中指定列的值。
     byte[] getBytes(int columnIndex)
              以 Java 编程语言中 byte 数组的形式获取此 ResultSet 对象的当前行中指定列的值。
     byte[] getBytes(String columnLabel)
              以 Java 编程语言中 byte 数组的形式获取此 ResultSet 对象的当前行中指定列的值。
     Reader getCharacterStream(int columnIndex)
              以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Reader getCharacterStream(String columnLabel)
              以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Clob getClob(int columnIndex)
              以 Java 编程语言中 Clob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Clob getClob(String columnLabel)
              以 Java 编程语言中 Clob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     int getConcurrency()
              获取此 ResultSet 对象的并发模式。
     String getCursorName()
              获取此 ResultSet 对象使用的 SQL 光标的名称。
     Date getDate(int columnIndex)
              以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Date getDate(int columnIndex, Calendar cal)
              以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Date getDate(String columnLabel)
              以 Java 编程语言中的 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Date getDate(String columnLabel, Calendar cal)
              以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     double getDouble(int columnIndex)
              以 Java 编程语言中 double 的形式获取此 ResultSet 对象的当前行中指定列的值。
     double getDouble(String columnLabel)
              以 Java 编程语言中 double 的形式获取此 ResultSet 对象的当前行中指定列的值。
     int getFetchDirection()
              获取此 ResultSet 对象的获取方向。
     int getFetchSize()
              获取此 ResultSet 对象的获取大小。
     float getFloat(int columnIndex)
              以 Java 编程语言中 float 的形式获取此 ResultSet 对象的当前行中指定列的值。
     float getFloat(String columnLabel)
              以 Java 编程语言中 float 的形式获取此 ResultSet 对象的当前行中指定列的值。
     int getHoldability()
              获取此 ResultSet 对象的可保存性
     int getInt(int columnIndex)
              以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
     int getInt(String columnLabel)
              以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
     long getLong(int columnIndex)
              以 Java 编程语言中 long 的形式获取此 ResultSet 对象的当前行中指定列的值。
     long getLong(String columnLabel)
              以 Java 编程语言中 long 的形式获取此 ResultSet 对象的当前行中指定列的值。
     ResultSetMetaData getMetaData()
              获取此 ResultSet 对象的列的编号、类型和属性。
     Reader getNCharacterStream(int columnIndex)
              以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Reader getNCharacterStream(String columnLabel)
              以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     NClob getNClob(int columnIndex)
              以 Java 编程语言中 NClob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     NClob getNClob(String columnLabel)
              以 Java 编程语言中 NClob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     String getNString(int columnIndex)
              以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
     String getNString(String columnLabel)
              以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
     Object getObject(int columnIndex)
              以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
     Object getObject(int columnIndex, Map<String,Class<?>> map)
              以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
     Object getObject(String columnLabel)
              以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
     Object getObject(String columnLabel, Map<String,Class<?>> map)
              以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。
     Ref getRef(int columnIndex)
              以 Java 编程语言中 Ref 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Ref getRef(String columnLabel)
              以 Java 编程语言中 Ref 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     int getRow()
              获取当前行编号。
     RowId getRowId(int columnIndex)
              以 Java 编程语言中 java.sql.RowId 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     RowId getRowId(String columnLabel)
              以 Java 编程语言中 java.sql.RowId 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     short getShort(int columnIndex)
              以 Java 编程语言中 short 的形式获取此 ResultSet 对象的当前行中指定列的值。
     short getShort(String columnLabel)
              以 Java 编程语言中 short 的形式获取此 ResultSet 对象的当前行中指定列的值。
     SQLXML getSQLXML(int columnIndex)
              以 Java 编程语言中 java.sql.SQLXML 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     SQLXML getSQLXML(String columnLabel)
              以 Java 编程语言中 java.sql.SQLXML 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Statement getStatement()
              获取生成此 ResultSet 对象的 Statement 对象。
     String getString(int columnIndex)
              以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
     String getString(String columnLabel)
              以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
     Time getTime(int columnIndex)
              以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Time getTime(int columnIndex, Calendar cal)
              以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Time getTime(String columnLabel)
              以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Time getTime(String columnLabel, Calendar cal)
              以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Timestamp getTimestamp(int columnIndex)
              以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Timestamp getTimestamp(int columnIndex, Calendar cal)
              以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Timestamp getTimestamp(String columnLabel)
              以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     Timestamp getTimestamp(String columnLabel, Calendar cal)
              以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     int getType()
              获取此 ResultSet 对象的类型。
     InputStream getUnicodeStream(int columnIndex)
              已过时。 使用 getCharacterStream 取代 getUnicodeStream
     InputStream getUnicodeStream(String columnLabel)
              已过时。 使用 getCharacterStream 代替
     URL getURL(int columnIndex)
              以 Java 编程语言中 java.net.URL 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     URL getURL(String columnLabel)
              以 Java 编程语言中 java.net.URL 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
     SQLWarning getWarnings()
              获取此 ResultSet 对象上的调用报告的第一个警告。
     void insertRow()
              将插入行的内容插入到此 ResultSet 对象和数据库中。
     boolean isAfterLast()
              获取光标是否位于此 ResultSet 对象的最后一行之后。
     boolean isBeforeFirst()
              获取光标是否位于此 ResultSet 对象的第一行之前。
     boolean isClosed()
              获取此 ResultSet 对象是否已关闭。
     boolean isFirst()
              获取光标是否位于此 ResultSet 对象的第一行。
     boolean isLast()
              获取光标是否位于此 ResultSet 对象的最后一行。
     boolean last()
              将光标移动到此 ResultSet 对象的最后一行。
     void moveToCurrentRow()
              将光标移动到记住的光标位置,通常为当前行。
     void moveToInsertRow()
              将光标移动到插入行。
     boolean next()
              将光标从当前位置向前移一行。
     boolean previous()
              将光标移动到此 ResultSet 对象的上一行。
     void refreshRow()
              用数据库中的最近值刷新当前行。
     boolean relative(int rows)
              按相对行数(或正或负)移动光标。
     boolean rowDeleted()
              获取是否已删除某行。
     boolean rowInserted()
              获取当前行是否已有插入。
     boolean rowUpdated()
              获取是否已更新当前行。
     void setFetchDirection(int direction)
              设置此 ResultSet 对象中行的处理方向。
     void setFetchSize(int rows)
              为 JDBC 驱动程序设置此 ResultSet 对象需要更多行时应该从数据库获取的行数。
     void updateArray(int columnIndex, Array x)
              用 java.sql.Array 值更新指定列。
     void updateArray(String columnLabel, Array x)
              用 java.sql.Array 值更新指定列。
     void updateAsciiStream(int columnIndex, InputStream x)
              用 ascii 流值更新指定的列。
     void updateAsciiStream(int columnIndex, InputStream x, int length)
              用 ascii 流值更新指定列,该列将具有指定字节数。
     void updateAsciiStream(int columnIndex, InputStream x, long length)
              用 ascii 流值更新指定的列,该值将具有指定的字节数。
     void updateAsciiStream(String columnLabel, InputStream x)
              用 ascii 流值更新指定列。
     void updateAsciiStream(String columnLabel, InputStream x, int length)
              用 ascii 流值更新指定列,该列具有指定的字节数。
     void updateAsciiStream(String columnLabel, InputStream x, long length)
              用 ascii 流值更新指定的列,该值将具有指定的字节数。
     void updateBigDecimal(int columnIndex, BigDecimal x)
              用 java.math.BigDecimal 值更新指定列。
     void updateBigDecimal(String columnLabel, BigDecimal x)
              用 java.sql.BigDecimal 值更新指定列。
     void updateBinaryStream(int columnIndex, InputStream x)
              用二进制流值更新指定的列。
     void updateBinaryStream(int columnIndex, InputStream x, int length)
              用二进制流值更新指定列,该列将具有指定字节数。
     void updateBinaryStream(int columnIndex, InputStream x, long length)
              用二进制流值更新指定的列,该值将具有指定的字节数。
     void updateBinaryStream(String columnLabel, InputStream x)
              用二进制流值更新指定列。
     void updateBinaryStream(String columnLabel, InputStream x, int length)
              用二进制流值更新指定列,该列具有指定的字节数。
     void updateBinaryStream(String columnLabel, InputStream x, long length)
              用二进制流值更新指定的列,该值将具有指定的字节数。
     void updateBlob(int columnIndex, Blob x)
              用 java.sql.Blob 值更新指定列。
     void updateBlob(int columnIndex, InputStream inputStream)
              使用给定输入流值更新指定列。
     void updateBlob(int columnIndex, InputStream inputStream, long length)
              使用给定输入流更新指定的列,该流将具有指定的字节数。
     void updateBlob(String columnLabel, Blob x)
              用 java.sql.Blob 值更新指定列。
     void updateBlob(String columnLabel, InputStream inputStream)
              使用给定输入流值更新指定列。
     void updateBlob(String columnLabel, InputStream inputStream, long length)
              使用给定输入流更新指定列,该流将具有指定的字节数。
     void updateBoolean(int columnIndex, boolean x)
              用 boolean 值更新指定列。
     void updateBoolean(String columnLabel, boolean x)
              用 boolean 值更新指定列。
     void updateByte(int columnIndex, byte x)
              用 byte 值更新指定列。
     void updateByte(String columnLabel, byte x)
              用 byte 值更新指定列。
     void updateBytes(int columnIndex, byte[] x)
              用 byte 数组值更新指定列。
     void updateBytes(String columnLabel, byte[] x)
              用字节数组值更新指定列。
     void updateCharacterStream(int columnIndex, Reader x)
              用字符流值更新指定的列。
     void updateCharacterStream(int columnIndex, Reader x, int length)
              用字符流值更新指定列,该列将具有指定字节数。
     void updateCharacterStream(int columnIndex, Reader x, long length)
              用字符流值更新指定的列,该值将具有指定的字节数。
     void updateCharacterStream(String columnLabel, Reader reader)
              用字符流值更新指定列。
     void updateCharacterStream(String columnLabel, Reader reader, int length)
              用字符流值更新指定列,该列具有指定的字节数。
     void updateCharacterStream(String columnLabel, Reader reader, long length)
              用字符流值更新指定的列,该值将具有指定的字节数。
     void updateClob(int columnIndex, Clob x)
              用 java.sql.Clob 值更新指定列。
     void updateClob(int columnIndex, Reader reader)
              使用给定的 Reader 对象更新指定列。
     void updateClob(int columnIndex, Reader reader, long length)
              使用给定的 Reader 对象更新指定列,该对象是给定的字符长度数目。
     void updateClob(String columnLabel, Clob x)
              用 java.sql.Clob 值更新指定列。
     void updateClob(String columnLabel, Reader reader)
              使用给定的 Reader 对象更新指定列。
     void updateClob(String columnLabel, Reader reader, long length)
              使用给定的 Reader 对象更新指定列,该对象是给定的字符长度数目。
     void updateDate(int columnIndex, Date x)
              用 java.sql.Date 值更新指定列。
     void updateDate(String columnLabel, Date x)
              用 java.sql.Date 值更新指定列。
     void updateDouble(int columnIndex, double x)
              用 double 值更新指定列。
     void updateDouble(String columnLabel, double x)
              用 double 值更新指定列。
     void updateFloat(int columnIndex, float x)
              用 float 值更新指定列。
     void updateFloat(String columnLabel, float x)
              用 float 值更新指定列。
     void updateInt(int columnIndex, int x)
              用 int 值更新指定列。
     void updateInt(String columnLabel, int x)
              用 int 值更新指定列。
     void updateLong(int columnIndex, long x)
              用 long 值更新指定列。
     void updateLong(String columnLabel, long x)
              用 long 值更新指定列。
     void updateNCharacterStream(int columnIndex, Reader x)
              用字符流值更新指定的列。
     void updateNCharacterStream(int columnIndex, Reader x, long length)
              用字符流值更新指定的列,该值将具有指定的字节数。
     void updateNCharacterStream(String columnLabel, Reader reader)
              用字符流值更新指定的列。
     void updateNCharacterStream(String columnLabel, Reader reader, long length)
              用字符流值更新指定的列,该值将具有指定的字节数。
     void updateNClob(int columnIndex, NClob nClob)
              用 java.sql.NClob 值更新指定的列。
     void updateNClob(int columnIndex, Reader reader)
              使用给定的 Reader 对象更新指定列。
     void updateNClob(int columnIndex, Reader reader, long length)
              使用给定的 Reader 对象更新指定的列,该对象是给定的字符长度数目。
     void updateNClob(String columnLabel, NClob nClob)
              用 java.sql.NClob 值更新指定的列。
     void updateNClob(String columnLabel, Reader reader)
              使用给定的 Reader 对象更新指定列。
     void updateNClob(String columnLabel, Reader reader, long length)
              使用给定的 Reader 对象更新指定的列,该对象是给定的字符长度数目。
     void updateNString(int columnIndex, String nString)
              用 String 值更新指定的列。
     void updateNString(String columnLabel, String nString)
              用 String 值更新指定的列。
     void updateNull(int columnIndex)
              用 null 值更新指定列。
     void updateNull(String columnLabel)
              用 null 值更新指定列。
     void updateObject(int columnIndex, Object x)
              用 Object 值更新指定列。
     void updateObject(int columnIndex, Object x, int scaleOrLength)
              用 Object 值更新指定列。
     void updateObject(String columnLabel, Object x)
              用 Object 值更新指定列。
     void updateObject(String columnLabel, Object x, int scaleOrLength)
              用 Object 值更新指定列。
     void updateRef(int columnIndex, Ref x)
              用 java.sql.Ref 值更新指定列。
     void updateRef(String columnLabel, Ref x)
              用 java.sql.Ref 值更新指定列。
     void updateRow()
              用此 ResultSet 对象的当前行的新内容更新底层数据库。
     void updateRowId(int columnIndex, RowId x)
              用 RowId 值更新指定列。
     void updateRowId(String columnLabel, RowId x)
              用 RowId 值更新指定的列。
     void updateShort(int columnIndex, short x)
              用 short 值更新指定列。
     void updateShort(String columnLabel, short x)
              用 short 值更新指定列。
     void updateSQLXML(int columnIndex, SQLXML xmlObject)
              用 java.sql.SQLXML 值更新指定列。
     void updateSQLXML(String columnLabel, SQLXML xmlObject)
              用 java.sql.SQLXML 值更新指定的列。
     void updateString(int columnIndex, String x)
              用 String 值更新指定列。
     void updateString(String columnLabel, String x)
              用 String 值更新指定列。
     void updateTime(int columnIndex, Time x)
              用 java.sql.Time 值更新指定列。
     void updateTime(String columnLabel, Time x)
              用 java.sql.Time 值更新指定列。
     void updateTimestamp(int columnIndex, Timestamp x)
              用 java.sql.Timestamp 值更新指定列。
     void updateTimestamp(String columnLabel, Timestamp x)
              用 java.sql.Timestamp 值更新指定列。
     boolean wasNull()
              报告最后一个读取的列是否具有值 SQL NULL

    九、数据类型转换表

    十、代码示例

      1 package me.jdbc.day02;
      2 
      3 import java.io.IOException;
      4 import java.io.InputStream;
      5 import java.sql.Connection;
      6 import java.sql.Date;
      7 import java.sql.DriverManager;
      8 import java.sql.ResultSet;
      9 import java.sql.SQLException;
     10 import java.sql.Statement;
     11 import java.util.Properties;
     12 
     13 import org.junit.Test;
     14 
     15 public class ReviewTest {
     16 
     17     /**
     18      * 1. ResultSet 封装 JDBC 的查询结果.
     19      */
     20     @Test
     21     public void testResultSet() {
     22 
     23     Connection connection = null;
     24     Statement statement = null;
     25     ResultSet resultSet = null;
     26 
     27     try {
     28         // 1. 获取数据库连接
     29         connection = getConnection();
     30 
     31         // 2. 调用 Connection 对象的 createStatement() 方法获取 Statement 对象
     32         statement = connection.createStatement();
     33 
     34         // 3. 准备 SQL 语句
     35         String sql = "SELECT id, name, email, birth FROM customers";
     36 
     37         // 4. 发送 SQL 语句: 调用 Statement 对象的 executeQuery(sql) 方法.
     38         // 得到结果集对象 ResultSet
     39         resultSet = statement.executeQuery(sql);
     40 
     41         // 5. 处理结果集:
     42         // 5.1 调用 ResultSet 的 next() 方法: 查看结果集的下一条记录是否有效,
     43         // 若有效则下移指针
     44         while (resultSet.next()) {
     45         // 5.2 getXxx() 方法获取具体的列的值.
     46         int id = resultSet.getInt(1);
     47         String name = resultSet.getString(2);
     48         String email = resultSet.getString(3);
     49         Date birth = resultSet.getDate(4);
     50 
     51         System.out.println(id);
     52         System.out.println(name);
     53         System.out.println(email);
     54         System.out.println(birth);
     55 
     56         System.out.println();
     57         }
     58 
     59     } catch (Exception e) {
     60         e.printStackTrace();
     61     } finally {
     62         // 6. 关闭数据库资源
     63         releaseDB(resultSet, statement, connection);
     64     }
     65 
     66     }
     67 
     68     /**
     69      * 1. Statement 是用于操作 SQL 的对象
     70      */
     71     @Test
     72     public void testStatement() {
     73     Connection connection = null;
     74     Statement statement = null;
     75 
     76     try {
     77         // 1. 获取数据库连接
     78         connection = getConnection();
     79 
     80         // 2. 调用 Connection 对象的 createStatement() 方法获取 Statement 对象
     81         statement = connection.createStatement();
     82 
     83         // 3. 准备 SQL 语句
     84         String sql = "UPDATE customers SET name = 'Jerry' WHERE id = 5";
     85 
     86         // 4. 发送 SQL 语句: 调用 Statement 对象的 executeUpdate(sql) 方法
     87         statement.executeUpdate(sql);
     88 
     89     } catch (Exception e) {
     90         e.printStackTrace();
     91     } finally {
     92         // 5. 关闭数据库资源: 由里向外关闭.
     93         releaseDB(null, statement, connection);
     94     }
     95 
     96     }
     97 
     98     public void releaseDB(ResultSet resultSet, Statement statement, Connection connection) {
     99 
    100     if (resultSet != null) {
    101         try {
    102         resultSet.close();
    103         } catch (SQLException e) {
    104         e.printStackTrace();
    105         }
    106     }
    107 
    108     if (statement != null) {
    109         try {
    110         statement.close();
    111         } catch (SQLException e) {
    112         e.printStackTrace();
    113         }
    114     }
    115 
    116     if (connection != null) {
    117         try {
    118         connection.close();
    119         } catch (SQLException e) {
    120         e.printStackTrace();
    121         }
    122     }
    123 
    124     }
    125 
    126     @Test
    127     public void testGetConnection2() throws Exception {
    128 
    129     Connection connection = getConnection();
    130 
    131     System.out.println(connection);
    132     }
    133 
    134     public Connection getConnection() throws IOException, ClassNotFoundException, SQLException {
    135     // 0. 读取 jdbc.properties
    136     /**
    137      * 1). 属性文件对应 Java 中的 Properties 类 
    138      * 2). 可以使用类加载器加载 bin 目录(类路径下)的文件
    139      */
    140     Properties properties = new Properties();
    141     InputStream inStream = ReviewTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    142     properties.load(inStream);
    143 
    144     // 1. 准备获取连接的 4 个字符串: user, password, jdbcUrl, driverClass
    145     String user = properties.getProperty("user");
    146     String password = properties.getProperty("password");
    147     String jdbcUrl = properties.getProperty("jdbcUrl");
    148     String driverClass = properties.getProperty("driverClass");
    149 
    150     // 2. 加载驱动: Class.forName(driverClass)
    151     Class.forName(driverClass);
    152 
    153     // 3. 调用
    154     // DriverManager.getConnection(jdbcUrl, user, password)
    155     // 获取数据库连接
    156     Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
    157     return connection;
    158     }
    159 
    160     /**
    161      * Connection 代表应用程序和数据库的一个连接.
    162      * 
    163      * @throws Exception
    164      * 
    165      */
    166     @Test
    167     public void testGetConnection() throws Exception {
    168     // 1. 准备获取连接的 4 个字符串: user, password, jdbcUrl, driverClass
    169     String user = "root";
    170     String password = "1230";
    171     String jdbcUrl = "jdbc:mysql:///atguigu";
    172     String driverClass = "com.mysql.jdbc.Driver";
    173 
    174     // 2. 加载驱动: Class.forName(driverClass)
    175     Class.forName(driverClass);
    176 
    177     // 3. 调用
    178     // DriverManager.getConnection(jdbcUrl, user, password)
    179     // 获取数据库连接
    180     Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
    181 
    182     System.out.println(connection);
    183     }
    184 
    185 }
    View Code

      其中jdbc.properties在类路径下,需要自己配置

    十一、总结

      java.sql.DriverManager用来装载驱动程序,获取数据库连接。

      java.sql.Connection完成对某一指定数据库的联接

      java.sql.Statement在一个给定的连接中作为SQL执行声明的容器,他包含了两个重要的子类型,我在以后的博文中或详细介绍。     ①Java.sql.PreparedSatement 用于执行预编译的sql声明
      ②Java.sql.CallableStatement用于执行数据库中存储过程的调用

      java.sql.ResultSet对于给定声明取得结果的途径

    如果,您对我的这篇博文有什么疑问,欢迎评论区留言,大家互相讨论学习。
    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
    如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
    如果,您对我的博文感兴趣,可以关注我的后续博客,我是【AlbertRui】。

    转载请注明出处和链接地址,欢迎转载,谢谢!

  • 相关阅读:
    Solution -「ARC 126E」Infinite Operations
    toString()、String.valueOf、(String)强转,有啥区别?
    Win10下python3和python2同时安装并解决pip共存问题
    3295. 星际旅行(计算几何)
    计算几何基础(入土)知识
    (淀粉质)P2634 [国家集训队]聪聪可可 and P3806 多次离线查询树上距离为k的点对是否存在
    企业微信 之员工报餐
    PHP 之tp5导出到Excel并下载
    小程序 之安全问题考虑
    PHP 之上传网络图片到微信临时素材
  • 原文地址:https://www.cnblogs.com/albertrui/p/8410749.html
Copyright © 2020-2023  润新知