Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何强制BufferedWriter在特定位置分解数据?_Java_Sqlite_Bufferedwriter - Fatal编程技术网

Java 如何强制BufferedWriter在特定位置分解数据?

Java 如何强制BufferedWriter在特定位置分解数据?,java,sqlite,bufferedwriter,Java,Sqlite,Bufferedwriter,我使用BufferedWriter将数据发送到数据库(我知道这并不是它真正的目的…不要问。基本上我需要登录到数据库,但要缓冲数据,这样我们就不会出现重大瓶颈),我遇到了这样的问题,即编写器会在不方便的地方分解数据(就像在insert语句的中间)这显然会导致错误。有没有办法强迫编写器只发送完整的数据块?或者我所能做的就是调用。编写并查看会发生什么?(设置字节大小没有帮助,因为不同类型的insert语句有很多选项) 然后,我的类中的.write方法打开一个数据库连接,并将其包含的任何数据作为一条长语

我使用BufferedWriter将数据发送到数据库(我知道这并不是它真正的目的…不要问。基本上我需要登录到数据库,但要缓冲数据,这样我们就不会出现重大瓶颈),我遇到了这样的问题,即编写器会在不方便的地方分解数据(就像在insert语句的中间)这显然会导致错误。有没有办法强迫编写器只发送完整的数据块?或者我所能做的就是调用。编写并查看会发生什么?(设置字节大小没有帮助,因为不同类型的insert语句有很多选项)

然后,我的类中的.write方法打开一个数据库连接,并将其包含的任何数据作为一条长语句发送进来: 像这样:

在学生中插入(fname,lname,id)值(('Bob','Green','5),('Jake','Klein','7');
理想情况下,我希望在写入前的最后一次完整插入之后截断数据,然后将其余数据添加到下一次写入 结果可能是:

在学生中插入(fname,lname,id)值(('Bob','Green','5),('Jake','Klein

如果BufferedWriter选择将其拆分。

当您向
BufferedWriter
写入时,它只会将您的写入保存在缓冲区中。在其选择的某个点,它会将数据发送到底层字符流。您无法控制何时发生这种情况,但可以告诉它刷新。如果您得到将部分数据放在流的另一端,这表明其余数据放在缓冲区中

所以你的选择是

  • 完成查询后刷新
    BufferedWriter
    (但是如果这对您有效,您从缓冲中获得了什么好处?)
  • 用户是一个没有缓冲的普通
    编写器
    ——数据一写就发送(但这不是你通常与数据库交谈的方式,那么你从字符流中得到了什么好处?)
  • 根本不要使用
    Writer
    ——JDBC是与数据库或其周围的一些包装器(如JPA或Hibernate)通信的常用方式

你说你的数据库写操作是一个瓶颈。如果你有很多小的写操作,缓冲可以提高性能:它们以较大的块发送。但是如果你有大量数据要发送,缓冲对你没有帮助。

当你向
BufferedWriter
写操作时,它只会将你的写操作保存在缓冲区中。在它选择的某个点上t将数据发送到底层字符流。您无法控制何时发生这种情况,但可以告诉它刷新。如果您在流的另一端获取部分数据,则表明其余数据位于缓冲区中

所以你的选择是

  • 完成查询后刷新
    BufferedWriter
    (但是如果这对您有效,您从缓冲中获得了什么好处?)
  • 用户是一个没有缓冲的普通
    编写器
    ——数据一写就发送(但这不是你通常与数据库交谈的方式,那么你从字符流中得到了什么好处?)
  • 根本不要使用
    Writer
    ——JDBC是与数据库或其周围的一些包装器(如JPA或Hibernate)通信的常用方式

你说你的数据库写入是一个瓶颈。如果你有很多小的写入,缓冲可以提高性能:它们以更大的块发送。但是如果你有大量数据要发送,缓冲对你没有帮助。

让我们看看这里的一些codeMajor。更改BufferedWriter写入数据的方式不是一个好的攻击计划。向我们展示你的代码。给我们上下文。我保证会有更好的答案。老实说,这是一种与数据库交互的糟糕方式。通过网络发送查询并让它分块读取是毫无意义的。呃……你为什么不使用jdbc或其他什么东西?@LouisWasserman为什么?如果每次我都要插入数据,我就必须将数据发送到数据库Database,这似乎有点低效…等到我有了一堆数据,然后一次全部插入,这不是更有意义吗?让我们看看这里的一些codeMajor。更改BufferedWriter写入数据的方式不是一个好的攻击计划。向我们展示您的代码。给我们上下文。我保证有更好的答案。老实说,这只是一个糟糕的方法与数据库交互。通过网络发送查询并让它成批地读取它们是毫无意义的。呃……为什么你不使用jdbc或其他什么?@LouisWasserman为什么?如果每次我有数据要插入时,我都必须将数据发送到数据库,这似乎有点低效……等到我有了bu不是更有意义吗一次插入所有数据?
//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();
    }