【问题标题】:Connecting Eclipse(Java) to Oracle Database将 Eclipse(Java) 连接到 Oracle 数据库
【发布时间】:2011-12-27 16:31:03
【问题描述】:

我正在尝试将我的应用程序连接到我的数据库。 我没有给出错误,它运行但它不获取信息。 我试过从命令行运行 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");

然后没有其他显示,程序停止。

有人知道会发生什么吗?

【问题讨论】:

  • 要验证您在该表中是否确实有数据,请在您选择的 SQL 工具中运行查询 SELECT * FROM AnimalM
  • 我确实在那个表中有数据。我只是不知道发生了什么。 @a_horse_with_no_name
  • 您使用的用户名和密码是否正确? SCOTT 用户通常没有名为 AnimalM 的表

标签: java eclipse oracle jdbc


【解决方案1】:

我建议单步调试 Eclipse 中的调试器,看看发生了什么。也许查询没有返回任何行。

一个设计说明:该类将 UI、连接获取和数据库访问合二为一。更好的方法是将它们分成不同的类。测试一个特性,把它放在一边,让其他类简单地使用你刚刚实现并证明可以正常工作的功能。

当你有一个班级做太多事情时,你不知道问题出在哪里。

您也没有正确关闭资源。这些应该包装在单独的 try/catch 块中。

我会将所有代码放入一个 try/catch finally 块中并在最后关闭资源。

我会将连接传递给数据访问对象,该对象将负责获取 ResultSet 并将其映射到对象或数据结构中。

我会将所有 Swing 移出数据库层。你可以在不使用 Swing 的情况下重用它(例如,如果你切换到 Web UI)。

【讨论】:

  • 天哪!它正在工作.. 问题出在 AnimalM 的那张桌子上,我尝试了另一张桌子,它确实打印了。得整理一下。非常感谢您的宝贵时间:)
  • 您也应该将executeQuery() 包装到 try 块中并打印您遇到的任何异常
  • +1,您至少应该对答案进行投票,如果它提供了您需要的解决方案,请接受它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 2021-06-20
  • 2014-01-25
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多