2013-10-07 3 views
0

메신저가 java로 sqlite에 txt 파일을 만들려고 시도하고있다.InputMismatchException? 나는 아직도 그것을 이해할 수 없다.

(ID, 이름, 카테고리 XCOORDINATE, y 좌표, 길이, 폭, FLOOR)

유형 질서 INTEGER 텍스트 문자이다 INT INT INT INT. (나는 AUTOINCREMENT에 의해 ID를 만들 수 있습니다.) 여기

maleToilet room -58 0 58 48 9 

femaleToilet room -58 -48 58 48 9 

메인 코드

처럼

예는 다음과 같습니다

import java.sql.*; 
import java.io.*; 
import java.util.*; 

class Read{ 
public Scanner input; 

public void openFile() { 
    try { 
     input = new Scanner(new File("D:\\room.txt")); 
    } catch (FileNotFoundException fileNotFoundException) { 
     System.err.println("Error opening file."); 
     System.exit(1); 
    } 
} 

public void closeFile() { 
    if (input!=null) 
     input.close(); 
    } 
} 

public class TxtToSqlite 
{ 
    public static void main(String args[]) 
    { 
     Read r = new Read(); 
     Connection c = null; 
     Statement stmt = null; 

    try { 
    Class.forName("org.sqlite.JDBC"); 
    c = DriverManager.getConnection("jdbc:sqlite:test.db"); 
    c.setAutoCommit(false); 

    stmt = c.createStatement(); 

    //create the schema 
    /*String sql = "CREATE TABLE ROOM " + 
       "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + 
       " NAME   TEXT NOT NULL, "+ 
       " CATEGORY  TEXT NOT NULL, "+ 
       " XCOORDINATE REAL NOT NULL, "+ 
       " YCOORDINATE REAL NOT NULL, "+ 
       " LENGTH   REAL NOT NULL, "+ 
       " WIDTH   REAL NOT NULL, "+ 
       " FLOOR   INT  NOT NULL)";*/ 


    r.openFile(); 

    String sql = null; 
    int i = 1; 
    while(r.input.hasNext()){ 
    sql = "INSERT INTO ROOM (NAME,CATEGORY,XCOORDINATE,YCOORDINATE,LENGTH,WIDTH,FLOOR) " + 
      "VALUES ("+"'"+r.input.next()+"', '"+r.input.next()+"', "+ 
      r.input.nextInt()+", "+r.input.nextInt()+", "+ 
      r.input.nextInt()+", "+r.input.nextInt()+", "+r.input.nextInt()+");"; 
    stmt.executeUpdate(sql); 
    i++; 
    } 
    r.closeFile(); 


    stmt.close(); 
    c.close(); 
} catch (InputMismatchException e) { 
    System.out.print("Input Error!"); 
} catch (Exception e) { 
    System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
    System.exit(0); 
} 

} }

하지만 발생 InputMismatchException. 그럼 누구도 도와 줄 수 있습니까? 감사합니다 :)

가 BTW, 내가 http://www.tutorialspoint.com/sqlite/sqlite_java.htm 에서 SQLite는-JDBC-3.7.2.jar를 다운로드하여 참조 라이브러리로합니다.

+3

'exception'을 위해 얻고있는'stacktrace'를 추가하십시오. 또한 어떻게 당신이 테이블을 만드는 당신'sql schema'을 추가 하시겠습니까? – Smit

+0

이 예외 (http://docs.oracle.com/javase/7/docs/api/java/util/InputMismatchException.html)는 다음과 같은 조건에서 스캐너 개체로부터 가져옵니다. "검색된 토큰은 예상 유형의 패턴과 일치하지 않거나 토큰이 예상 유형의 범위를 벗어남 * " –

+0

각 필드의 데이터 유형이 주된 이유입니까? REAL의 경우 XCOORDINATE와 비슷하지만 nextInt()를 사용합니까? – newman

답변

1

미트가 말했듯이,

은 내가 ID 데이터 형 INTEGER 에 을 변경하여 원래의 하나를 해결하고 더 쉽게 그것을 AUTOINCREMENT을 설정합니다.

는 그것이 작동되도록 메인 코드에서 c.setAutoCommit(false);를 제거합니다.

답장 보내 주셔서 감사합니다. :)

관련 문제