2017-06-20 220 views
0

我从另一个JFrame类调用的JFrame中插入来自用户输入的数据。我在Oracle 11g快速版中检查了查询,显示没有插入数据。任何人都可以通过在此代码中添加主要方法来修改此查询。JDBC不适用于数据插入?

class Insert extends JFrame{ 
    JLabel name,code,address,telephone,email; 
    JTextField tname,tcode,ttelephone,temail; 
    JButton save,exit; 
    JTextArea taddress; 
    Insert(){ 
     //properties of frame 
     super("CUSTOMER MASTER"); 
     setVisible(true); 
     setLayout(null); 
     setSize(1100,500); 
     setResizable(false); 
     //Initialisation 
     name=new JLabel("Name:"); 
     code=new JLabel("Code:"); 
     address=new JLabel("Address:"); 
     telephone=new JLabel("Telephone:"); 
     email=new JLabel("E-mail:"); 
     tname=new JTextField(); 
     tcode=new JTextField(); 
     taddress=new JTextArea(4,20); 
     ttelephone=new JTextField(); 
     temail=new JTextField(); 
     save=new JButton("SAVE"); 
     exit=new JButton("EXIT"); 
     //settingBounds 
     name.setBounds(10,50,70,25); 
     tname.setBounds(90,50,150,25); 
     code.setBounds(300,50,70,25); 
     tcode.setBounds(380,50,150,25); 
     address.setBounds(10,100,70,25); 
     taddress.setBounds(90,100,150,75); 
     taddress.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
     telephone.setBounds(300,100,70,25); 
     ttelephone.setBounds(380,100,150,25); 
     email.setBounds(10,225,70,25); 
     temail.setBounds(90,225,150,25); 
     save.setBounds(900,425,100,25); 
     exit.setBounds(1000,425,100,25); 
     //adding on frame 
     add(name); 
     add(tname); 
     add(code); 
     add(tcode); 
     add(address); 
     add(taddress); 
     add(telephone); 
     add(ttelephone); 
     add(email); 
     add(temail); 
     add(save); 
     add(exit); 

     //ActionListener 
     save.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent ae){ 
      //getting data from user 
      String demail,checkdemail; 
      int dcode,dtelephone; 
      String dname=tname.getText(); 
      String daddress=taddress.getText(); 
      checkdemail=temail.getText(); 
      demail=validateEmail(checkdemail); 
      try{ 
      String stelephone=ttelephone.getText(); 
      dtelephone=Integer.parseInt(stelephone); 
      String scode=tcode.getText(); 
      dcode=Integer.parseInt(scode); 
      addData(dname,dcode,daddress,dtelephone,demail); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      }   
      dispose(); 
      new CustomerMaster(); 
      } 
     }); 
     exit.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent ae){ 
       dispose(); 
       new CustomerMaster(); 
      } 
     }); 
    } 
    public void addData(String name,int code,String address,int telephone,String email){ 
     Connection con; 
     String str; 
     PreparedStatement ps; 

     try{ 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","PROJECT","PROJECT"); 
      str="insert into CUSTOMERMASTER values(?,?,?,?,?)"; 
      ps=con.prepareStatement(str); 
      ps.executeUpdate(); 
      ps.setString(1,name); 
      ps.setInt(2,code); 
      ps.setString(3,address); 
      ps.setInt(4,telephone); 
      ps.setString(5,email); 
      con.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     } 
    private String validateEmail(String email){ 
     String vemail=null; 
     Pattern p1=Pattern.compile("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"+"[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"); 
     Matcher m1=p1.matcher(email); 
     Boolean b=m1.matches(); 
     boolean cb=b; 
     if(email.equals("")){ 
      vemail=email; 
     }   
     else{ 
      if(b==true){ 
       vemail=email; 
      } 
      else{ 
       Object message="Enter Valid Email."; 
       JOptionPane.showMessageDialog(null,message); 
      } 
     } 
     return vemail; 
    } 
} 

这里是由SQL开发 代码生成数据库的代码:

CREATE TABLE CUSTOMERMASTER 
(
    NAME VARCHAR2(20 BYTE) NOT NULL 
, CODE NUMBER NOT NULL 
, ADDRESS VARCHAR2(50 BYTE) 
, TELEPHONE NUMBER 
, EMAIL VARCHAR2(20 BYTE) 
) 
LOGGING 
TABLESPACE SYSTEM 
PCTFREE 10 
PCTUSED 40 
INITRANS 1 
STORAGE 
( 
    INITIAL 65536 
    NEXT 1048576 
    MINEXTENTS 1 
    MAXEXTENTS UNLIMITED 
    FREELISTS 1 
    FREELIST GROUPS 1 
    BUFFER_POOL DEFAULT 
) 
NOPARALLEL; 

ALTER TABLE CUSTOMERMASTER 
ADD CONSTRAINT CUSTOMERMASTER_UK1 UNIQUE 
(
    TELEPHONE 
, EMAIL 
) 
USING INDEX 
(
    CREATE UNIQUE INDEX CUSTOMERMASTER_UK1 ON CUSTOMERMASTER (TELEPHONE ASC, EMAIL ASC) 
    LOGGING 
    TABLESPACE SYSTEM 
    PCTFREE 10 
    INITRANS 2 
    STORAGE 
    ( 
     INITIAL 65536 
     NEXT 1048576 
     MINEXTENTS 1 
     MAXEXTENTS UNLIMITED 
     FREELISTS 1 
     FREELIST GROUPS 1 
     BUFFER_POOL DEFAULT 
    ) 
    NOPARALLEL 
) 
ENABLE; 
+4

插入可能会运行得更好,如果你真的** **执行它:'ps.executeUpdate()' – Andreas

+0

你需要关闭连接之前执行提交()。顺便说一句,你的ps.setXXX()是在'ps.executeUpdate();'之后完成的,这显然是错误的。 –

回答

0

你addData()方法应该是在这个顺序(我已删除群集代码)

try { 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","PROJECT","PROJECT"); 
      str="insert into CUSTOMERMASTER values(?,?,?,?,?)"; 
      ps=con.prepareStatement(str); 

      ps.setString(1,name); 
      ps.setInt(2,code); 
      ps.setString(3,address); 
      ps.setInt(4,telephone); 
      ps.setString(5,email); 
      ps.executeUpdate(); 

      con.commit();  
      ps.close(); 
      con.close(); 
     } catch(Exception e){ 
      e.printStackTrace(); 
     } 
+0

有没有这样的方法调用类型为'java.sql.Connection'的执行 - 也许你的意思是'con.commit()'?这不应该被要求,尽管默认情况下连接处于自动提交模式,所以'ps.executeUpdate()'应该足以提交事务。 – JamesB

+0

我已更正提交代码。 –

0

假设addData方法正确调用,ps.executeUpdate();声明应设定值后调用,即在代码中的ps.setString(5,email);行。

+0

亲爱的先生,我已经做到了这一点,并执行它与主要功能的添加,然后也没有插入到数据库中的数据 – Karangupta

+0

@Karangupta几件事情:首先,你需要执行准备好的语句*之前*关闭连接即, 'ps.executeUpdate(); con.close();'。其次,我建议不要打开和关闭每个查询执行的连接,因为这会很慢。打开连接并重新使用它会更好,直到完成数据库,然后关闭连接。 – SnakeDoc

+0

@Karanguptan并且在'ps.setString(5,email);'之后移动了'ps.executeUpdate();'语句。 –

0

我发现,它并没有存储在我的获取文本已声明的变量的值。在这里,我将介绍问题所在的行动监听器。 代码

//ActionListener 
     save.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent ae){ 
      //getting data from user 
      try{ 
      String demail,checkdemail; 
      int dcode,dtelephone; 
      String dname=tname.getText(); 
      String daddress=taddress.getText(); 
      checkdemail=temail.getText(); 
      demail=validateEmail(checkdemail); 
      String stelephone=ttelephone.getText(); 
      dtelephone=Integer.parseInt(stelephone); 
      String scode=tcode.getText(); 
      dcode=Integer.parseInt(scode); 
      System.out.println(dname+daddress+demail+dtelephone+dcode); 
      addData(dname,dcode,daddress,dtelephone,demail); 

      }catch(Exception e){}   
      } 
     });