1
스윙 GUI에서 얻은 정보를 사용하여 행을 업데이트하려고합니다. 데이터베이스 상호 작용과 연결JDBC 결과 집합을 사용하여 행을 업데이트 할 때의 문제
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]Error in row.BookFrame bUpdateActionPerformed
BookDB 클래스 거래 : 이 내 예외입니다. eventhandling 및 사용자 입력을
public class BookDB {
private final String data = "jdbc:odbc:Books";
private Connection con;
private Statement stmt;
ResultSet result;
BookDB() throws ClassNotFoundException, SQLException {
connect();
}
public static void main(String[] args) {
try {
BookDB b = new BookDB();
} catch (ClassNotFoundException ex) {
Logger.getLogger(BookDB.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(BookDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void connect() throws ClassNotFoundException, SQLException {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
this.con = DriverManager.getConnection(data);
this.stmt = this.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
this.result = this.stmt.executeQuery("SELECT Bookcode,Booktitle,Bookprice FROM Books");
} catch (ClassNotFoundException e) {
System.out.println("Failed to load jdbc/odbc drivers");
System.out.println("Class Erro: " + e);
} catch (SQLException e) {
System.out.println("Unable to connect");
System.out.println(("SQL ERROR: " + e));
}
}
public void updateRecord(Book book) throws SQLException {
result.updateString("BookCode", book.getCode());
result.updateString("BookTitle", book.getTitle());
result.updateDouble("BookPrice", book.getPrice());
result.updateRow();
}
}
BookFrame 상품의
public class BookFrame extends javax.swing.JFrame {
private BookDB bd;
public BookFrame() {
try {
initComponents();
this.bd = new BookDB();
bd.connect(); //connect to database
bd.result.next();
tCode.setText(this.bd.result.getString("bookcode") + ""); //sets textfields from data
tTitle.setText(this.bd.result.getString("booktitle") + "");
tPrice.setText(this.bd.result.getString("bookprice") + "");
} catch (ClassNotFoundException ex) {
Logger.getLogger(BookFrame.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(BookFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void bUpdateActionPerformed(java.awt.event.ActionEvent evt) {
try {
Book b = new Book(tCode.getText(), tTitle.getText(), Double.parseDouble(tPrice.getText())); //create book object of values to update with
bd.updateRecord(b);
} catch (SQLException ex) {
Logger.getLogger(BookFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
액세스가 변경 가능한 결과 집합을 지원하지 않을 수 있습니다. 그렇다면 결과 집합의 커서 위치를 원하는대로 업데이트하려는 행으로 설정해야합니다. – MadProgrammer
@MadProgrammer는이 경우 업데이트 테이블 범위가 없습니다 ? – Krishna
당신이하는 방식이 아닙니다. Access 에서조차 mutable result set을 지원했지만, 당신이하고있는 방식은 작동하지 않을 것입니다. 하지만 평범한 일상적인 업데이트 문을 사용하여 수동 업데이트를해야합니다 ... – MadProgrammer