package JDBC;
import java.sql.*;import oracle.jdbc.*;
import java.util.*;
public class FirstJdbc {
public static void main(String[] args){
Driver d=new OracleDriver();
Properties p=new Properties();
p.setProperty("user", "orcl");
p.setProperty("password", "sys");
try {
Connection con=d.connect("jdbc:orcle:[email protected]:1521:ORCL", p);
Statement st=con.createStatement();
String sql="select * from student";
ResultSet rs=st.executeQuery(sql);


} catch (SQLException e) {
e.printStackTrace();
}

}
}
eclipse提示:
Exception in thread "main" java.lang.NullPointerException
at JDBC.FirstJdbc.main(FirstJdbc.java:14)
第14行是:Statement st=con.createStatement();
确认connect字符串没有错误的,可为啥还报空指针异常呢?谢谢解答!

解决方案 »

  1.   

    通过JDBC操作ORACLE数据库实例详解 此例子采用JDBC2.0,和ORACLE9i数据库。数据库位于本机上。采用数据库自带的SCOTT模式。内附有详细的注释,我想我应该不用多讲了吧import java.sql.*;
    import oracle.sql.*;
    import oracle.jdbc.pool.OracleDataSource;public class JdbcOracle {
      public static void main(String[] args) {    /**URL格式:drivername:@driver_information
           1,drivername主要有以下两种
           jdbc:oracle:thin (thin驱动程序)
           jdbc:oracle:oci (oci驱动程序)
           2,driver_information
           host_nameort:database_sid
         */    Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        String url = "jdbc:oracle:thin:@localhost:1521:ORADB";
        String username = "scott";
        String password = "tiger";
        try {      /**一、注册驱动程序
              方法一Class.forName("oracle.jdbc.OracleDriver";
           */      DriverManager.registerDriver(new oracle.jdbc.OracleDriver());      //二、打开数据库连接
          /**方法一,使用oracle数据源对象?
               oracle.jdbc.pool.OracleDataSource ds=new oracle.jdbc.pool.OracleDataSource();
              ds.setServerName("localhost";
              ds.setDatabaseName("ORADB";   //数据库存名
              ds.setDriverType("oci";  //要使用的JDBC驱动程序(OracleDatasore的扩展)
              ds.setURL("jdbc:oracle:thin:@localhost:1521:ORADB"; //指定数据库的URL(OracleDataSource的扩展)
              ds.setDataSourceName("";     //底层数据源的名称
              ds.setNetworkProtocol("tcp";//用于数据库通信的协议
              ds.setPortNumber(1521);//端口号
              ds.setUser("scott";
              ds.setPassword("tiger";
              Connection conn=ds.getConnection();
           */
          //方法二、使用Drivermanger      conn = DriverManager.getConnection(url, username, password);      //设置事务提交模式
          //conn.setAutoCommit(true);
          //若禁止了自动提交模式,那么在关闭Connection对象时会执行一次自动隐式提交,以保证还没有提交的所有DML语句被自动提交      conn.setAutoCommit(false);      //三、创建JDBC Statement对象      stmt = conn.createStatement();      //PreparedStatement pstmt=conn.prepareStatement("带有参数的SQL语句";
          //CallableStatement cstmt=conn.prepareCall("调用存储过程的语句";
          //四、从数据库获取行
          /**select 语句用executeQuery()
              insert,update,delete语句用executeUpdate()
              若预先不知道要执行的SQL语句类型,那么用execute()
           */      rs = stmt.executeQuery("select id,name,age,sex,birth from employee";//五、从数据库获取行      while (rs.next()) {
            int id = rs.getInt("id";
            String name = rs.getString("name";
            int age = rs.getInt("age";
            String sex = rs.getString("sex";
            Date birth = rs.getDate("birth";
          }
          //rs.close();
          //六、向数据库中添加行(注:月份的编码是从0开始的,因此月份1代表2月)      java.sql.Date date = new java.sql.Date(82, 10, 05);
          int i = stmt.executeUpdate("insert into employee values" +
                                     "(1,'qds',22,'1',TO_DATE(date,'YYYY,MM,DD'))";
          //七、修改数据中的行      int j = stmt.executeUpdate("update employee set age=21 where id=1";
          //八、从数据库中删除行      int k = stmt.executeUpdate("delete from employee set id=1";
          //九、处理数据库的NULL值方法一:使用结果集对象的wasNull方法判断      conn.commit();
          rs = stmt.executeQuery(
              "select id,type_id,prod_name from product where id=1";      //此次假设type_id列为Null值
          System.out.println("id=" + rs.getInt("id");
          System.out.println("type_id=" + rs.getInt("type_id");
          if (rs.wasNull()) {
            System.out.println("type_id was null!";
          }
          System.out.println("prod_name=" + rs.getString("prod_name");      //九、处理数据库的NULL值方法二:使用JAVA包装器类.因为JAVA包装器类可以赋于NULL值
          //java.lang.Integer typeId=(java.lang.Integer)rs.getObject("type_id";
          //System.out.println(typeId);此时typeId的值为Null
          //在向数据库插入或更新某一行为NULL值时,也可以使用JAVA包装器对象
          //java.lang.Double price=null;
          //int ii=stmt.executeUpdate("update products set price="+price+" where id=12";      rs.close();      //十,执行数据定义语言语句(DDL:CREATE,ALTER,DROP)----采用execute()方法执行DDL语句
          //执行DDL语句会导致一次隐式提交,因此,如果你在发出DDL语句之前执行了一些未提交的DML语句,那么这些DML语句将被提交      boolean result = stmt.execute("create table customers(" +
              "id integer constraint customers_pK primary key," +
              "first_name varchar2(10) not null," +
              "last_name  varchar2(10) not null," +
              "dob        date," +
              "phone      varchar2(15)" +
              ""
              ;
          if (result == true) {
            System.out.println("The table has Created!";
          }
          else {
            System.out.println("The table hasn't Create";
          }
          //-------------------------------------------------------------------------   
        }
        catch (Exception e) {
          System.out.println("error: " + e);
          try {
            conn.rollback();
          }
          catch (SQLException sqle) {}
        }
        finally {      try {
            if (rs != null)
              rs.close();
          }
          catch (SQLException sqle) {
            System.out.println("SQLState: " + sqle.getSQLState());
            System.out.println("SQLErrorCode: 错误代码" + sqle.getErrorCode());
            System.out.println("SQLErrorMessage:错误情况的字符串 " + sqle.toString());
          }      try {
            if (stmt != null)
              stmt.close();
          }
          catch (SQLException sqle1) {
            System.out.println("SQLState: " + sqle1.getSQLState());
            System.out.println("SQLErrorCode: 错误代码" + sqle1.getErrorCode());
            System.out.println("SQLErrorMessage:错误情况的字符串 " + sqle1.toString());
          }      try {
            if (conn != null)
              conn.close();
          }
          catch (SQLException sqle2) {
            System.out.println(sqle2.toString());
            System.out.println(sqle2.getSQLState());
            System.out.println(sqle2.getErrorCode());
          }    }  }
    }本文来自CSDN博客http://blog.csdn.net/cyz1980/archive/2006/01/11/575929.aspx
      

  2.   

    connection连接对象是空导致!   看看你获取连接是不是没获取到
      

  3.   

    谢了,知道哪里的原因了 jdbc:orcle:[email protected]:1521:ORCL  字符串应为:jdbc:oracle:thin:@127.0.0.1:1521:ORCL