【发布时间】:2019-06-19 19:40:11
【问题描述】:
我正在使用 BufferedWriter 将数据发送到数据库,(我知道这并不是它的真正含义......不要问。基本上我需要登录到数据库但缓冲数据,以便我们不要以严重的瓶颈告终)并且我遇到了一个问题,即作者会在尴尬的地方(比如在插入语句的中间)分解数据,这显然会导致错误。有没有办法强制作者只发送完整的数据块?还是我能做的只是调用 .write 看看会发生什么? (设置字节大小无济于事,因为不同类型的插入语句有很多选项)
//insertArray is a char[] that's being sent to BufferedWriter's .write method.
//It contains the information for one record. (I know this is not ideal because of sql injection,
//and I would prefer to send a prepared statement, but I'm using SQLlite which apparently doesn't support conversion of prepared statements to strings).
private void callInsert() {
try {
writer.write(insertArray, 0, insertArray.length);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然后,我的类中的 .write 方法打开一个数据库连接,并将它拥有的任何数据作为一个长语句发送: 像这样:
insert into students(fname, lname, id) values(('Bob', 'Green', '5), ('Jake', 'Klein', '7'));
理想情况下,我想在写入前最后一次完整插入后截断数据,然后将其余数据添加到下一次写入。我目前的问题是我 最终可能是这样的:
insert into students(fname, lname, id) values(('Bob', 'Green', '5), ('Jake', 'Klein
如果 BufferedWriter 所以选择在那里分解它。
【问题讨论】:
-
我们来看一些代码
-
这里是主要的XY problem。改变 BufferedWriter 写入数据的方式并不是一个好的攻击计划。向我们展示您的代码。给我们上下文。我保证那里有更好的答案。
-
老实说,这只是与数据库交互的一种糟糕方式。通过网络发送查询并让它分块读取它们是荒谬的。
-
呃...你为什么不用jdbc之类的?
-
@LouisWasserman 为什么?如果每次我有数据要插入我都必须将数据发送到数据库,这似乎有点低效......等到我有一堆数据并一次插入它们不是更有意义吗?
标签: java sqlite bufferedwriter