java - 用 Java 编写数据库迁移器,内存问题(代码结构?)

标签 java mysql migration structure filemaker

我目前正在尝试使用 JDBC 将数据从 filemaker pro 11 传输到 MySQL。

我已经处理了与每个连接的设置,并且有有效的查询,并将数据安全地插入到 MySQL 中。

  try {
  results =
    query.executeQuery("SELECT \"field one\", \"field two\" from table");


  Connection con = DriverManager.getConnection("jdbc:mysql://website.com/database","user","password");

 // Iterate through the results and print them to standard output

  while (results.next()) {
    String fname = results.getString("field one");
    String lname = results.getString("field two");
  System.out.println("Found user \"" + fname + " " + lname + "\"");
  stmt = con.prepareStatement("INSERT ignore INTO table (idtable, name) values (?, ?)");

  // some of the data I've been provided with is pretty horrific,
  // so inserting safely is of large concern.

  stmt.setString(1, fname);
  stmt.setString(2, lname);
  stmt.executeUpdate();

  }
}
catch (SQLException e) {
  System.out.println("Error retrieving data from database.");
   e.printStackTrace();
  //System.exit(1);
}

这适用于较小的表(4 分钟内约 100,000 条记录),但其中一些表非常非常大,会导致应用程序崩溃 :(。

这需要至少运行一次才能完成全部填充,但之后我可以限制输出以提取上周所做的更改。

我以前在 VB.net 中写过这个,并构建了大插入,但我做了一个转换 - 我真的需要准备语句,因为当前数据库中有各种疯狂的字符。

谢谢,Paul S

 Error: 
 Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.lang.StringCoding$StringDecoder.decode(StringCoding.java:151)
at java.lang.StringCoding.decode(StringCoding.java:191)
at java.lang.String.<init>(String.java:451)
at java.util.jar.Attributes.read(Attributes.java:401)
at java.util.jar.Manifest.read(Manifest.java:199)
at java.util.jar.Manifest.<init>(Manifest.java:69)
at java.util.jar.JarFile.getManifestFromReference(JarFile.java:182)
at java.util.jar.JarFile.getManifest(JarFile.java:163)
at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:710)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:238)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:435)
at com.mysql.jdbc.PreparedStatement.getInstance(PreparedStatement.java:872)
at com.mysql.jdbc.ConnectionImpl.clientPrepareStatement(ConnectionImpl.java:1491)
at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4250)
at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4149)
at datasync2.FMProConnection.companyQuoteInsert(FMProConnection.java:686)
at datasync2.DataSync2View.jButton1ActionPerformed(DataSync2View.java:220)
at datasync2.DataSync2View.access$800(DataSync2View.java:22)
at datasync2.DataSync2View$4.actionPerformed(DataSync2View.java:124)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at         javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
at java.awt.Component.processMouseEvent(Component.java:6268)

最佳答案

您可能需要使用不同的 FileMaker JDBC 驱动程序。我认为 FileMaker 提供的 JDBC 驱动程序不支持流式结果集,这意味着它会将所有数据加载到内存中。

如果您愿意,可以在 http://java.net/projects/woof/ 试用我们的 FileMaker JDBC 驱动程序.它比 FileMaker 提供的驱动程序慢很多,因为它在(慢速)XML Web 发布界面上运行,但它流式传输结果,因此不应耗尽内存。

关于java - 用 Java 编写数据库迁移器,内存问题(代码结构?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7095062/

相关文章:

java - Android并发渲染器设计

Mysql查看变量

mysql - SQL 将值与特定年份的平均值进行比较

mysql - c语言与mysql(如何将mySQL数据库包含到程序中)

ASP.NET 1.1 到 4.0 迁移 : events not working

java - 如何将 Flux<List<T>> 扁平化为 Flux<T>?

java - Android 使用 BroadCastReceiver 阻止传入短信

java - 如何使边界数组索引的右侧正常工作?

git - 如何将gitorious迁移到gitlab仓库

java - 将应用程序迁移到 Java 7 的动机和动机