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, 已过时。 |
BigDecimal |
getBigDecimal(String columnLabel) 以具有全精度的 java.math.BigDecimal 的形式获取此ResultSet 对象的当前行中指定列的值。 |
BigDecimal |
getBigDecimal(String columnLabel, 已过时。 |
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, 以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。 |
Date |
getDate(String columnLabel) 以 Java 编程语言中的 java.sql.Date 对象的形式获取此ResultSet 对象的当前行中指定列的值。 |
Date |
getDate(String columnLabel, 以 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, 以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。 |
Object |
getObject(String columnLabel) 以 Java 编程语言中 Object 的形式获取此 ResultSet 对象的当前行中指定列的值。 |
Object |
getObject(String columnLabel, 以 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, 以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。 |
Time |
getTime(String columnLabel) 以 Java 编程语言中 java.sql.Time 对象的形式获取此ResultSet 对象的当前行中指定列的值。 |
Time |
getTime(String columnLabel, 以 Java 编程语言中 java.sql.Time 对象的形式获取此 ResultSet 对象的当前行中指定列的值。 |
Timestamp |
getTimestamp(int columnIndex) 以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此ResultSet 对象的当前行中指定列的值。 |
Timestamp |
getTimestamp(int columnIndex, 以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此 ResultSet 对象的当前行中指定列的值。 |
Timestamp |
getTimestamp(String columnLabel) 以 Java 编程语言中 java.sql.Timestamp 对象的形式获取此ResultSet 对象的当前行中指定列的值。 |
Timestamp |
getTimestamp(String columnLabel, 以 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, 用 java.sql.Array 值更新指定列。 |
void |
updateArray(String columnLabel, 用 java.sql.Array 值更新指定列。 |
void |
updateAsciiStream(int columnIndex, 用 ascii 流值更新指定的列。 |
void |
updateAsciiStream(int columnIndex, 用 ascii 流值更新指定列,该列将具有指定字节数。 |
void |
updateAsciiStream(int columnIndex, 用 ascii 流值更新指定的列,该值将具有指定的字节数。 |
void |
updateAsciiStream(String columnLabel, 用 ascii 流值更新指定列。 |
void |
updateAsciiStream(String columnLabel, 用 ascii 流值更新指定列,该列具有指定的字节数。 |
void |
updateAsciiStream(String columnLabel, 用 ascii 流值更新指定的列,该值将具有指定的字节数。 |
void |
updateBigDecimal(int columnIndex, 用 java.math.BigDecimal 值更新指定列。 |
void |
updateBigDecimal(String columnLabel, 用 java.sql.BigDecimal 值更新指定列。 |
void |
updateBinaryStream(int columnIndex, 用二进制流值更新指定的列。 |
void |
updateBinaryStream(int columnIndex, 用二进制流值更新指定列,该列将具有指定字节数。 |
void |
updateBinaryStream(int columnIndex, 用二进制流值更新指定的列,该值将具有指定的字节数。 |
void |
updateBinaryStream(String columnLabel, 用二进制流值更新指定列。 |
void |
updateBinaryStream(String columnLabel, 用二进制流值更新指定列,该列具有指定的字节数。 |
void |
updateBinaryStream(String columnLabel, 用二进制流值更新指定的列,该值将具有指定的字节数。 |
void |
updateBlob(int columnIndex, 用 java.sql.Blob 值更新指定列。 |
void |
updateBlob(int columnIndex, 使用给定输入流值更新指定列。 |
void |
updateBlob(int columnIndex, 使用给定输入流更新指定的列,该流将具有指定的字节数。 |
void |
updateBlob(String columnLabel, 用 java.sql.Blob 值更新指定列。 |
void |
updateBlob(String columnLabel, 使用给定输入流值更新指定列。 |
void |
updateBlob(String columnLabel, 使用给定输入流更新指定列,该流将具有指定的字节数。 |
void |
updateBoolean(int columnIndex, 用 boolean 值更新指定列。 |
void |
updateBoolean(String columnLabel, 用 boolean 值更新指定列。 |
void |
updateByte(int columnIndex, 用 byte 值更新指定列。 |
void |
updateByte(String columnLabel, 用 byte 值更新指定列。 |
void |
updateBytes(int columnIndex, 用 byte 数组值更新指定列。 |
void |
updateBytes(String columnLabel, 用字节数组值更新指定列。 |
void |
updateCharacterStream(int columnIndex, 用字符流值更新指定的列。 |
void |
updateCharacterStream(int columnIndex, 用字符流值更新指定列,该列将具有指定字节数。 |
void |
updateCharacterStream(int columnIndex, 用字符流值更新指定的列,该值将具有指定的字节数。 |
void |
updateCharacterStream(String columnLabel, 用字符流值更新指定列。 |
void |
updateCharacterStream(String columnLabel, 用字符流值更新指定列,该列具有指定的字节数。 |
void |
updateCharacterStream(String columnLabel, 用字符流值更新指定的列,该值将具有指定的字节数。 |
void |
updateClob(int columnIndex, 用 java.sql.Clob 值更新指定列。 |
void |
updateClob(int columnIndex, 使用给定的 Reader 对象更新指定列。 |
void |
updateClob(int columnIndex, 使用给定的 Reader 对象更新指定列,该对象是给定的字符长度数目。 |
void |
updateClob(String columnLabel, 用 java.sql.Clob 值更新指定列。 |
void |
updateClob(String columnLabel, 使用给定的 Reader 对象更新指定列。 |
void |
updateClob(String columnLabel, 使用给定的 Reader 对象更新指定列,该对象是给定的字符长度数目。 |
void |
updateDate(int columnIndex, 用 java.sql.Date 值更新指定列。 |
void |
updateDate(String columnLabel, 用 java.sql.Date 值更新指定列。 |
void |
updateDouble(int columnIndex, 用 double 值更新指定列。 |
void |
updateDouble(String columnLabel, 用 double 值更新指定列。 |
void |
updateFloat(int columnIndex, 用 float 值更新指定列。 |
void |
updateFloat(String columnLabel, 用 float 值更新指定列。 |
void |
updateInt(int columnIndex, 用 int 值更新指定列。 |
void |
updateInt(String columnLabel, 用 int 值更新指定列。 |
void |
updateLong(int columnIndex, 用 long 值更新指定列。 |
void |
updateLong(String columnLabel, 用 long 值更新指定列。 |
void |
updateNCharacterStream(int columnIndex, 用字符流值更新指定的列。 |
void |
updateNCharacterStream(int columnIndex, 用字符流值更新指定的列,该值将具有指定的字节数。 |
void |
updateNCharacterStream(String columnLabel, 用字符流值更新指定的列。 |
void |
updateNCharacterStream(String columnLabel, 用字符流值更新指定的列,该值将具有指定的字节数。 |
void |
updateNClob(int columnIndex, 用 java.sql.NClob 值更新指定的列。 |
void |
updateNClob(int columnIndex, 使用给定的 Reader 对象更新指定列。 |
void |
updateNClob(int columnIndex, 使用给定的 Reader 对象更新指定的列,该对象是给定的字符长度数目。 |
void |
updateNClob(String columnLabel, 用 java.sql.NClob 值更新指定的列。 |
void |
updateNClob(String columnLabel, 使用给定的 Reader 对象更新指定列。 |
void |
updateNClob(String columnLabel, 使用给定的 Reader 对象更新指定的列,该对象是给定的字符长度数目。 |
void |
updateNString(int columnIndex, 用 String 值更新指定的列。 |
void |
updateNString(String columnLabel, 用 String 值更新指定的列。 |
void |
updateNull(int columnIndex) 用 null 值更新指定列。 |
void |
updateNull(String columnLabel) 用 null 值更新指定列。 |
void |
updateObject(int columnIndex, 用 Object 值更新指定列。 |
void |
updateObject(int columnIndex, 用 Object 值更新指定列。 |
void |
updateObject(String columnLabel, 用 Object 值更新指定列。 |
void |
updateObject(String columnLabel, 用 Object 值更新指定列。 |
void |
updateRef(int columnIndex, 用 java.sql.Ref 值更新指定列。 |
void |
updateRef(String columnLabel, 用 java.sql.Ref 值更新指定列。 |
void |
updateRow() 用此 ResultSet 对象的当前行的新内容更新底层数据库。 |
void |
updateRowId(int columnIndex, 用 RowId 值更新指定列。 |
void |
updateRowId(String columnLabel, 用 RowId 值更新指定的列。 |
void |
updateShort(int columnIndex, 用 short 值更新指定列。 |
void |
updateShort(String columnLabel, 用 short 值更新指定列。 |
void |
updateSQLXML(int columnIndex, 用 java.sql.SQLXML 值更新指定列。 |
void |
updateSQLXML(String columnLabel, 用 java.sql.SQLXML 值更新指定的列。 |
void |
updateString(int columnIndex, 用 String 值更新指定列。 |
void |
updateString(String columnLabel, 用 String 值更新指定列。 |
void |
updateTime(int columnIndex, 用 java.sql.Time 值更新指定列。 |
void |
updateTime(String columnLabel, 用 java.sql.Time 值更新指定列。 |
void |
updateTimestamp(int columnIndex, 用 java.sql.Timestamp 值更新指定列。 |
void |
updateTimestamp(String columnLabel, 用 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学习总结的更多相关文章
- 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...
- Servlet 常用API学习(一)
Servlet常用API学习 一.Servlet体系结构(图片来自百度图片) 二.ServletConfig接口 Servlet在有些情况下可能需要访问Servlet容器或借助Servlet容器访问外 ...
- Openstack api 学习文档 & restclient使用文档
Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- Openstack python api 学习文档 api创建虚拟机
Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...
- Windows录音API学习笔记(转)
源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息 结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...
- NSData所有API学习
www.MyException.Cn 网友分享于:2015-04-24 浏览:0次 NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上 ...
- Node.js API 学习笔记
常用 API 学习笔记 url 函数 url.parse: 解析 url 地址 url.resolve: 向 url 地址添加或替换字段 url.format: 生成 url 地址 querystri ...
- RESTful API 学习
/********************************************************************************* * RESTful API 学习 ...
随机推荐
- 从国际象棋与象棋的走法差异,再趣说IT人提升能力和增收方式
之前我写过篇博文,用象棋的思维趣说IT人的职业发展和钱途,发现象棋中的一些思维能应用到我们程序员平时的职业发展中. 当从大学毕业的程序员干个五六年以后,也达到了高级开发的水平,工作环境应该能摆脱动荡, ...
- HTTP_2_HTTP协议概要
http协议概要 HTTP 通信对象 通信方式 通信状态 定位资源 节省通信量 超文本传输协议 客户端与服务器端 请求和响应 不保存状态(借助cookie) 请求URI keep-alive/pipe ...
- UML同一建模语言
结构型图:描述系统静态结构,显示系统类之间的静态关系. 行为型图:描述系统的动态属性,显示系统元素如何协作产生满足要求的系统行为. 类图分类名,属性清单,方法清单,性质清单几层 类之间的关系:1 一般 ...
- TestNG在Eclipse中运行的几种方法
目录 1 在Eclipse Outline视图中,点右键run as TestNG Test (不推荐) 2 在Eclipse类编辑界面,直接点击右键run as TestNG Test 3 通过Te ...
- (技能篇)双机热备之Oracle切换故障处理
背景: 以前做的的一个项目中使用了某国产双机热备产品,但是在数据库做双机热备时出现了一些问题,没办法.不得不研究一番了!经过两天的研究终于问题得以解决.将问题处理步骤记录下来以备后用,也希望能帮助到需 ...
- zmnXAglTcg
#include <map>#include <cmath>#include <stack>#include <queue>#include <l ...
- Linux常用的命令及使用方法
1.请用命令查出ifconfig命令程序的绝对路径 [root@localhost ~]# which ifconfig(ifconfig是linux中用于显示或配置网络设备(网络接口卡)的命令) / ...
- Java——win10配置环境变量
一.安装JDK 1.下载jdk 地址:https://pan.baidu.com/s/1P9CZZoZ0AzZU0c ...
- 夯实Java基础(二)——面向对象之封装
1.封装介绍 封装封装,见名知意,就是把东西包装隐藏起来,不被外界所看见, 而Java特性封装:是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数 ...
- 【JDK】JDK源码分析-CountDownLatch
概述 CountDownLatch 是并发包中的一个工具类,它的典型应用场景为:一个线程等待几个线程执行,待这几个线程结束后,该线程再继续执行. 简单起见,可以把它理解为一个倒数的计数器:初始值为线程 ...