Jdbc常見數據類型及PreparedStatement接口

我們使用jdbc在對數據操作的時候我們需要知道數據庫裏的數據類型和我們的java數據類型是如何對應的,這樣存取的時候纔不會出現不必要的錯誤,

我們就拿MySQL爲例

類型名稱 顯示長度 數據庫類型 JAVA類型 JDBC類型索引(int) 描述
           
VARCHAR L+N VARCHAR java.lang.String 12  
CHAR N CHAR java.lang.String 1  
BLOB L+N BLOB java.lang.byte[] -4  
TEXT 65535 VARCHAR java.lang.String -1  
           
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4  
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6  
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5  
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4  
BIT 1 BIT java.lang.Boolean -7  
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5  
FLOAT 4+8 FLOAT java.lang.Float 7  
DOUBLE 22 DOUBLE java.lang.Double 8  
DECIMAL 11 DECIMAL java.math.BigDecimal 3  
BOOLEAN 1 同TINYINT      
           
ID 11 PK (INTEGER UNSIGNED) java.lang.Long 4  
           
DATE 10 DATE java.sql.Date 91  
TIME 8 TIME java.sql.Time 92  
DATETIME 19 DATETIME java.sql.Timestamp 93  
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93  
YEAR 4 YEAR java.sql.Date 91


紅色標註基本就是比較常用的數據類型了、其他的用到的情況並不是很多這個BLOB是用於存儲二進制的比如圖片什麼的


我們主要來說一下這個DATE和BLOB這兩個數據類型


日期類型DATE

這裏我們要注意jdbc數據庫裏面日期類型如果是date那麼他返回的java就應該是個java.sql.Date類型的

而Java.sql.Date是java.util.Date的子類我們不要混爲一談

Java.sql.Date 是不帶有時間的

java.util.Date是帶有時間的

如果我們錯誤的將java.util.Date 存到DATE數據類型裏那麼時間他就丟失了這個要格外注意

那我們如果要保持時間我們應該怎麼辦呢

setTimestamp 我們使用這個方法來存 他會將時間自動轉換爲TIMESTAMP這個類型


我們來看一下例子


[java] view plain copy
  1. <pre name="code" class="java">public void insertTimeStamp() throws SQLException {  
  2.         Connection conn = null;  
  3.         //注意這個接口  
  4.         PreparedStatement stmt = null;  
  5.         ResultSet rs = null;  
  6.         try {  
  7.             conn = ConnCreate.getConnection("jdbc:mysql://localhost:3306/test",  
  8.                     "root""r66t");  
  9.             //注意這個sql 我們使用了一個?作爲一個佔位符  
  10.             String sql = "insert into user(id,name,birthday,money) values(5,'zhaowu',?,13000.00)";  
  11.             stmt = conn.prepareStatement(sql);  
  12.             //我們在這裏爲這個佔位符替換了值、他是按照1.2.3.4的順序來進行替換的  
  13.             stmt.setTimestamp(1new Timestamp(System.currentTimeMillis()));  
  14.             stmt.execute();  
  15.         } finally {  
  16.             ConnCreate.close(conn, stmt, rs);  
  17.         }  
  18.     }</pre><br>  
  19. <br>  
  20. <pre></pre>  
  21. <p></p>  
  22. <pre></pre>  
  23. <p></p>  
  24. <p>這個結果我就不給大家貼上來了、自己可以去試一下我們可以PreparedStatement 這個接口在這裏被我使用了、我建議大家永遠都不要使用Statement這個藉口而使用我們PreparedStatement這個接口、原因有很多比如他是預編譯的執行速度比Statement要快,他繼承了Statement所有的方法還額外擴展了一些方法,還有使用它有利於我們的代碼可讀和可維護性。</p>  
  25. <p>同時我們使用參數化查詢、不必每次都發送sql語句、從而減小數據庫的壓力、而他的使用方法和Statement是一樣只是多了一個設置參數的步驟、相關的方法可以自己去查看一下文檔即可。</p>  
  26. <p></p>  
  27. <p>最後我們貼一個BLOB類型的代碼</p>  
  28. <p></p>  
  29. <p></p>  
  30. <pre name="code" class="java">public void insertBlob() throws SQLException, IOException {  
  31.         Connection conn = null;  
  32.         PreparedStatement stmt = null;  
  33.         ResultSet rs = null;  
  34.         try {  
  35.             conn = ConnCreate.getConnection(  
  36.                     "jdbc:mysql://192.168.1.153:3306/bpf_test""root",  
  37.                     "123456");  
  38.             String sql = "insert into blob_test(id,info) values(?,?)";  
  39.             stmt = conn.prepareStatement(sql);  
  40.             stmt.setInt(13);  
  41.             File file = new File(  
  42.                     "e:\\kt_000091.jpg");  
  43.             FileInputStream fis = new FileInputStream(file);  
  44.             stmt.setBinaryStream(2, fis, (int) file.length());  
  45.             stmt.execute();  
  46.             fis.close();  
  47.         } finally {  
  48.             ConnCreate.closeConnection(conn, stmt, rs);  
  49.         }  
  50.     }  
  51.   
  52.     public void queryBlob() throws SQLException, IOException {  
  53.         Connection conn = null;  
  54.         PreparedStatement stmt = null;  
  55.         ResultSet rs = null;  
  56.         try {  
  57.             conn = ConnCreate.getConnection(  
  58.                     "jdbc:mysql://192.168.1.153:3306/bpf_test""root",  
  59.                     "123456");  
  60.             String sql = "select info from blob_test where id=3";  
  61.             stmt = conn.prepareStatement(sql);  
  62.             rs = stmt.executeQuery();  
  63.             if (rs.next()) {  
  64.                 InputStream is = rs.getBinaryStream(1);  
  65.                 File file = new File("e:\\a.jpg");  
  66.                 OutputStream os = new FileOutputStream(file);  
  67.                 int len = 0;  
  68.                 byte[] buffers = new byte[1024];  
  69.                 while ((len = is.read(buffers)) > 0) {  
  70.                     os.write(buffers, 0, len);  
  71.                 }  
  72.                 os.flush();  
  73.                 os.close();  
  74.                 is.close();  
  75.             }  
  76.         } finally {  
  77.             ConnCreate.closeConnection(conn, stmt, rs);  
  78.         }  
  79.     }</pre>  
  80. <pre></pre>  
  81. <p>它用來將我們的圖片等轉化爲二進制的形式存放在數據庫裏面、我們怎麼存進去的只要按照規則在讀取出來就可以了。</p>  
  82. <p>這裏我們jdbc的一些基本操作就已經說完了、我們在實際項目中還有很多比如如何開啓事物、調用存儲過程等等、以後記錄。</p>  
  83.      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章