引導語:JDBC是一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供統一訪問。以下是本站小編分享給大家的`Java面試題JDBC能否處理Blob和Clob,歡迎閱讀學習!
JDBC能否處理Blob和Clob?
答: Blob是指二進制大對象(Binary Large Object),而Clob是指大字符對象(Character Large Objec),因此其中Blob是爲存儲大的二進制數據而設計的,而Clob是爲存儲大的文本數據而設計的。JDBC的PreparedStatement和ResultSet都提供了相應的方法來支持Blob和Clob操作。下面的代碼展示瞭如何使用JDBC操作LOB:
下面以MySQL數據庫爲例,創建一個張有三個字段的用戶表,包括編號(id)、姓名(name)和照片(photo),建表語句如下:
123456 | create table tb_user ( id int primary key auto_increment, name varchar( 20 ) unique not null , photo longblob ); |
下面的Java代碼向數據庫中插入一條記錄:
1234567891011121314151617181920212223242526272829303132333435363738394041 | import InputStream; import ception; import tStream; import ection; import erManager; import aredStatement; import xception; class JdbcLobTest {
public static void main(String[] args) {
Connection con = null ;
try {
// 1. 加載驅動(Java6以上版本可以省略)
ame( "er" );
// 2. 建立連接
con = onnection( "jdbc:mysql://localhost:3306/test" , "root" , "123456" );
// 3. 創建語句對象
PreparedStatement ps = areStatement( "insert into tb_user values (default, ?, ?)" );
tring( 1 , "駱昊" ); // 將SQL語句中第一個佔位符換成字符串
try (InputStream in = new FileInputStream( "test.jpg" )) { // Java 7的TWR
inaryStream( 2 , in); // 將SQL語句中第二個佔位符換成二進制流
// 4. 發出SQL語句獲得受影響行數
tln(uteUpdate() == 1 ? "插入成功" : "插入失敗" );
} catch (IOException e) {
tln( "讀取照片失敗!" );
}
} catch (ClassNotFoundException | SQLException e) { // Java 7的多異常捕獲
tStackTrace();
} finally { // 釋放外部資源的代碼都應當放在finally中保證其能夠得到執行
try {
if (con != null && !osed()) {
e(); // 5. 釋放數據庫連接
con = null ; // 指示垃圾回收器可以回收該對象
}
} catch (SQLException e) {
tStackTrace();
}
}
} } |