我正在尝试将应用程序连接到数据库。
我没有给出错误,但是它没有获取信息。
我尝试从命令行运行tnsping来查看侦听器是否打开,并且它说没问题。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.io.*;
import javax.swing.*;
public class Connector extends JFrame{
public static void main(String[] args) throws SQLException, ClassNotFoundException
{
Connection conn = null;
//Statement stmt = null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:dbserver", "scott","tiger");
}
catch(SQLException e)
{ JOptionPane.showMessageDialog(null,e.getMessage(), "Erro na COnexao!",JOptionPane.ERROR_MESSAGE);
}
catch(Exception e)
{ e.printStackTrace();
}
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * FROM AnimalM");
System.out.println ("Nome Salario");
if (rset.next()){
System.out.println("Aloooo");
int cod = rset.getInt(1);
String nome = rset.getString(2);
String nome_es = rset.getString(3);
int id = rset.getInt(4);
System.out.println (cod+" "+nome+" "+nome_es+" "+id);
}
rset.close(); //Close ResultSet
stmt.close(); //Close Statement
conn.close(); //Close Connection
}
}
它一直运行到以下指令:
System.out.println(“ Nome Salario”);
然后没有其他显示,程序停止。
有谁知道会发生什么?
最佳答案
我建议逐步使用Eclipse中的调试器以查看发生了什么。也许查询不返回任何行。
一个设计说明:此类将UI,连接获取和数据库访问混合在一起。更好的方法是将它们分成不同的类。测试一个功能,放在一边,然后让其他类简单地使用您刚刚实现并证明可以正常工作的功能。
当一堂课做得太多时,您将不知道问题出在哪里。
您也没有正确关闭资源。那些应该包装在单独的try / catch块中。
我将所有代码放入一个try / catch中,最后阻塞并最后关闭资源。
我会将连接传递到数据访问对象中,该对象将负责获取ResultSet并将其映射到对象或数据结构中。
我会将所有Swing移出数据库层。您可以重用它而不必那样摇摆(例如,如果切换到Web UI)。