내가 내 대답SQL 명령은
내가 코드를 아래에 쓴이 시간을받을 희망하지만, 내 실수 이다 올바른지 내가
이 코드를 생각하는 것 같다 모른다 (여기서 내 실수이다) 백만 분의 레코드를 oracle xe에 삽입해야합니다 PreparedStatement를 하나씩 실행하면 하나의 insert 문으로 작성했습니다 하지만 실행 시간은 6 시간 !!!!!! 내가 강제 되었기 때문에 사용에 Thread.sleep()
package tokenizing;
import java.sql.*;
import java.util.StringTokenizer;
public class TokenExtraction2 {
public static void main(String[] args) throws Exception {
String myText[]=new String[2276];
Jdbc db=new Jdbc();
String st1=null;
int i=0;
int j=0;
String tokens[][]=new String [3000000][2];
st1="select ntext from NEWSTEXT ";
ResultSet result=db.select(st1);
while(result.next())
{
myText[i]=result.getString("ntext");
++i;
}
db.closedb();
i=0;
StringBuilder st= new StringBuilder("insert into tokens5(token,tokenlength) values");
while(i<2276)
{
StringTokenizer s=new StringTokenizer(myText[i],"*./»«،[email protected]#$%^&()_-\"+=:;|<>?“؟”’{}[]‘,\\\t\n\r\fabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ...—`—ـ؛–…_");
while(s.hasMoreTokens()){
String key=s.nextToken();
tokens[j][0]=key;
tokens[j][1]=(key.length())+"";
st.append("(?,?)");
if(i<2276 && s.hasMoreTokens())
st.append(", ");
else
st.append(";");
//db.insert(st, key, key.length());
//db.closedb();
System.out.println(key+"\t");
j++;
}
System.out.println("num of news is: "+i);
System.out.println("*****************************************************************************************");
System.out.println("num of tokens is: "+j);
System.out.println("next news"+"\t");
//j=0;
i++;
}
System.out.println(st);
int k=0;
Class.forName("oracle.jdbc.driver.OracleDriver") ;
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","ALBALOO","myjava123");
PreparedStatement ps=con.prepareStatement(st.toString());
// con.setAutoCommit(false);
//j=1;
i=0;
//j=j-286;
while(k<j)
{
i=i+1;
ps.setString(i, tokens[k][0]);
System.out.println(i);
i=i+1;
ps.setInt(i,Integer.parseInt(tokens[k][1]));
System.out.println(k+2);
k++;
}
ps.executeUpdate();
//con.commit();
}
}
오라클에서 여러 행을 삽입 할 수 없음을 의미합니까? 배치 문을 사용하여이 작업을 시도했지만 강제로 thread.sleep을 사용했습니다. – sara
또한 ';'은 문에 포함하면 안됩니다. 세미콜론은 명령문 종결 자이며 대개의 경우 CLI 또는 스크립트 입력에만 사용됩니다. 대부분의 데이터베이스는 실제 명령문의 일부로 ';'를 지원하지 않으므로 데이터베이스 또는 JDBC 드라이버에서 오류가 발생합니다. –
여러 행을 삽입하지 않고 하나의 행을 삽입합니다. 이것은 하나의'insert' 문입니다.여러 개의'(?,?)'를'values' 절의 일부로 전달해도 다중 행이되지는 않습니다. 당신이하고있는 생각을 확인하기 위해 실제'st' 결과 (또는 어쨌든 그것의 시작)를 질문에 추가 할 수 있습니까? –