Jdbc常见数据类型及PreparedStatement接口

我们使用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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的前端dataTable表格获取数据库中数据的完整代码: HTML文件:index.html ```html <!DOCTYPE html> <html> <head> <title>DataTable表格获取数据库中的数据</title> <!-- 引入必要的CSS和JS文件 --> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.23/datatables.min.css"/> <script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.23/datatables.min.js"></script> <script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script type="text/javascript" src="js/index.js"></script> </head> <body> <table id="dataTable"> <thead> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> </thead> <tbody> </tbody> </table> </body> </html> ``` JavaScript文件:index.js ```javascript $(document).ready(function() { $('#dataTable').DataTable({ "ajax": { "url": "servlet/GetDataServlet", "type": "POST", "dataSrc": "" }, "columns": [ { "data": "id" }, { "data": "name" }, { "data": "age" }, { "data": "gender" } ] }); }); ``` Java Servlet文件:GetDataServlet.java ```java import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; @WebServlet("/GetDataServlet") public class GetDataServlet extends HttpServlet { private static final long serialVersionUID = 1L; private JdbcTemplate jdbcTemplate; public void init() throws ServletException { jdbcTemplate = (JdbcTemplate) getServletContext().getAttribute("jdbcTemplate"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sql = "SELECT * FROM user"; // 查询数据库中的user表 List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class)); // 使用BeanPropertyRowMapper将查询结果自动映射为User对象 String json = new Gson().toJson(userList); // 将List<User>对象转换为JSON字符串 response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); // 将JSON字符串返回给前端 } } ``` Java Bean文件:User.java ```java public class User { private int id; private String name; private int age; private String gender; // 以下是getter和setter方法 // ... } ``` 注:以上代码使用了Spring的JdbcTemplate来连接数据库和查询数据库,需要在web.xml文件中配置JdbcTemplate的Bean。这里不再赘述。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值