2014-04-29 40 views
1
try 
{ 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    con1=DriverManager.getConnection("jdbc:odbc:MyDatabase"); 
    st1=con1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 
    System.out.println("Connect database in BallMoves1.java ......."); 
    /*the below line giving error*/ 
    rs1 = st1.executeQuery("insert into highscore" + " (score) " + "values('"+score+"')"); 
    System.out.println("Score is inserted.."); 
    System.out.println("Score......."+score); 
}catch(Exception e){ e.printStackTrace();} 

/*highscore is table and attributes of table are (sid,score). 

所產生的誤差插入在MS Access值爲:如何使用Java

Connect database in BallMoves1.java ....... 
java.sql.SQLException: No ResultSet was produced 
    at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:258) 
    at BallMoves1.move(BallMoves1.java:378) 
    at BallMoves1.run(BallMoves1.java:223) 
    at java.lang.Thread.run(Thread.java:744)*/ 
+0

錯誤是...? (您應該*總是*包含錯誤消息的詳細信息。)另外,使用參數化的SQL,而不是將值直接放入您的SQL中...並且請在未來更仔細地格式化您的帖子,使用空格而不是製表符。 –

回答

2

你打電話executeQuery的東西,不是一個查詢。但是,而不是調用execute用相同的SQL,你應該使用一個PreparedStatement

String sql = "insert into highscore (score) values (?)"; 
try (Connection conn = DriverManager.getConnection("jdbc:odbc:MyDatabase"); 
    PreparedStatement statement = conn.prepareStatement(sql)) { 
    statement.setInt(1, score); 
    statement.executeUpdate(); 
    conn.commit(); 
} 

始終使用參數化的SQL,而不是直接將值插入SQL - 保護您免受SQL注入攻擊,轉換錯誤,以及難以閱讀的代碼。

使用try-with-resources語句(如我一樣)自動關閉塊末尾的語句和連接。