连接多个数据库,获取数据并将数据写入新数据库

时间:2014-06-04 20:21:31

标签: java database sqlite jdbc

所以,我想这应该很简单,但是我在一周前开始使用Java,并且必须在本学期完成一个小团队项目。

我已经有一个程序可以创建数据库,表格并向其中添加数据。这并不难,因为有很多关于这个主题的教程。

现在我必须编写一个程序,它能够连接我的数据库,获取他们的数据并将其合并到一个包含来自其他数据库的所有数据的新的更大的数据库中。 从3天开始,我就无法找到任何帮助...

有人告诉我最简单的方法是将一个数据库放到Java中并将数据复制到第二个数据库,然后他为我写了一些代码:

package Databse;
import java.sql.*;
import java.util.HashMap;
import java.util.Vector;
import java.util.Map;

/**
 *
 * @autho
 */
public class Join {
    public static void main( String args[] ) {
        Connection c;
        Statement stmt;
        try {
            Class.forName("org.sqlite.JDBC");
            c = DriverManager.getConnection("jdbc:sqlite:test.db");
            c.setAutoCommit(false);
            System.out.println("Opened database successfully");

            stmt = c.createStatement();

            Vector<HashMap<String, String>> alleDaten = new Vector<HashMap<String, String>>();

            try (ResultSet rs = stmt.executeQuery( "SELECT * FROM FILE;" )) {
                while ( rs.next() ) {
                    int id = rs.getInt("id");
                    String  name = rs.getString("name");
                    String extension = rs.getString("extension");
                    String  path  = rs.getString("path");
                    String timeStamp = rs.getString("timeStamp");

                    HashMap<String, String> datensatz = new HashMap<String, String>();
                    datensatz.put("name", name);
                    datensatz.put("extension", extension);
                    datensatz.put("path", path );
                    datensatz.put("timestamp", timeStamp);                
                    alleDaten.add(datensatz);            

                } 
            }  
            stmt.close();
            c.close();

        } catch ( ClassNotFoundException | SQLException e ) {
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
            System.exit(0);
        }
        System.out.println("Operation done successfully");
    }

他告诉我,我现在必须遍历向量。 像for(int i = 0 ; i < alleDaten.length ; i++) doInsert(alleDaten[i]);之类的东西 而且我还必须写一个doInsert函数......

我只是不知道我该怎么做以及从哪里开始。 我甚至不知道我应该在谷歌搜索什么来完成这项工作...... 所以有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

如果SqlLite像大多数此类数据库一样工作,则可以打开第二个连接到第二个数据库。

您无需将所有记录都拉入Java集合。当您从源结果集中获取下一条记录时,可以将其插入目标。假设您的第二个连接是&#34; c2&#34;你插入的声明是&#34; stmt2&#34; ... 然后,在循环内部,您可以执行此操作(您不需要首先将所有内容都读入Java集合中。)

 StringBuilder sb = new StringBuilder("insert into MY_DEST_TBL values ");
 //--- Build this into a proper insert SQL

 stmt2 = c2.createStatement();
 stmt2.executeUpdate(sb.toString());

如果你有相当数量的数据,那么你应该使用PreparedStatement和executeBatch()来提高性能,但除非你有问题,否则我不会进入。

我刚刚找到a similar question