1. 程式人生 > >MySQL系列-使用JDBC操作MySQL常用資料型別

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();
                }