Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
getText()在java中无法正常工作_Java_Swing_Jdbc_Odbc - Fatal编程技术网

getText()在java中无法正常工作

getText()在java中无法正常工作,java,swing,jdbc,odbc,Java,Swing,Jdbc,Odbc,这是我的代码,getText()不会返回从JTextField获取的文本。我的数据库只有两个列,MovieName和AirDate&系统DSN是movieDSN import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; public class MovieR

这是我的代码,getText()不会返回从JTextField获取的文本。我的数据库只有两个列,
MovieName
AirDate
&系统DSN是
movieDSN

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MovieReminder implements ActionListener{
    //Public members of class
    JFrame frame= new JFrame("Add Movie");
    JPanel moviePane=new JPanel();
    JButton button=new JButton("Add Movie Time");
        JTextField movieName;
        JTextField airDate= new JTextField(15);
        Statement st;
        Connection con;
        String url;
        String sql;
                         String tmpMovieName;
                 String tmpairDate=airDate.getText();

    //GUI method of class making it public to access out side from class as well
    public void initGUI(){
        //adding action listener to our button & its class will be over-ridden at the end
        button.addActionListener(this);
        moviePane.add(new JLabel("Movie Name"));
                movieName=new JTextField(15);
                moviePane.add(movieName);
                tmpMovieName=movieName.getText();

                moviePane.add(new JLabel ("Air Date"));
                moviePane.add(airDate);
                moviePane.add(button);
                frame.add(moviePane);
        frame.setSize(400,400);
        frame.setVisible(true);
    }

        //sql method
        public void addMovie(){
            try{
                //loading Driver
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                //Making Connection
                String url="jdbc:odbc:movieDSN";
                 con=DriverManager.getConnection(url);
                //Creating Statement
                 st=con.createStatement();
                //sql Query to insert record

                 //sql="INSERT INTO movieTime (MovieName,AirDate) VALUES ( '"+movieName.getText()+"','"+airDate.getText()+"' ) ";
                 sql="INSERT INTO movieTime (MovieName,AirDate) VALUES ( '"+tmpMovieName+"','"+tmpairDate+"' ) ";

            }catch(Exception sqlex){
            System.out.println(sqlex);
            }
        }



    //constructor of main class
    MovieReminder(){
        initGUI();
                addMovie();
    }
    //overriding action performed method for our functions
    public void actionPerformed(ActionEvent e){
            try {
                st.executeUpdate(sql);
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            JOptionPane.showMessageDialog(null,"Value Added "+tmpMovieName);
    }

    public static void main(String args[]){
    MovieReminder myObject=new MovieReminder();
    }


}//end movieReminder class
据我所知 您没有初始化MovieName

movieName=new JTextField(15);
moviePane.add(movieName);
tmpMovieName=movieName.getText();
MovieName是一个空的JTextField

你应该试着设置

tmpMovieName=movieName.getText();
在您的actionperformed方法中

在调用sql语句之前执行此操作 而且
当您从jtextfield中获取文本时,您的sql语句应该被更新。如果您将代码放在了错误的位置,请尝试将代码放在
actionPerformed

public void actionPerformed(ActionEvent e){
        try {
            tmpMovieName=movieName.getText();    //Put your code here
            System.out.println("tmpMovieName:"+tmpMovieName);
            st.executeUpdate(sql);
        } catch (SQLException ex) {
            System.out.println(ex);
        }
        JOptionPane.showMessageDialog(null,"Value Added "+tmpMovieName);
}

您应该在action事件中生成查询。并尝试将
PreparedStatements
与placeholer一起使用,以避免
sql注入
这是一种
非法的正向引用
。。不能在声明部分中使用
gettext()

那么就这样写吧

 public void addMovie()
 {
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String url="jdbc:odbc:movieDSN";
            con=DriverManager.getConnection(url);
            st=con.createStatement();
            String tmpairDate=airDate.getText();
            sql="INSERT INTO movieTime (MovieName,AirDate) VALUES ( '"+tmpMovieName+"','"+tmpairDate+"' ) ";

        }catch(Exception sqlex)
        {
            System.out.println(sqlex);
        }
 }

谢谢…

双重否定。。。没有理由不工作……对程序员来说=工作:)@JoshEngelsma这不是双重否定,因为工作和原因是两个独立的上下文,它们都有否定的含义,即!工作&&!原因如果这个程序不起作用,那么很明显它不起作用是有原因的。没有理由它不起作用,因为如果没有理由它不起作用,那么它就会起作用