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

九、数据类型转换表

十、代码示例

 package me.jdbc.day02;

 import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; import org.junit.Test; public class ReviewTest { /**
* 1. ResultSet 封装 JDBC 的查询结果.
*/
@Test
public void testResultSet() { Connection connection = null;
Statement statement = null;
ResultSet resultSet = null; try {
// 1. 获取数据库连接
connection = getConnection(); // 2. 调用 Connection 对象的 createStatement() 方法获取 Statement 对象
statement = connection.createStatement(); // 3. 准备 SQL 语句
String sql = "SELECT id, name, email, birth FROM customers"; // 4. 发送 SQL 语句: 调用 Statement 对象的 executeQuery(sql) 方法.
// 得到结果集对象 ResultSet
resultSet = statement.executeQuery(sql); // 5. 处理结果集:
// 5.1 调用 ResultSet 的 next() 方法: 查看结果集的下一条记录是否有效,
// 若有效则下移指针
while (resultSet.next()) {
// 5.2 getXxx() 方法获取具体的列的值.
int id = resultSet.getInt(1);
String name = resultSet.getString(2);
String email = resultSet.getString(3);
Date birth = resultSet.getDate(4); System.out.println(id);
System.out.println(name);
System.out.println(email);
System.out.println(birth); System.out.println();
} } catch (Exception e) {
e.printStackTrace();
} finally {
// 6. 关闭数据库资源
releaseDB(resultSet, statement, connection);
} } /**
* 1. Statement 是用于操作 SQL 的对象
*/
@Test
public void testStatement() {
Connection connection = null;
Statement statement = null; try {
// 1. 获取数据库连接
connection = getConnection(); // 2. 调用 Connection 对象的 createStatement() 方法获取 Statement 对象
statement = connection.createStatement(); // 3. 准备 SQL 语句
String sql = "UPDATE customers SET name = 'Jerry' WHERE id = 5"; // 4. 发送 SQL 语句: 调用 Statement 对象的 executeUpdate(sql) 方法
statement.executeUpdate(sql); } catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 关闭数据库资源: 由里向外关闭.
releaseDB(null, statement, connection);
} } public void releaseDB(ResultSet resultSet, Statement statement, Connection connection) { if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
} } @Test
public void testGetConnection2() throws Exception { Connection connection = getConnection(); System.out.println(connection);
} public Connection getConnection() throws IOException, ClassNotFoundException, SQLException {
// 0. 读取 jdbc.properties
/**
* 1). 属性文件对应 Java 中的 Properties 类
* 2). 可以使用类加载器加载 bin 目录(类路径下)的文件
*/
Properties properties = new Properties();
InputStream inStream = ReviewTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(inStream); // 1. 准备获取连接的 4 个字符串: user, password, jdbcUrl, driverClass
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String jdbcUrl = properties.getProperty("jdbcUrl");
String driverClass = properties.getProperty("driverClass"); // 2. 加载驱动: Class.forName(driverClass)
Class.forName(driverClass); // 3. 调用
// DriverManager.getConnection(jdbcUrl, user, password)
// 获取数据库连接
Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
return connection;
} /**
* Connection 代表应用程序和数据库的一个连接.
*
* @throws Exception
*
*/
@Test
public void testGetConnection() throws Exception {
// 1. 准备获取连接的 4 个字符串: user, password, jdbcUrl, driverClass
String user = "root";
String password = "1230";
String jdbcUrl = "jdbc:mysql:///atguigu";
String driverClass = "com.mysql.jdbc.Driver"; // 2. 加载驱动: Class.forName(driverClass)
Class.forName(driverClass); // 3. 调用
// DriverManager.getConnection(jdbcUrl, user, password)
// 获取数据库连接
Connection connection = DriverManager.getConnection(jdbcUrl, user, password); System.out.println(connection);
} }

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

十一、总结

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

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

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

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

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

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

JDBC主要API学习总结的更多相关文章

  1. 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)

    一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...

  2. Servlet 常用API学习(一)

    Servlet常用API学习 一.Servlet体系结构(图片来自百度图片) 二.ServletConfig接口 Servlet在有些情况下可能需要访问Servlet容器或借助Servlet容器访问外 ...

  3. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  4. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  5. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  6. Windows录音API学习笔记(转)

    源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...

  7. NSData所有API学习

      www.MyException.Cn  网友分享于:2015-04-24  浏览:0次   NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上 ...

  8. Node.js API 学习笔记

    常用 API 学习笔记 url 函数 url.parse: 解析 url 地址 url.resolve: 向 url 地址添加或替换字段 url.format: 生成 url 地址 querystri ...

  9. RESTful API 学习

    /********************************************************************************* * RESTful API 学习 ...

随机推荐

  1. 从国际象棋与象棋的走法差异,再趣说IT人提升能力和增收方式

    之前我写过篇博文,用象棋的思维趣说IT人的职业发展和钱途,发现象棋中的一些思维能应用到我们程序员平时的职业发展中. 当从大学毕业的程序员干个五六年以后,也达到了高级开发的水平,工作环境应该能摆脱动荡, ...

  2. HTTP_2_HTTP协议概要

    http协议概要 HTTP 通信对象 通信方式 通信状态 定位资源 节省通信量 超文本传输协议 客户端与服务器端 请求和响应 不保存状态(借助cookie) 请求URI keep-alive/pipe ...

  3. UML同一建模语言

    结构型图:描述系统静态结构,显示系统类之间的静态关系. 行为型图:描述系统的动态属性,显示系统元素如何协作产生满足要求的系统行为. 类图分类名,属性清单,方法清单,性质清单几层 类之间的关系:1 一般 ...

  4. TestNG在Eclipse中运行的几种方法

    目录 1 在Eclipse Outline视图中,点右键run as TestNG Test (不推荐) 2 在Eclipse类编辑界面,直接点击右键run as TestNG Test 3 通过Te ...

  5. (技能篇)双机热备之Oracle切换故障处理

    背景: 以前做的的一个项目中使用了某国产双机热备产品,但是在数据库做双机热备时出现了一些问题,没办法.不得不研究一番了!经过两天的研究终于问题得以解决.将问题处理步骤记录下来以备后用,也希望能帮助到需 ...

  6. zmnXAglTcg

    #include <map>#include <cmath>#include <stack>#include <queue>#include <l ...

  7. Linux常用的命令及使用方法

    1.请用命令查出ifconfig命令程序的绝对路径 [root@localhost ~]# which ifconfig(ifconfig是linux中用于显示或配置网络设备(网络接口卡)的命令) / ...

  8. Java——win10配置环境变量

    一.安装JDK 1.下载jdk                                           地址:https://pan.baidu.com/s/1P9CZZoZ0AzZU0c ...

  9. 夯实Java基础(二)——面向对象之封装

    1.封装介绍 封装封装,见名知意,就是把东西包装隐藏起来,不被外界所看见, 而Java特性封装:是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数 ...

  10. 【JDK】JDK源码分析-CountDownLatch

    概述 CountDownLatch 是并发包中的一个工具类,它的典型应用场景为:一个线程等待几个线程执行,待这几个线程结束后,该线程再继续执行. 简单起见,可以把它理解为一个倒数的计数器:初始值为线程 ...