Roc*_*ock 0 java sql oracle jdbc oracle11g
我试图从文件中获取数据并使用java将其插入数据库.以下是我的java代码:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码正确地从文件中获取数据,但在尝试插入数据库时,它会产生以下错误
线程"main"java.sql.SQLException中的异常:ORA-00001:违反了唯一约束(PROJECT.SYS_C004002)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) )oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java: 946)atracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)at edge.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1273)at edgelist.Edgelist.main(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
)
Run Code Online (Sandbox Code Playgroud)
此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
Run Code Online (Sandbox Code Playgroud)
该错误意味着您正在尝试使用已存在于表中的键插入行.
你定义了一个主键SERIAL_NO,并且该字段填充了你的serial变量,但问题是你并不总是执行serial=++c;,因为它在一个if语句中.
这意味着您可以serial多次插入相同的值,因此会出现错误.
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |