क्या आप इस तथ्य से अवगत हैं कि आप वास्तव में अपने जीयूआई के भीतर से बैकएंड तक पहुंच रहे हैं? आप टेक्स्टफील्ड से सीधे अपने डेटाबेस में पैरामीटर पास कर रहे हैं। यह प्रमुख बकवास के लिए एक स्रोत है। कम से कम अपने इनपुट की पुष्टि करें, या छोटी बॉबी टेबल्स आपके कार्य अनुबंध को समय से पहले समाप्त कर देगा।
आपकी त्रुटि के अनुसार:क्षमा करें, लेकिन इस कोड को प्रमुख रिफैक्टरिंग की आवश्यकता है। अकेले लाइन काउंट से यह कोड बहुत अधिक करता है। पहला सुनहरा नियम:अपने तरीके छोटे रखें। दूसरा सुनहरा नियम:उन्हें छोटा करें।
यह तथ्य कि आप स्वयं समझ नहीं पा रहे हैं कि क्या हो रहा है, आपके लिए एक बड़ी लाल बत्ती है और यह दर्शाता है कि आपको अपने डिज़ाइन पर पुनर्विचार करने की आवश्यकता है।
- JDBC.putData() स्टैंडअलोन के साथ सामग्री लिखने के तरीके बनाएं।
- JDBC.getData() के साथ भी ऐसा ही करें।
- एक पैटर्न उभरता हुआ देखें।
मुझे लगता है कि यह JDBC में कनेक्शन.क्लोज़ () के लिए एक समयपूर्व कॉल है। अपने संचालन को अधिक परमाणु में विभाजित करके आप अपने कोड के बारे में बेहतर ढंग से तर्क कर सकते हैं, इस प्रकार हाथ में त्रुटि को समझ सकते हैं।
समाधान न देने के लिए क्षमा करें, लेकिन लंबे समय में आप कुछ कोड सिद्धांतों का पालन करके बेहतर होंगे। उन्हें जानें! जितनी जल्दी मुझे कुछ और कर्म चाहिए:रॉबर्ट सी. मार्टिन का "क्लीन-कोड" पढ़ें।http://www.amazon.de/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
तब आप ज्ञानोदय के मार्ग पर होंगे और इस प्रकार एक DAOFactory (संकेत) और DAO डिज़ाइन पैटर्न (भी संकेत) का उपयोग करेंगे और एक कोडर देवता बनेंगे। बधाई हो!
ठीक है, यहाँ एक छोटी सी गाइड है कि रिफैक्टरिंग कैसे दिख सकता है। समाप्त नहीं हुआ और परीक्षण नहीं किया गया, और मुझे लगता है कि मैंने एसक्यूएल सम्मिलन अनुक्रम को फुक किया (पता नहीं कौन सा लेनदेन आईडी का उपयोग किया जाता है)। लेकिन मुझे आशा है कि आपको एक विचार मिल गया होगा। आपका दिन शुभ हो और जमैका में आपका स्वागत है!
package mysqlfix;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTextField;
public class JDBC {
static Connection con = null;
static boolean b;
static PreparedStatement state;
public static void setCon() {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/lottery", "root", "123");
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static Connection getCon() throws Exception {
if (con == null) {
setCon();
}
return con;
}
public static boolean putData(String sql) {
try {
getCon().setAutoCommit(false);
state = getCon().prepareStatement(sql);
state.executeUpdate();
getCon().commit();
b = true;
} catch (Exception e) {
e.printStackTrace();
b = false;
}
return b;
}
// connection commit
public static void commit() {
try {
con.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
// rollback data
public static void rollback() {
if (con != null) {
try {
con.rollback();
} catch (SQLException ex) {
Logger.getLogger(JDBC.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
// close statement
public static void putClose() {
try {
state.close();
} catch (SQLException ex) {
Logger.getLogger(JDBC.class.getName()).log(Level.SEVERE, null, ex);
}
}
// close connection
public static void conClose() {
try {
con.setAutoCommit(true);
con.close();
} catch (SQLException ex) {
Logger.getLogger(JDBC.class.getName()).log(Level.SEVERE, null, ex);
}
}
// clear prepared statement
public static void putClear() {
try {
if (state != null && !state.isClosed()) {
state.close();
}
} catch (SQLException ex) {
Logger.getLogger(JDBC.class.getName()).log(Level.SEVERE, null, ex);
}
}
// clear the connection
public static void conClear() {
try {
if (con != null && !con.isClosed()) {
con.setAutoCommit(true);
con.close();
}
} catch (SQLException ex) {
Logger.getLogger(JDBC.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static ResultSet getData(String sql) throws Exception {
Statement state = getCon().createStatement();
ResultSet rs = state.executeQuery(sql);
return rs;
}
public void saveTotal(JTextField txtGtotal, JTextField txtPTotal) {
SuperDAO superDAO = new SuperDAO();
if (superDAO.getMaxIdFromOrder() > 0) {
Date date1;
date1 = new Date();
String txtGTotalFromTextField = txtGtotal.getText();
String txtPTotalFromTextField = txtPTotal.getText();
boolean b1 = false;
//regarding the transaction id...
//this changes whilst updating the table transaction.
int transactionId = -1;
if (txtGTotalFromTextField.matches("[a-zA-Z]")) {
transactionId = superDAO.insertOrderIntoTransaction(date1, txtGTotalFromTextField);
//b1 = JDBC.putData("insert into transaction(tr_date, amount, tr_type) values ('" + date1 + "' , '" + txtGTotalFromTextField + "' , 'order')");
}
if (transactionId > 0) {
try {
} catch (Exception ex) {
Logger.getLogger(JDBC.class.getName()).log(Level.SEVERE, null, ex);
}
if (txtPTotalFromTextField.matches("[a-zA-Z]")) {
transactionId = superDAO.insertProfitIntoTransaction(date1, txtGTotalFromTextField);
}
JDBC.putData("insert into o_de(or_id, tr_id, oday, gtotal) values ('" + superDAO.getMaxIdFromOrder() + "' , '" + transactionId + "','" + date1 + "','" + txtGtotal.getText() + "' )");
JDBC.putData("insert into order_profit(or_id, tr_id, ptotal) values ('" + superDAO.getMaxIdFromOrder() + "' , '" + transactionId + "','" + txtPTotal.getText() + "' )");
//JDBC.commit();
//JOptionPane.showMessageDialog(null, "Order Saved Sucessfully..");
JDBC.putClose();
JDBC.conClose();
}
}
}
}
package mysqlfix;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author edm
*/
public class SuperDAO {
Connection conn;
public SuperDAO() {
try {
this.conn = JDBC.getCon();
} catch (Exception ex) {
Logger.getLogger(SuperDAO.class.getName()).log(Level.SEVERE, null, ex);
}
}
public int getMaxIdFromOrder() {
try {
ResultSet rs = JDBC.getData("select MAX(or_id) as or_id from `order`");
if (rs.first()) {
return rs.getInt("or_id");
}
} catch (SQLException ex) {
Logger.getLogger(SuperDAO.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(SuperDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return -1;
}
public int getMaxIdFromTransaction() {
ResultSet rs;
try {
rs = JDBC.getData("select MAX(tr_id) as tr_id from transaction");
if (rs.first()) {
return rs.getInt("tr_id");
}
} catch (Exception ex) {
Logger.getLogger(SuperDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return -1;
}
public int insertOrderIntoTransaction(Date date, String text) {
JDBC.putData("insert into transaction(tr_date, amount, tr_type) values ('" + date + "' , '" + text + "' , 'order')");
return getMaxIdFromTransaction();
}
public int insertProfitIntoTransaction(Date date, String text) {
JDBC.putData("insert into transaction(tr_date, amount, tr_type) values ('" + date + "' , '" + text + "' , 'profit')");
return getMaxIdFromTransaction();
}
}
बेशक यात्रा यहीं नहीं रुकती। मैंने JDBC saveTotal() को पूरा नहीं किया। मैंने अभी इसे शुरू किया है, आप बाकी बना लें।
कृपया ध्यान दें कि मैंने डेटाबेस के खिलाफ इस कोड का परीक्षण नहीं किया (कुछ एसक्यूएल डीडीएल फाइलें गायब थीं)। इसके अलावा, मैंने रोलबैक तंत्र का उपयोग नहीं किया। इसके अलावा, saveTotal() JDBC में रहता है, जहां यह संबंधित नहीं है। अपने GUI (यदि आवश्यक हो) में saveTotal का उपयोग करें और सभी डेटाबेस को SuperDAO के माध्यम से प्रवाहित होने दें। यह सबसे अच्छा डिज़ाइन नहीं है, लेकिन यह बहुत सारगर्भित नहीं है और आप आसानी से देख सकते हैं कि कैसे चिंता का पृथक्करण आपके कोड को थोड़ा अधिक पठनीय और बनाए रखने योग्य बनाता है।