Jdbc常见数据类型及PreparedStatement接口

来源:互联网 发布:永久免费顶级域名 编辑:程序博客网 时间:2024/06/05 19:01

我们使用jdbc在对数据操作的时候我们需要知道数据库里的数据类型和我们的java数据类型是如何对应的,这样存取的时候才不会出现不必要的错误,

我们就拿MySQL为例

类型名称显示长度数据库类型JAVA类型JDBC类型索引(int)描述      VARCHARL+NVARCHARjava.lang.String12 CHARNCHARjava.lang.String1 BLOBL+NBLOBjava.lang.byte[]-4 TEXT65535VARCHARjava.lang.String-1       INTEGER4INTEGER UNSIGNEDjava.lang.Long4 TINYINT3TINYINT UNSIGNEDjava.lang.Integer-6 SMALLINT5SMALLINT UNSIGNEDjava.lang.Integer5 MEDIUMINT8MEDIUMINT UNSIGNEDjava.lang.Integer4 BIT1BITjava.lang.Boolean-7 BIGINT20BIGINT UNSIGNEDjava.math.BigInteger-5 FLOAT4+8FLOATjava.lang.Float7 DOUBLE22DOUBLEjava.lang.Double8 DECIMAL11DECIMALjava.math.BigDecimal3 BOOLEAN1同TINYINT         ID11PK (INTEGER UNSIGNED)java.lang.Long4       DATE10DATEjava.sql.Date91 TIME8TIMEjava.sql.Time92 DATETIME19DATETIMEjava.sql.Timestamp93 TIMESTAMP19TIMESTAMPjava.sql.Timestamp93 YEAR4YEARjava.sql.Date91


红色标注基本就是比较常用的数据类型了、其他的用到的情况并不是很多这个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.      
阅读全文
0 0
原创粉丝点击