java - 如何以编程方式在表之间传输大量数据?

标签 java sql-server database servlets

我有两个表,第一个表有 1400 万条数据,第二个表有 150 万条数据。

所以我想知道如何将这些数据传输到另一个表进行规范化? 我如何将某种类型转换为另一种类型,例如:我有一个名为“year”的字段,但它的类型是 varchar,但我希望它是一个整数,我该怎么做?

我考虑过在 java 中使用 JDBC 在循环中执行此操作,但我认为这不是有效的。

// 1.5 million of data
CREATE TABLE dbo.directorsmovies
    (
    movieid    INT NULL,
    directorid INT NULL,
    dname      VARCHAR (500) NULL,
    addition   VARCHAR (1000) NULL
    )

//14 million of data
CREATE TABLE dbo.movies
    (
    movieid      VARCHAR (20) NULL,
    title        VARCHAR (400) NULL,
    mvyear       VARCHAR (100) NULL,
    actorid      VARCHAR (20) NULL,
    actorname    VARCHAR (250) NULL,
    sex          CHAR (1) NULL,
    as_character VARCHAR (1500) NULL,
    languages    VARCHAR (1500) NULL,
    genres       VARCHAR (100) NULL
    )

这是我的新表:

DROP TABLE actor
CREATE TABLE actor (
    id INT PRIMARY KEY IDENTITY,
    name VARCHAR(200) NOT NULL, 
    sex VARCHAR(1) NOT NULL
)

DROP TABLE actor_character
CREATE TABLE actor_character(
    id INT PRIMARY KEY IDENTITY,
    character VARCHAR(100)
)

DROP TABLE director
CREATE TABLE director(
    id INT PRIMARY KEY IDENTITY,
    name VARCHAR(200) NOT NULL,
    addition VARCHAR(150)
)


DROP TABLE movie
CREATE TABLE movie(
    id INT PRIMARY KEY IDENTITY,
    title VARCHAR(200) NOT NULL,
    year INT
)


DROP TABLE language
CREATE TABLE language(
    id INT PRIMARY KEY IDENTITY,
    language VARCHAR (100) NOT NULL
)

DROP TABLE genre
CREATE TABLE genre(
    id INT PRIMARY KEY IDENTITY,
    genre VARCHAR(100) NOT NULL
)

DROP TABLE director_movie
CREATE TABLE director_movie(
    idDirector INT,
    idMovie INT,
    CONSTRAINT fk_director_movie_1 FOREIGN KEY (idDirector) REFERENCES director(id),
    CONSTRAINT fk_director_movie_2 FOREIGN KEY (idMovie) REFERENCES movie(id),
    CONSTRAINT pk_director_movie PRIMARY KEY(idDirector,idMovie)
)

DROP TABLE genre_movie
CREATE TABLE genre_movie(
    idGenre INT,
    idMovie INT,
    CONSTRAINT fk_genre_movie_1 FOREIGN KEY (idMovie) REFERENCES movie(id),
    CONSTRAINT fk_genre_movie_2 FOREIGN KEY (idGenre) REFERENCES genre(id),
    CONSTRAINT pk_genre_movie PRIMARY KEY (idMovie, idGenre)
)

DROP TABLE language_movie
CREATE TABLE language_movie(
    idLanguage INT,
    idMovie INT,
    CONSTRAINT fk_language_movie_1 FOREIGN KEY (idLanguage) REFERENCES language(id),
    CONSTRAINT fk_language_movie_2 FOREIGN KEY (idMovie) REFERENCES movie(id),
    CONSTRAINT pk_language_movie PRIMARY KEY (idLanguage, idMovie)  
)

DROP TABLE movie_actor
CREATE TABLE movie_actor(
    idMovie INT,
    idActor INT,
    CONSTRAINT fk_movie_actor_1 FOREIGN KEY (idMovie) REFERENCES movie(id),
    CONSTRAINT fk_movie_actor_2 FOREIGN KEY (idActor) REFERENCES actor(id),
    CONSTRAINT pk_movie_actor PRIMARY KEY (idMovie,idActor)
)

更新: 我正在使用 SQL Server 2008。 对不起伙计们,我忘了说这是不同的数据库:

未归一化的调用disciplinedb,我的归一化调用imdb。

最好的问候, 瓦尔特·恩里克。

最佳答案

如果两个表都在同一个数据库中,那么最有效的传输是在数据库中完成所有操作,最好是通过发送 SQL 语句在数据库中执行。

应避免将数据从 d/b 服务器移动到其他地方,然后返回到 d/b 服务器,除非有理由只能在服务器外进行转换。如果目的地是不同的服务器,那么这就不是什么问题了。

关于java - 如何以编程方式在表之间传输大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5639655/

相关文章:

sql - MSSQL 中带删除表的双循环

c# - 将时间转换为易于阅读的字符串

asp.net - 如何将分离的数据存储到数据库中的最有效方法

mysql - 使用 mysql join 显示不匹配值

java - 抽象泛型类的不同实现

java - 组件有时不显示在 JFrame 上

java - 如何在Android中使用Canvas Paint在圆弧顶部绘制线条路径

Java - 如何使用循环点播放 mp3

c# - 如何生成交易号?

mysql - 仅从一列中删除重复项