2013-03-24 28 views
-1

我在Java Spring中做了一個簡單的應用程序,該應用程序應該讀寫具有兩個varchar字段的數據庫。在Java中對應用程序的解釋Spring

package learn.spring.example.dao; 

import org.springframework.jdbc.core.PreparedStatementCreator; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Component; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 

@Component 
public class PersonStoreDao implements PersonInter{ 
    @Autowired 
    private JdbcTemplate jdbc; 

    public Long saveData(Person person){ 
    final String querySample="insert into PersonName(first_name, last_name)  values (?, ?)"; 
    jdbc.update(new PreparedStatementCreator() { 
     public PreparedStatement prepStatement(Connection c) throws SQLException { 
     PreparedStatement prep = c.prepareStatement(querySample); 
     prep.setString(1, person.getFirstName()); 
     prep.setString(2, preson.getSecondName()); 
     return prep; 
     } 
     ,key} 
     } 
} 

Class Person只是一個簡單的bean類,PersonName是具有兩個字段的數據庫表。我對此有幾個問題。

第一個問題是,如果事情是錯

什麼是JDBC變量和@Component前使用@Autowired的影響?

它如何正確嵌入到與該項目相關的xml文件中?

我可以連接到數據庫,但不能寫它。應該怎麼做才能讓數據庫不僅被讀取而且被寫入?

回答

1

在jdbc變量和@Component前面使用@Autowired有什麼作用?

這些使基於Spring註解的接線處理器知道這是一個需要接線的類,並且值應該被注入到jdbc變量中。

它如何正確嵌入到與該項目相關的xml文件中?

它可以。接線由註釋處理器完成。據推測,它會注入一個你在XML文件中聲明的類型爲JdbcTemplate的bean。

我可以連接到數據庫,但不能寫它。應該怎麼做才能讓數據庫不僅被讀取而且被寫入?

您沒有向我們展示XML,但我懷疑問題出在那裏。推測你已經指定了一個帶有DataSource的JdbcTemplate bean,並且DataSource連接到一個只允許讀訪問的數據庫帳戶。如果是這種情況,則需要使用不同的數據庫帳戶,或者爲您正在使用的帳戶授予所需的訪問權限。

+0

應該修改哪些xml以允許寫入數據庫?請給我一個例子,可能與我的代碼有關。 – user1929959 2013-03-24 11:25:46

+0

@ user1929959 - 可能不在XML中。這可能是數據庫帳戶創建的方式。如果你自己沒有這樣做,請告訴做過的人。 – 2013-03-24 22:46:11

1

@AutoWired是定義當前bean所需的其他bean的註釋方式。例如看看下面的內容;

<bean id="person" class="com.Person"> 
<property name="jdbcTemplate" ref="jdbcTemplate"/> 
</bean> 

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

在下面的代碼片段中,您可以看到我們必須在Person類中定義一個ref bean。但是,當我們使用@AutoWired時,我們可以消除這種情況,因爲jdbcTemplate會自動注入到Person類中。

這裏需要注意的一點是,如果您嘗試通過接口類型自動連線並且您的應用程序有很多實現,那麼您應該使用@Qualifier的概念來告訴Spring實現哪個版本你想注入你的當前bean。

至於@Component,通過將你的bean定義爲@Component,你告訴Spring Container瀏覽所有註解的Annotation,並使它們在Spring Context中可用。通過這樣做,您不必在XML文件中定義您的bean。有關@Component和@Configuration的更多或更少的信息可以在以下thread中找到。

關於您無法連接到數據庫的問題,請提供您正在使用的當前應用程序上下文XML文件,以便我們看到如何連接JDBCTemplate。

+0

請給我一個例子如何顯示xml以允許寫入數據庫。 – user1929959 2013-03-24 11:24:24

+0

爲了解決你的問題,我需要看看你是如何做到這一點,所以我可以告訴什麼是問題,有很多方法來連接數據源,可以找到,如果你谷歌周圍。 – dinukadev 2013-03-25 03:47:32

相關問題