暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第7讲:主键回显和Blob类型的处理

何先振 2024-03-15
308

以下文章来源于何先振,责编小何


主键回显



当我们使用JDBC插入数据时,我们的Id如果是自增长的话,插入的时候数据库会自己生成一个主键。


如果我们需要在Java程序中用到这个主键,我们就需要获取数据库生成的主键。


要想在插入数据的时候返回主键,我们就需要在创建PreparedStatement对象的时候,传入一个标识。





这个标识是个1,表示在插入数据时, 会返回对应的主键。





传入标识之后,PreparedStatement对象执行完插入语句就会把主键带出来。


通过调用这个getGenerateKeys方法获取主键的结果集。





在插入成功的代码中,调用此方法获取主键值。





执行程序,成功获取了主键值。








这样就可以在某些业务场景下,需要使用前一张表插入数据的主键值,作为后一张表的依赖关系,就可以通过这种方式获取主键信息。



blob类型的数据处理



MySQL中,blob是一个二进制大型对象,是一个可以存储大量数据的容器。根据可以存的数据大小不同。


可分为:tinyblob、blob、mediumblob、longblob。





插入blob类型的数据必须使用PreparedStatement,因为blob类型的数据无法使用字符串拼接写成。


下面我们就来演示,在用户表中增加一个photo字段,代表用户头像。





我们往用户表插入数据时,就需要插入用户的头像。


首先我们准备一个用来做头像的图片,放到跟src平级的目录下,这样可以使用相对路径获取图片。





新增用户头像时,需要传入一个输入流。这个流中就是存放图片的二进制数据。输入流中指明了图片的相对路径。





执行程序,添加数据成功。





这时候我们就看到blob数据已经被添加进去了。





使用小海豚工具SQLyog还可以双击查看图片信息。





使用setObject也是可以的,传的时候传文件的输入流就行了。








修改blob类型的字段跟新增一样,在设置参数时传个文件的输入流就可以。


下面来演示查询时,如何接收blob类型的数据。


我们查询id为5的这条数据。





编写查询代码,获取blob字段时,会返回一个blob对象。





然后通过blob对象调用方法,得到一个输入流里面就保存了图片的二进制数据。





接下来就可以根据以前学习IO流(Java高级教程中的内容),创建一个输出流将图片数据输出到指定的路径下。





这里的输出流,指定的是相对路径,默认是src同级目录。运行程序,我们就可以看到src目录下生成的这个图片信息了。








注意:


有些老版本的MySQL数据库插入blob类型的数据时会报错:xxxx too large,这时需要在MySQL的安装目录下,找到my.ini文件加上如下的参数配置:


max_allowed_packet=16M。


同时需要重新启动mysql服务器。


处理Blob类型的数据是PreparedStatement接口的第二个好处。


这是因为它可以通过占位符?,把流信息传入到SQL中,而Statement设置参数只能拼串,是无法拼上Blob类型的流对象。


除了这个好处,PreparedStatement还可以高效地进行批量操作。那么如何进行批量操作,下讲我们开始进行学习。



扫码进微信答疑群




点击上方"何先振"关注并选择设为星标
各类IT技术文章不会错过!

文章转载自何先振,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论