2017-04-25 32 views
-2

當我向「ID」提供非法值時,我期望「嘗試」失敗並觸發「catch」子句。try-catch子句不起作用

PreparedStatement ps1=conn.prepareStatement("insert into Table_1(id values(?)");  
try{ 
    ps1.setString(1,ID); 
    ps1.executeUpdate(); 
    conn.commit(); 
} catch(Exception EX){ 
    logger.error("Failed insert to table "+v.getId()); 
    logger.error(EX.getMessage(), EX); 
    EX.printStackTrace(); 
    try{ 
     conn.rollback(); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
     logger.error("Cannot rollback connection"); 
     logger.error(ex.getMessage(),ex); 
     System.exit(1); 
    } 
} 

取而代之,我得到以下異常,程序終止。這似乎是問題連接到「ps1.executeUpdate();」線。

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Disallowed implicit conversion from data type ntext to data type varchar, table 'Table_1', column 'id'. Use the CONVERT function to run this query. 

我可以得到一個異常,此外,我想在ID非法時發生異常。但是,我不明白爲什麼catch語句沒有被觸發。

任何想法?

+1

'TABLE_1(id'那裏有一個缺失paranthesis? – SomeJavaGuy

+0

的'prepareStatement()'是之前的'嘗試''catch'塊,因此錯誤不會被捕獲。 –

回答

0

SQL字符串不正確。像這樣做:

insert into Table_1 (id) values(?) 
0
try{ 
    PreparedStatement ps1=conn.prepareStatement("insert into Table_1(id) values(?)"); 
    ps1.setString(1,ID); 
    ps1.executeUpdate(); 
    conn.commit(); 
} catch(Exception EX){ 
    logger.error("Failed insert to table "+v.getId()); 
    logger.error(EX.getMessage(), EX); 
    EX.printStackTrace(); 
    try{ 
     conn.rollback(); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
     logger.error("Cannot rollback connection"); 
     logger.error(ex.getMessage(),ex); 
     System.exit(1); 
    } 
} 
0

首先,查詢有一個支架丟失。 正確的查詢是:

PreparedStatement ps1 = conn.prepareStatement("insert into Table_1(id) values(?)");  

其次,我覺得記錄儀沒有正確初始化,所以塊的功能是不可見的。但是你得到,因爲EX.printStackTrace()

0

的錯誤堆棧跟蹤你有一個無效SQL statement

conn.prepareStatement("insert into Table_1(id) values(?)"); 
0

問題是不是在try catch塊,如果是的話,那麼它應該通過嘗試捕捉來處理。 這只是一個錯誤的SQL語句。我推薦Prepared statement tutorials,以及Try catch tutorials

在此同時嘗試以下解決方案。

PreparedStatement ps1=conn.prepareStatement("insert into Table_1(id) values(?)"); 

try{ 
    ps1.setString(1,ID); 
    ps1.executeUpdate(); 
    conn.commit(); 
} catch(Exception EX){ 
    logger.error("Failed insert to table "+v.getId()); 
    logger.error(EX.getMessage(), EX); 
    EX.printStackTrace(); 
    try{ 
     conn.rollback(); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
     logger.error("Cannot rollback connection"); 
     logger.error(ex.getMessage(),ex); 
     System.exit(1); 
    } 
} 
0

錯誤首先line..put 「)」 一旁的id ...支架沒有關閉