MySQL系列-使用JDBC操作MySQL常用資料型別
那麼這些資料對應的java型別是那些呢,又該如何使用jdbc進行操作呢?
1.插入和獲取日期型別
表的設計如下
表中資料如下:
如何從結果集中獲取這些型別的資料呢?
第一個date型別,我們可以使用getDate()方法獲取。例如:
Date d = resultSet.getDate(1);//返回 java.sql.Date 但是 java.sql.Date extends java.util.Date
列印結果為2018-06-07,無論是java.sql.Date 或者 java.util.Date 獲取的都是這個結果,且都沒有時間部分
第二個型別time,我們可以使用getTime()方法:
Time t = resultSet.getTime(2);//java.sql.Time
列印結果為20:24:13
第三個和第四個一樣,如何獲取呢,getDate()方法是不行的,只會返回日期部分而沒有時間部分,我們可以使用getObject()方法先獲取這個資料物件,然後進行強制型別轉換,且只能轉換為java.util.Date型別,因為java.sql.Date只能包含日期部分:
Date d2 = (Date) resultSet.getObject(3);//獲取物件進行強轉 得到 2018-06-07 20:24:16.0
Date d3 = (Date) resultSet.getObject(4);//獲取物件進行強轉 得到 2018-06-08 00:19:44.0
第五個用int型別就可以了:
int y = set.getInt(5);//year 型別的話直接獲取int型別就可以了
列印結果為2018
如何插入這些型別的資料呢?怎麼獲取就怎麼插入就行了:
state.setDate(1,new java.sql.Date(new Date().getTime()));
state.setTime(2,new Time(9,6,6));
state.setObject(3,new Date());
state.setObject(4,new Date());
state.setInt(5,2019);
插入資料之後的表:2.插入和獲取整數型別
表的設計如下:
整數型別比較簡單,對於前面四個用getInt()方法就行了,插入的時候用setInt()但是要數值注意範圍。
bigint型別用getLong() 和 setLong()就行。
3.插入和獲取浮點數型別
這個也比較簡單,全都可以用double型別進行獲取,對應decimal型別也可以先獲取Object型別進行強轉為java的BigDecimal型別。
System.out.println(set.getDouble(1));
System.out.println(set.getDouble(2));
System.out.println(set.getDouble(3));
System.out.println((BigDecimal)set.getObject(3));
4.插入和獲取字串型別
全部都使用String型別來操作是沒問題的,但是對於text型別到longtext型別來說,資料可能非常大,直接轉化成String型別讀入記憶體當中是不現實的,我們可以使用io流對大的資料進行操作。
用字元流進行大文字插入:
File file = new File("E:/桌面/1.txt");//windows下用 / \ 作為分割符都可以
FileReader reader = new FileReader(file);
state.setCharacterStream(1,reader,file.length());//設定為字元流型別
用字元流進行大文字的獲取:
Reader reader = set.getCharacterStream(1);
FileWriter writer = new FileWriter("E:/桌面/2.txt");
try {
int len;
char buff[] = new char[1024];
while ((len = reader.read(buff)) > 0) {
writer.write(buff, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(reader!=null) {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(writer!=null) {
try {
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
java關流確實有點煩,但是還是必須這樣做,或者我們可以使用java7的自動資源關閉,關於Java7、java8、java9、java10....我會在新的部落格中進行專門的講解。(我也是結合書籍和資料邊學邊講,順便吐槽一句,可能是Oracle意識到了危機吧,java現在半年一更,233333)
try( Reader reader = set.getCharacterStream(1);
FileWriter writer = new FileWriter("E:/桌面/2.txt");) {
int len;
char buff[] = new char[1024];
while ((len = reader.read(buff)) > 0) {
writer.write(buff, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
5.插入和獲取二進位制型別
和上面的大文字操作一樣,我們要用流進行操作。這個在開發中不會用的,但是我們可以用資料庫儲存一些私密照片,不是專業人員也取不出來 233333
插入一張圖片:
File file = new File("E:/桌面/j.png");
FileInputStream fin = new FileInputStream(file);
state.setBinaryStream(1,fin,file.length());
獲取一張圖片,注意這裡要用位元組流,字元型別要用字元流:
try( InputStream in = set.getBinaryStream(1);
FileOutputStream fout = new FileOutputStream("E:/桌面/k.png");) {
int len;
byte buff[] = new byte[1024];
while ((len = in.read(buff)) > 0) {
fout.write(buff, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}