getText()在java中无法正常工作
这是我的代码,getText()不会返回从JTextField获取的文本。我的数据库只有两个列,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
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这不是双重否定,因为工作和原因是两个独立的上下文,它们都有否定的含义,即!工作&&!原因如果这个程序不起作用,那么很明显它不起作用是有原因的。没有理由它不起作用,因为如果没有理由它不起作用,那么它就会起作用