从jTextField到INSERT sql

时间:2014-08-14 10:15:12

标签: java jdbc jtextfield numberformatexception parseint

我想提前感谢你们抽出时间。我正在尝试使用sql语句将在jtextfield中输入的值插入到表中,但我不断收到一堆错误。

听众:

private void jTextField1FocusLost(java.awt.event.FocusEvent evt) {
    name = jTextField1.getText();
}                                     

private void jTextField2FocusLost(java.awt.event.FocusEvent evt) {
    username = jTextField2.getText();
}                                     

private void jTextField3FocusLost(java.awt.event.FocusEvent evt) {
    String pword = jTextField2.getText();
    password = Integer.parseInt(pword);
    //the convertion is essential because the password column in the table is defined as integer
}                                     

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    register regis = new register(name, username, password);
    regis.registerUser();
} 

INSERT:

public class register {

    public String name;
    public String username;
    public Integer password;

    public register(String nm, String uname, Integer passw) {
        name = nm;
        username = uname;
        password = passw;
    }

    public void registerUser(){

        try { 
            String host = "jdbc:derby://localhost:1527/fypDB";
            String uname = "uname";
            String pword = "123456";
            Connection con = DriverManager.getConnection( host, uname, pword );
            Statement stmt = con.createStatement();

            String SQL = "INSERT INTO LOGIN VALUES('"+username+"',"+password+")";
            stmt.executeUpdate( SQL );
        } catch (SQLException err){
            System.out.println(err.getMessage());
        }
    }
}

LOGIN表只有2列,所以我忽略了“name”变量。

由于我无法上传图像,我将描述界面。 textfield 1和2输入“test13”,输入密码的第3个文本字段输入“10”,然后点击注册按钮。

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "test13"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at Interface.Register.jTextField3FocusLost(Register.java:137)
at Interface.Register.access$200(Register.java:15)
at Interface.Register$3.focusLost(Register.java:63)
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:230)
at java.awt.Component.processFocusEvent(Component.java:6419)
at java.awt.Component.processEvent(Component.java:6283)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:995)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
at java.awt.Component.dispatchEventImpl(Component.java:4754)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

3 个答案:

答案 0 :(得分:0)

jTextField3FocusLost jTextField2,您正在阅读jTextField3而不是test13。因此密码被读作"INSERT INTO LOGIN VALUES('"+username+"',"+password+")";

很少注意到:

  • 将您的班级命名为以大写字母开头。
  • 尝试使用预准备语句而不是{{1}}等SQL语句。
  • 避免以大写字母开头的变量。
  • 使用后始终关闭SQL连接和语句。

答案 1 :(得分:0)

试试这个。您在密码值周围缺少引号。

String SQL = "INSERT INTO LOGIN VALUES('"+username+"','"+password+"')";

答案 2 :(得分:0)

您从错误的字段中获取值。 你必须改变:

String pword = jTextField2.getText();

String pword = jTextField3.getText();