Java 如何在方法上添加 JOptionPane 消息
Java How to add JOptionPane Messages on Method
我正在制作一个 GUI,用户可以在其中输入任何电影 name.If 数据库中有该电影,然后它会出现在 ide 控制台上,如果没有,则显示 message.Now 程序给出正确的输出在 ide 控制台上,当用户输入 database.But 中的任何相关电影时,问题是当输入任何不在数据库中的错误电影名称时,程序不会执行任何 thing.I 想要的操作像这样从数据库中找不到任何内容时给出 JOptionPane
消息
以及何时找到数据。
但是我不知道该怎么做。
代码:
public class Find extends JFrame{
private JLabel keyword;
private JTextField tx;
private JComboBox box;
private Connection conn;
private PreparedStatement pre;
private ResultSet set;
private ResultSetMetaData meta;
String server = "jdbc:mysql://localhost/demo";
String user="root";
String pass="pass";
public Find(){
super("Frame");
getContentPane().setLayout(null);
keyword= new JLabel("Keyword");
keyword.setBounds(170, 100, 96, 37);
getContentPane().add(keyword);
box = new JComboBox();
box.setModel(new DefaultComboBoxModel(new String[] {"Title"}));
box.setBounds(42, 139, 63, 20);
getContentPane().add(box);
//textfield
tx= new JTextField();
tx.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent arg0) {
try{
conn=DriverManager.getConnection(server,user,pass);
String option = (String) box.getSelectedItem();
String query = "select title,year from movies where "+option+"=?";
//statement
pre = conn.prepareStatement(query);
pre.setString(1, tx.getText());
set= pre.executeQuery();
ResultSetMetaData meta = set.getMetaData();
int totalcolumn=meta.getColumnCount();
while(set.next()){
for(int i=1;i<=totalcolumn;i++){
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
}
}
catch(Exception e1){
JOptionPane.showMessageDialog(null, e1.getMessage());
}
}
});
tx.setBounds(120, 136, 202, 27);
getContentPane().add(tx);
setSize(450,450);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setResizable(false);
setVisible(true);
}
}
主要
public class FindMain {
public static void main(String[] args) {
Find ooper = new Find();
}
}
set.getObject(columnIndex) returns null 如果执行 SQL 查询的结果为 NULL。但在你到达那里之前,请检查 set 是否有任何元素。
尝试以下操作:
ResultSetMetaData meta = set.getMetaData();
int totalcolumn = meta.getColumnCount();
if (!set.next() ) {
JOptionPane.showMessageDialog(null, "No data");
} else {
do {
for(int i = 1; i <= totalcolumn; i++) {
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
} while(set.next());
}
您想检查您的查询 returns 是否为空结果集。方法 isBeforeFirst() returns 如果光标未位于第一行之前 或者如果集合不包含行
,则为 false
if (!set.isBeforeFirst()) {
//Here you can display your 'failure' JOptionPane
}
else {
//Here you can put your code that handles your set, including your 'success' JOptionPane
}
例如我会提议这样的改变:
...
set = pre.executeQuery();
if (!set.isBeforeFirst()){
JOptionPane.showMessageDialog(null, "The record was not found.");
}
else{
ResultSetMetaData meta = set.getMetaData();
int totalcolumn=meta.getColumnCount();
while(set.next()){
for(int i=1;i<=totalcolumn;i++){
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
}
}
}
catch(Exception e1){
...
我正在制作一个 GUI,用户可以在其中输入任何电影 name.If 数据库中有该电影,然后它会出现在 ide 控制台上,如果没有,则显示 message.Now 程序给出正确的输出在 ide 控制台上,当用户输入 database.But 中的任何相关电影时,问题是当输入任何不在数据库中的错误电影名称时,程序不会执行任何 thing.I 想要的操作像这样从数据库中找不到任何内容时给出 JOptionPane
消息
以及何时找到数据。
但是我不知道该怎么做。
代码:
public class Find extends JFrame{
private JLabel keyword;
private JTextField tx;
private JComboBox box;
private Connection conn;
private PreparedStatement pre;
private ResultSet set;
private ResultSetMetaData meta;
String server = "jdbc:mysql://localhost/demo";
String user="root";
String pass="pass";
public Find(){
super("Frame");
getContentPane().setLayout(null);
keyword= new JLabel("Keyword");
keyword.setBounds(170, 100, 96, 37);
getContentPane().add(keyword);
box = new JComboBox();
box.setModel(new DefaultComboBoxModel(new String[] {"Title"}));
box.setBounds(42, 139, 63, 20);
getContentPane().add(box);
//textfield
tx= new JTextField();
tx.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent arg0) {
try{
conn=DriverManager.getConnection(server,user,pass);
String option = (String) box.getSelectedItem();
String query = "select title,year from movies where "+option+"=?";
//statement
pre = conn.prepareStatement(query);
pre.setString(1, tx.getText());
set= pre.executeQuery();
ResultSetMetaData meta = set.getMetaData();
int totalcolumn=meta.getColumnCount();
while(set.next()){
for(int i=1;i<=totalcolumn;i++){
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
}
}
catch(Exception e1){
JOptionPane.showMessageDialog(null, e1.getMessage());
}
}
});
tx.setBounds(120, 136, 202, 27);
getContentPane().add(tx);
setSize(450,450);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setResizable(false);
setVisible(true);
}
}
主要
public class FindMain {
public static void main(String[] args) {
Find ooper = new Find();
}
}
set.getObject(columnIndex) returns null 如果执行 SQL 查询的结果为 NULL。但在你到达那里之前,请检查 set 是否有任何元素。
尝试以下操作:
ResultSetMetaData meta = set.getMetaData();
int totalcolumn = meta.getColumnCount();
if (!set.next() ) {
JOptionPane.showMessageDialog(null, "No data");
} else {
do {
for(int i = 1; i <= totalcolumn; i++) {
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
} while(set.next());
}
您想检查您的查询 returns 是否为空结果集。方法 isBeforeFirst() returns 如果光标未位于第一行之前 或者如果集合不包含行
,则为 falseif (!set.isBeforeFirst()) {
//Here you can display your 'failure' JOptionPane
}
else {
//Here you can put your code that handles your set, including your 'success' JOptionPane
}
例如我会提议这样的改变:
...
set = pre.executeQuery();
if (!set.isBeforeFirst()){
JOptionPane.showMessageDialog(null, "The record was not found.");
}
else{
ResultSetMetaData meta = set.getMetaData();
int totalcolumn=meta.getColumnCount();
while(set.next()){
for(int i=1;i<=totalcolumn;i++){
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
}
}
}
catch(Exception e1){
...