2014-06-24 27 views
14

Tôi đang sử dụng Java để kết nối với cơ sở dữ liệu MySQL. Tôi đang cố chèn hoặc cập nhật dữ liệu vào cơ sở dữ liệu.Làm thế nào để bạn xác định xem một chèn hoặc cập nhật đã thành công bằng cách sử dụng Java và MySQL?

Mặc dù tôi khá chắc chắn chèn đã thành công, nó trả về false.

Theo API "thực thi", giá trị trả lại là "true nếu kết quả đầu tiên là đối tượng ResultSet; false nếu đó là số cập nhật hoặc không có kết quả".

Làm cách nào để xác định việc chèn hoặc cập nhật của tôi có thành công hay không?

public boolean insertSelections(String selection, String name){ 
     String sql ="INSERT INTO WORKREPORT VALUES (?,?,?,?,?)"; 
     boolean action = false; 
     try { 
      PreparedStatement stmt = conn.prepareStatement(sql); 
      SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyy:MM:dd hh:mm:ss"); 
      String formatDate = dateFormat.format(new java.util.Date(System.currentTimeMillis())); 
      java.util.Date mDate = dateFormat.parse(formatDate); 
      java.sql.Timestamp timeStamp = new java.sql.Timestamp(System.currentTimeMillis()); 
//   Date time= new Date(mDate.getTime()); 

      stmt.setInt(1, Integer.parseInt(getNumberByName(name).trim())); 
      stmt.setString(2, name); 
//   stmt.setDate(3, time); 
      stmt.setTimestamp(3, timeStamp); 
      stmt.setString(4, selection); 
      stmt.setString(5, "N/A"); 
      action = stmt.execute(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return action; 
    } 
+1

Hãy thử với 'stmt.executeUpdate();' cho loại 'Cập nhật op (INSERT, UPDATE, DELETE)'. –

Trả lời

19

Vì bạn đang sử dụng PreparedStatement bạn có thể gọi executeUpdate() -

int count = stmt.executeUpdate(); 
action = (count > 0); // <-- something like this. 

Từ Javadoc (Returns) liên kết ở trên, nhấn mạnh thêm,

hoặc (1) tính hàng cho Ngôn ngữ thao tác dữ liệu SQL (DML) hoặc (2) 0 cho câu lệnh SQL không trả về gì cả.

Nếu bạn muốn chèn số lượng lớn mục nhập, tôi muốn addBatch()executeBatch().

-1

Nếu bạn không có ngoại lệ, tôi cho rằng truy vấn đã ổn. Hoặc, bạn có thể sử dụng executeUpdate() (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate())

Bạn có thể chọn số (*) để xác thực số lượng bản ghi nếu muốn.

+0

Tôi hiện đang chạy truy vấn xóa nên xóa 1 bản ghi trong thử nghiệm của tôi.Truy vấn không vượt qua, tuy nhiên nó trả về 0 bản ghi đã thay đổi. Điều này không đúng. Số lượng SELECT (*) sẽ hoạt động nhưng không bắt buộc. –

9

Trước hết điều này, bạn nên biết:

boolean thực hiện() Thực thi các câu lệnh SQL trong đối tượng PreparedStatement này, có thể là bất kỳ loại câu lệnh SQL.

ResultSet executeQuery() Thực hiện truy vấn SQL trong đối tượng PreparedStatement này và trả về đối tượng ResultSet do truy vấn tạo ra.

int executeUpdate() Thực hiện câu lệnh SQL trong đối tượng PreparedStatement này, phải là câu lệnh SQL INSERT, UPDATE hoặc DELETE; hoặc một câu lệnh SQL trả về không có gì, chẳng hạn như một câu lệnh DDL.

 int i=stmt.executeUpdate(); 
     if(i>0) 
     { 
       System.out.println("success"); 
     } 
       else 
     { 
      System.out.println("stuck somewhere"); 

     } 

Hãy thử điều này và kiểm tra xem nó ra liệu chèn đang xảy ra hay không

0

Hãy thử điều này, cho dù bạn muốn biết liệu các dữ liệu được chèn vào hay không, nếu hồ sơ được chèn nó trở lại đúng hay khác sai .

if(action > 0){ 
     return true; 
    }else{ 
     return false; 
     } 
Các vấn đề liên quan