ファイルからデータをフェッチし、javaを使用してデータベースに挿入しようとしています。次は私のJavaコードです:javaを使用してtxtファイルからoracle DBに挿入
package edgelist;
import java.io.*;
import java.util.*;
import java.lang.Math.*;
import java.sql.*;
public class Edgelist {
private static int getRandomNumberInRange(int min, int max){
if (min >= max) {
throw new IllegalArgumentException("max must be greater than min");
}
Random r = new Random();
return r.nextInt((max - min) + 1) + min;
}
public static void main(String args[]) throws Exception {
FileInputStream f=null;
int i,c=1;
String num="";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE",
"project",
"project");
Statement stmt=con.createStatement();
String s=null,ver1=null,ver2=null;
int serial=0,type;
//PreparedStatement ps=con.prepareStatement(s);
try {
f=new FileInputStream("F:\\College Project\\dolphin.txt");
do {
i=f.read();
if(i!=-1) {
if((char) i !=' ' && (char) i !='\n' && (char) i !='\r') {
num=num+(char) i;
} else {
if(!num.matches("")) {
if((char) i == ' ') {
//System.out.println("Random:"+getRandomNumberInRange(1, 10)+" "+num);
serial=++c;
ver1=num;
} else if(!((char) i >= '0') && ((char) i <= '9')) {
ver2=num;
}
}
num="";
type=getRandomNumberInRange(1, 10);
s="insert into edges(serial_no, vertex1, vertex2, edge_type)"
+"values("+serial+", '"+ver1+"', '"+ver2+"', "+type+")";
stmt.executeQuery(s);
}
}
} while(i!=-1);
} catch(FileNotFoundException e) {
System.out.println(e);
}
catch(IOException e) {
System.out.println(e);
} finally {
try {
if(f != null)
f.close();
con.close();
} catch(IOException e) {
System.out.println(e);
}
}
}
}
このコードは正しくファイルからデータをフェッチしているが、DBに挿入しようとしたときに、それがスレッド「メイン」java.sqlでのエラー
例外を次与えます.SQLException:ORA-00001:ユニーク 制約(PROJECT.SYS_C004002)はoracle.jdbc.driver.T4CTTIoer.processErrorで oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) (で
に違反しましたT oracle.jdbc.driverでoracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)で oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)で4CTTIoer.java:331)。 でoracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946) でoracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169) でT4CStatement.doOall8(T4CStatement.java:207) edgelist.Edgelist.mainでoracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1273) (Edgelist.java:77)のJava結果:1
は、テーブルの端であります構造
CREATE TABLE "EDGES" (
"SERIAL_NO" NUMBER,
"VERTEX1" VARCHAR2(10) NOT NULL ENABLE,
"VERTEX2" VARCHAR2(10) NOT NULL ENABLE,
"EDGE_TYPE" NUMBER,
PRIMARY KEY ("SERIAL_NO") ENABLE,
FOREIGN KEY ("EDGE_TYPE")
REFERENCES "TYPES" ("SERIAL_NO") ENABLE
)
はここTYPES
の表は、1から10までの値が含まれており、ファイルdolphin.txt
には、次のデータを含むedgelistです:
3 8
5 9
6 9
0 10
2 10
5 13
6 13
9 13
0 14
3 14
0 15
14 16
1 17
6 17
9 17
13 17
15 18
1 19
7 19
8 20
16 20
18 20
18 21
17 22
14 24
15 24
使用することができますどのように適切に私たち 'PreparedStatement' –
を重要学ぶくださいエラースタックの一部は 'ORA-00001:一意制約(PROJECT.SYS_C004002)違反です.'です。 –