0

我创建了这个方法,但是当我尝试调用该方法时,它返回一个空指针异常。谁能告诉我怎么了?请帮帮我

public Talent SearchTalentQuery(int talentID){
    String SearchTalentString = "SELECT * FROM TALENT WHERE TALENTID = "+talentID+";";
    Talent talent=null;
    try{
        //error in select query
        if(getOracleXEConnection()!=null){

            Statement statement = conn.createStatement();
            ResultSet rs = statement.executeQuery(SearchTalentString);                       
                   while( rs.next()){
                   talent.setTalentName(rs.getString("talentname"));
                   talent.setTalentFocus(rs.getString("maintalentfocus"));
                   talent.setTalentNationality((rs.getString("nationality")));
                   talent.setTalentGroup(rs.getString("talentgroup"));
                   talent.setTalentHiredate(rs.getString("hiredate"));
                   talent.setTalentAge(Integer.parseInt(rs.getString("age")));
                   talent.setTalentID(Integer.parseInt(rs.getString("talentid")));
                   }

            rs.close();
            statement.close();
            conn.close();


            return talent;
        }
        else{
            return null;
        }
    }
    catch(SQLException | NumberFormatException e){
        e.printStackTrace();
    }
    return null;
4

6 回答 6

5

您没有实例化Talent要分配的对象。

Talent talent=null;
...
talent.setTalentName(...

为了解决您的评论,您正在初始化talent对空指针的引用。您需要实例化一个对象并指向它,以便在其上调用方法。

根据您的约束等,您的方法可能希望返回此Talent对象,或者通过每次迭代创建一个新对象并返回这些对象的集合。

于 2012-10-03T12:41:03.047 回答
3

只需在 while 块的开头实例化您的才能对象

...

while( rs.next()){ 
 talent = new Talent(); //or whatever
 talent.setTalentName(rs.getString("talentname"));

...

于 2012-10-03T12:44:24.513 回答
2

因为您的整个代码不会为人才对象初始化内存。您需要为人才对象初始化内存。

使用:天赋天赋=新天赋();在人才的地方人才=空;

它可能会解决您的问题。

于 2012-10-03T12:46:06.643 回答
1

你需要实例化人才,但你也应该真正使用 PreparedStatement,因为这段代码对 SQL 注入非常开放......

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

最后,为了约定,searchTalentString 应该以小写字符开头(并且可能是最终字符)......

String searchTalentString = "SELECT * FROM TALENT WHERE TALENTID = "+talentID+";";
于 2012-10-03T12:52:32.093 回答
0

改成

String SearchTalentString = "SELECT * FROM TALENT WHERE TALENTID = "+talentID+";";
Talent talent=new Talent();

或者类似的东西。

于 2012-10-03T12:44:33.150 回答
0

例子

   public void Insert(){
            try {
                Statement sta = conn.createStatement();
                Statement consulta = conn.createStatement();
                String query = "SELECT * FROM coches";
                System.out.println("Fecha de entrada");
                String fe = scanner.next();
                System.out.println("Fecha de salida");
                String fs = scanner.next();
                
                ResultSet rs = consulta.executeQuery(query);
                int i = 1;
                while (rs.next()) {
                    System.out.println(i + "," + rs.getString("matricula") + "," + rs.getString("marca") + "," + rs.getString("modelo")); 
                    i++;
                }
                System.out.println("Selecciona el numero del coche");
                int n = scanner.nextInt();
                rs.absolute(n);
               
                
                sta.executeUpdate("INSERT INTO reparaciones (fecha_entrada,fecha_salida,coche) VALUES ('"+ fe + "', '" + fs + "', '" + rs.getString("matricula") + "');");
                
                System.out.println("Reparación insertada, indica los materiales usados");           
               
                String nombre = "";
                
                do{
                    System.out.println("-------------------------------------------------");
                    System.out.println("Nombre :");
                    scanner.nextLine();
                    nombre = scanner.nextLine();                           
                    if(!nombre.equals("")){
                        System.out.println("Cantidad :");
                        int cant = scanner.nextInt();
                        System.out.println("Precio :");
                        int prec = scanner.nextInt();
                        sta.executeUpdate("INSERT INTO materiales (nombre,cantidad,precio,reparacion) VALUES ('"+ nombre + "', '" + cant + "', '" + prec +  "', '" + n + "');");
                    }
               } 
               while(!nombre.equals(""));   
                sta.close();
                rs.close();
                consulta.close();
            } catch (SQLException ex) {
                System.out.println("ERROR:al hacer un Insert");         
                ex.printStackTrace();
            }
        }
        public void Delete(){
            try {
                Statement baja = conn.createStatement();
                Statement consulta = conn.createStatement();
                String query = "SELECT * FROM materiales";
                ResultSet rs = consulta.executeQuery(query);
                int i = 1;
                while (rs.next()) {
                    System.out.println(rs.getInt("id") + "," + rs.getString("nombre"));
                    i++;
                }
                System.out.println("Elige una opcion");
                int opc = scanner.nextInt();
               
                String query2 = "SELECT reparacion FROM materiales WHERE id = " + opc;
                ResultSet rs2 = consulta.executeQuery(query2);
                if(rs2.next()){
                  if(rs2.getInt("reparacion")!=0){
                    System.out.println("No es posible darlo de baja");
                  }
                  else{
                    String queryBaja = "DELETE FROM materiales WHERE id ='" + opc +"'";
                    baja.executeUpdate(queryBaja);
                    System.out.println("Eliminado con exito");  
                  }
                }
    
                
                baja.close();
                consulta.close();
                rs.close();
                rs2.close();
            } catch (SQLException ex) {
                System.out.println("ERROR:al hacer un delete");         
                ex.printStackTrace();           
            }
        }
于 2022-02-07T00:06:07.683 回答