2016-08-16 42 views
0

大家好,我正在使用rest和mysql作爲我的數據庫。從MySQL獲取空指針異常db db

下面是我的休息獲取代碼用於獲取allbooks(資源)

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response getBooks(@QueryParam("format") String format) { 

    //line35: return Response.status(Status.OK).entity((new GenericEntity<List<Book>>(bookService.getAllBooks()) { 
    })).header(HttpHeaders.CONTENT_TYPE, "XML".equalsIgnoreCase(format) 
      ? MediaType.APPLICATION_XML + ";charset=UTF-8" : MediaType.APPLICATION_JSON + ";charset=UTF-8").build(); 

} 

下面是我的服務

public List<Book> getAllBooks() { 

    //books service line 24 return new ArrayList<Book>(booksDao.getAllBooks()); 
    /* return new ArrayList<Book>(books.values()); */ 
} 

BooksDAO類

public class BooksDAO { 

private JdbcTemplate jdbcTemplate; 

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 
    this.jdbcTemplate = jdbcTemplate; 
} 

public List<Book> getAllBooks() { 
    //books dao line24: return jdbcTemplate.query("select * from books.books_table", new RowMapper<Book>() { 

     @Override 
     public Book mapRow(ResultSet rs, int rownumber) throws SQLException { 
      Book e = new Book(); 
      e.setId(rs.getInt(1)); 

      e.setName(rs.getString(2)); 

      e.setPrice(rs.getString(3)); 

      e.setAuthor(rs.getString(4)); 

      return e; 
     } 


    }); 
} 

下面是我bean.I上午使用springJDBC

<?xml version="1.0" encoding="UTF-8"?> 
<beans 
xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

<bean id="ds" 
class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
<property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
<property name="url" value="jdbc:mysql://localhost:3306/xxxx" /> 
<property name="username" value="xxxx" /> 
<property name="password" value="xxxx" /> 
</bean> 

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
<property name="dataSource" ref="ds"></property> 
</bean> 

<bean id="edao" class="com.nag.library.database.BooksDAO"> 
<property name="jdbcTemplate" ref="jdbcTemplate"></property> 
</bean> 

</beans> 

在不連接數據庫我很好得到JSON/XML響應,但是當我連接DB其拋出一個空指針異常

Aug 16, 2016 10:43:08 AM org.apache.catalina.core.StandardWrapperValve 
invoke  
SEVERE: Servlet.service() for servlet Jersey Web Application threw exception 
java.lang.NullPointerException 
at com.nag.library.database.BooksDAO.getAllBooks(BooksDAO.java:24) 
at com.nag.library.service.BookService.getAllBooks(BookService.java:24) 
at com.nag.library.resource.BookResource.getBooks(BookResource.java:35) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

在那裏我做wrong.Please引導我的東西。

謝謝

+0

您在哪一條指令中擁有NPE? 你應該顯示所有BooksDAO類 – davidxxx

+0

NPE嗎?你能說清楚嗎?我很抱歉,我只是一個學習者。 –

+0

沒問題:NPE = NullPointerException – davidxxx

回答

0

我覺得現在的問題是,你的服務是不是因爲你的春天的conf沒有宣佈Spring管理的bean。 所以你不要使用這些豆類:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
<property name="dataSource" ref="ds"></property> 
</bean> 

<bean id="edao" class="com.nag.library.database.BooksDAO"> 
<property name="jdbcTemplate" ref="jdbcTemplate"></property> 
</bean> 

而作爲結果,你jdbcTemplace是你BooksDAO你在運行時使用null
在此配置中將您的服務添加爲bean,並將其添加爲作爲屬性的bean edao
您還應該將您的服務與您的休息班銜接。

編輯精密:我覺得現在的問題是在這裏,因爲在這一行return jdbcTemplate.query("‌​select * from books.books_table", new RowMapper<Book>()的NullPointerException異常可以有一個單一的原因:JdbcTemplate的爲空。另外,你不要在他的配置中聲明服務bean。此外,方法體內沒有任何指令可能觸發NPE。 -

+0

他之前告訴過,jdbcTemplate的實例並不是空的,我想和你以前一樣,但是如果是聲明bean的aproblem,那麼如果服務上的實例如何調用達到dao類沒有獲得自動裝配? – karelss

+0

不是邏輯。在這一行中返回jdbcTemplate.query(「select * from books.books_table」,new RowMapper ()'nullpointer可以有一個單一的原因:'jdbcTemplate爲null'。 此外,他沒有聲明服務bean他的配置,另外,方法體中沒有任何指令可能觸發一個NPE。 – davidxxx

+0

我沒有看到你編輯了你的註釋,也許他用'new()'實例化了它,或者他使用了另一個dao實例真誠的,我不知道,但NPE是一個bean佈線問題,沒有SQL問題。 – davidxxx

0

我覺得你有毛病您在道映射,你可以發佈帶有行號的代碼,以確保我的suspicius?wihtout行號,我們不能肯定有關與Nullpointer(24)一致。

首先,如果我是你,我會嘗試根據名稱(getString(「COLUMN_NAME」))而不是索引來映射表的字段,以檢查列(index或data_type)是否有問題。

最後,如果這不起作用,請嘗試將空對象映射爲映射器結果,以檢查它是否與查詢有關。

Greatings

+0

當我寫了一個主要的方法,並執行我從table.But所有的值。但我無法返回相同的休息 –

+0

這很奇怪,因爲錯誤正在執行查詢,你使用不同的配置xmls? – karelss

+0

希望是當我打印它返回值的對象 –