Java JDBC 操作二进制数据、日期时间

二进制数据

mysql提供了四种类型来存储二进制数据:

  • TinyBlob    最多可存储255字节
  • Blob   最多可存储65KB
  • MediumBlob    最多可存储16MB
  • LongBlob   最多可存储4GB
 1 //从properties文件中加载数据库配置
 2         Properties properties = new Properties();
 3         InputStream inputStream = Class.forName("test.Test").getResourceAsStream("/mysql.properties");
 4         properties.load(inputStream);
 5 
 6         String driver = properties.getProperty("driver");
 7         String url = properties.getProperty("url");
 8         String user = properties.getProperty("user");
 9         String password = properties.getProperty("password");
10 
11         Class.forName(driver);
12         Connection connection = DriverManager.getConnection(url, user, password);
13         
14         //插入
15         String sql1="insert into test_tb (id,blob_col) values (?,?)";
16         PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
17         InputStream is = new FileInputStream("resource/a.png");
18         preparedStatement1.setInt(1,1);
19         preparedStatement1.setBlob(2,is);  //参数是InputStream型
20         preparedStatement1.executeUpdate();
21 
22         //查询
23         String sql2="select blob_col from test_tb where id=?";
24         PreparedStatement preparedStatement2=connection.prepareStatement(sql2);
25         preparedStatement2.setInt(1,1);
26         ResultSet resultSet = preparedStatement2.executeQuery();
27         if (resultSet.next()){
28             FileOutputStream os=new FileOutputStream("resource/b.png");
29             Blob blob = resultSet.getBlob("blob_col");
30             InputStream binaryStream = blob.getBinaryStream();
31             byte[] data=binaryStream.readAllBytes();
32             os.write(data);
33         }
34 
35         connection.close();

存储的只是文件中的数据,文件名需要使用单独的一列来保存。

一般我们是把文件上传到服务器上,数据库中存储文件路径。如果文件特别小,也可以直接存到数据库中。

日期

mysql中提供了date表示日期,格式:yyyy-mm-dd。

 1 //插入
 2         String sql1 = "insert into test_tb (date_col) values (?)";
 3         PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
 4         Date date1 = new Date(System.currentTimeMillis());  //获取当前日期。使用当前时间的时间戳构造出日期
 5         preparedStatement1.setDate(1,date1);
 6         preparedStatement1.executeUpdate();
 7 
 8         //查询
 9         String sql2 = "select date_col from test_tb";
10         PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);
11         ResultSet resultSet = preparedStatement2.executeQuery();
12         while (resultSet.next()){
13             Date date2 = resultSet.getDate("date_col");
14             System.out.println(date2);
15         }

时间

mysql提供了time表示时间,格式:HH:mm:ss,hh是24小时制。

操作方法和日期的相同,把Date换为Time即可,也是使用System.currentTimeMillis()来构造。

与Date不同的是,Time还可以使用new  java.util.Date().getTime()来构造。java.util.Date()构造的Date对象既包括当前日期,也包括当前时间。getTime()获取的是long型的时间戳。

日期时间

mysql提供了Timestamp来存储日期时间,格式:yyyy-mm-dd  HH:mm:ss。

 1         //插入
 2         String sql1 = "insert into test_tb (timestamp_col) values (?)";
 3         PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
 4         Timestamp timestamp1 = new Timestamp(System.currentTimeMillis());  //也可使用new Date().getTime()来构造
 5         preparedStatement1.setTimestamp(1,timestamp1);
 6         preparedStatement1.executeUpdate();
 7 
 8 
 9         //查询
10         String sql2 = "select timestamp_col from test_tb";
11         PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);
12         ResultSet resultSet = preparedStatement2.executeQuery();
13         while (resultSet.next()){
14             Timestamp timestamps2 = resultSet.getTimestamp("timestamp_col");
15 
16             Date date=new Date(timestamps2.getTime());   //此句的Date是java.util.Date
17             System.out.println(date);  //Sun Aug 18 18:56:35 CST 2019的形式,不友好
18 
19             SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
20             String formatDT = sdf.format(timestamps2); //使用指定的格式来格式化,参数可以是Timestamp、long型的时间戳、Date
21             System.out.println(formatDT);  //2019-08-18 19:06:06
22         }

也可以使用2列来存储,一列存储Date,一列存储Time。

未说明类型的Date、Time、Timestamp,是java.sql包下的。

new Date().getTime()的Date是java.util.Date,默认取当前日期时间,java.sql.Date的构造函数是需要参数的。

猜你喜欢

转载自www.cnblogs.com/chy18883701161/p/11373517.html