比如我们在数据库里的某一列存储了一个大数据:这时会出现种种错误
下面以Mysql为例对这个错误进行解决:
Connection conn=JDBCUtils.geyConnection();
PreparedStatement ps = conn.prepareStament("insert into textdemo values(null,?,?)");
ps.setString(1,"大数据.txt");
File file = new File("读取的文件的名字.txt");
ps.setCharacterStream(2,new FileReader("file"),file.length());
ps.excuteUpdate();
解决方案:file.length()返回类型是long 但是setCharacterStream中如果要传入long型的数据 是从JDK1.6之后开始的
不幸的是,我们的MySql的驱动没有更新那么快,没有对这个方法进行实现,所以我们并不能用这个方法,所以需要强转为int。
但这是会抛出一个新的错误(不是异常),内存溢出Java heap space。此时在run的下拉箭头下面会有一个Run Configurations(10.5版本)
其他版本可能不叫这个,但是出现位置是一样的。点击Arguments在VM arguments(参数)下面写入-Xms64m(换行)-Xmx256m 搞定。
这时会出现一个新的异常,也就是包太大的异常。因为数据库和程序之间进行数据传输,以数据包进行传输。传输数据的最大值
大于数据包的最大值,也就是这个读取的文件的大小太大。这是需要修改数据库的配置,修改他的默认大小。打开my.ini(笔者用的5.0,相对纯净一点)
大多数人可能用的版本比这个高,里面没有my.ini。自行百度一下,对应的是哪一个文件。在port=3306下一行加入max_allowed_packet=64M即可
问题成功解决。因为修改了配置文件,记得重启数据库啊。
关于大数据LOB(Large Object):Text叫做大文本,二进制数据叫做Blob。Text是mysql中的叫法,Oracle中叫做Clob
下面以Mysql为例对这个错误进行解决:
Connection conn=JDBCUtils.geyConnection();
PreparedStatement ps = conn.prepareStament("insert into textdemo values(null,?,?)");
ps.setString(1,"大数据.txt");
File file = new File("读取的文件的名字.txt");
ps.setCharacterStream(2,new FileReader("file"),file.length());
ps.excuteUpdate();
解决方案:file.length()返回类型是long 但是setCharacterStream中如果要传入long型的数据 是从JDK1.6之后开始的
不幸的是,我们的MySql的驱动没有更新那么快,没有对这个方法进行实现,所以我们并不能用这个方法,所以需要强转为int。
但这是会抛出一个新的错误(不是异常),内存溢出Java heap space。此时在run的下拉箭头下面会有一个Run Configurations(10.5版本)
其他版本可能不叫这个,但是出现位置是一样的。点击Arguments在VM arguments(参数)下面写入-Xms64m(换行)-Xmx256m 搞定。
这时会出现一个新的异常,也就是包太大的异常。因为数据库和程序之间进行数据传输,以数据包进行传输。传输数据的最大值
大于数据包的最大值,也就是这个读取的文件的大小太大。这是需要修改数据库的配置,修改他的默认大小。打开my.ini(笔者用的5.0,相对纯净一点)
大多数人可能用的版本比这个高,里面没有my.ini。自行百度一下,对应的是哪一个文件。在port=3306下一行加入max_allowed_packet=64M即可
问题成功解决。因为修改了配置文件,记得重启数据库啊。
关于大数据LOB(Large Object):Text叫做大文本,二进制数据叫做Blob。Text是mysql中的叫法,Oracle中叫做Clob