In my project there are a lot of GUI so I have a class for each GUI. I created a class to connect to my db (MySQL). Remember, I don't have problems with code not working. The code (important to this question) in the `connectiondb` class is: public static void loadDriver_doConnection(){ try { Class.forName(jdbc_driver); try { conn = DriverManager.getConnection(url1,"root","pswww"); } catch(SQLException es) { //es.printStackTrace(); } } catch (ClassNotFoundException ex) { //ex.printStackTrace(); } } public static Connection loadDriver_doConnection_backConn(){ try { Class.forName(jdbc_driver); try { conn = DriverManager.getConnection(url1,"root","pswww"); } catch(SQLException es) { //es.printStackTrace(); } } catch (ClassNotFoundException ex) { //ex.printStackTrace(); } return conn; } static ResultSet doQuery2(String sql, boolean full_navigable) { if (conn != null) { try // { if (full_navigable) st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); else st = conn.createStatement(); rs = st.executeQuery(sql); } catch (SQLException ex) { JOptionPane.showMessageDialog(null,ex.getMessage()); } return rs; } else { return null; } And now I'm showing you an example (with no try-catch to control input) of my code on a GUI where I do an insert/delete: String sqlinsart="insert into Art (CF,Name,Surname,Date,City born,City live,road,Num,Email,Tel,Cell) values(?,?,?,?,?,?,?,?,?,?,?)"; Connection conn=Connectiondb.loadDriver_doConnection_backConn(); PreparedStatement ps = conn.prepareCall(sqlinsart); ps.setString(1, txtformattedcf.getText().trim()); ps.setString(2, txtname.getText().trim()); ps.setString(3, txtsurname.getText().trim()); SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date invoiceDate = formatDate.parse(txtformatteddate.getText().trim()); java.sql.Date sqlDate = new java.sql.Date(invoiceDate.getTime()); ps.setDate(4, sqlDate); ps.setString(5, txtcityb.getText().trim()); ps.setString(6, txtcity.getText().trim()); ps.setString(7, txtroad.getText().trim()); ps.setString(8, txtformattednum.getText().trim()); ps.setString(11, txtemail.getText().trim()); ps.setString(12, txtformattedtel.getText().trim()); ps.setString(13, txtformattedcell.getText().trim()); int n = ps.executeUpdate(); if (n>0){ JOptionPane.showMessageDialog(null, "Insert ok"); } DELETE (these actions are done by bottons): String userelimart=txtformattedcf.getText().trim(); String sqlelimart="delete from Art where Art.CF='"+userelimart+"'"; Connection conn=Connectiondb.loadDriver_doConnection_backConn(); Statement sent=conn.createStatement(); int n =sent.executeUpdate(sqlelimart); if (n>0){ JOptionPane.showMessageDialog(null,"delete ok"); The update is similar. So, in this way, I use the `doQuery2` method of `Connectiondb.class` only for the try-catch control of input, for example: String art=txtformattedcf.getText().trim(); String sqluss="select CF from Art where Art.CF='"+art+"'"; ResultSet rsuss=Connectiondb.doQuery2(sqluss,true); if (rsuss.next()==false){ throw new SQLException(); } I use the second parameter when I have to put the data in jtable etc., but it's not important here. Is there a better way to manage all of this, such as adding other methods in `Connectiondb`? I use these insert/delete in the GUIs many times and I think management is not efficient, maybe because I didn't create the classes for the date. For example, a class to take the information of a person (with get, set) of a company or what I need. I didn't do that because I treat the data directly to the database. For example, is there a way to do this code Connection conn=Connectiondb.loadDriver_doConnection_backConn(); Statement sent=conn.createStatement(); int n =sent.executeUpdate(sqlelimart); if (n>0){ JOptionPane.showMessageDialog(null,"delete ok"); inside of a method `Connectiondb` where I give the SQL String (without then rewrite this code every time in each GUI)? I created the method Connectiondb.loadDriver_doConnection_backConn() because I always treat the data in the buttons GUI and not in the `Connectiondb` class. This is also the same for the insert and update, but now I can't find a right way. For the "preparedStatement method" i'm writing this code: static void SetString(PreparedStatement ps, Integer[] indexstring, JTextField[] textstring){ for (int i=0;i<indexstring.length;i++) try { ps.setString(indexstring[i], textstring[i].getText().trim()); } catch (SQLException e) { //msg with error } } static void SetInt(PreparedStatement ps, Integer[] indexint, JTextField[] textint){ for (int i=0;i<indexint.length;i++) try { ps.setInt(indexint[i], Integer.parseInt(textint[i].getText().trim())); } catch (SQLException e) { //msg with error } } static void SetDouble(PreparedStatement ps, Integer[] indexdouble, JTextField[] textdouble){ //etc } static void SetDate(PreparedStatement ps, Integer[] indexdate, JTextField[] textdate){ //etc } There is a better way to do this? (In this way i have to write other 4 methods for the JFormattedTextField)