-1

我在 Java Spring 中做了一个简单的应用程序,它应该读取和写入具有两个 varchar 字段的数据库。

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}
       }
}

Person 类只是一个简单的 bean 类,而 PersonName 是来自数据库的具有两个字段的表。我对此有几个问题。

第一个问题是是否有问题

在jdbc变量和@Component前面使用@Autowired有什么作用?

它如何正确嵌入到与该项目相关的 xml 文件中?

我可以连接到数据库,但不能写它。应该怎么做才能使数据库不仅可以读取而且可以写入?

4

2 回答 2

1

在jdbc变量和@Component前面使用@Autowired有什么作用?

这些使基于 Spring 注释的连接处理器意识到这是一个需要连接的类,并且应该将一个值注入到jdbc变量中。

它如何正确嵌入到与该项目相关的 xml 文件中?

有可能。接线由注释处理器完成。大概它会注入一个类型是JdbcTemplate您在 XML 文件中声明的 bean。

我可以连接到数据库,但不能写它。应该怎么做才能使数据库不仅可以读取而且可以写入?

您没有向我们展示 XML,但我怀疑问题就在那里。大概您已经指定了一个带有 DataSource 的 JdbcTemplate bean,并且 DataSource 正在连接到一个只允许读取访问的数据库帐户。如果是这种情况,您需要使用不同的数据库帐户,或者为您正在使用的帐户授予所需的访问权限。

于 2013-03-24T01:59:10.860 回答
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 扫描所有使用该注解注解的 bean,并使其在 Spring Context 中可用。通过这样做,您不必在 XML 文件中定义您的 bean。更多关于 @Component 和 @Configuration 的信息或多或少相似,可以在以下线程中找到。

关于您无法连接到数据库的问题,请提供您正在使用的当前应用程序上下文 XML 文件,以便我们了解您是如何连接 JDBCTemplate 的。

于 2013-03-24T02:01:03.970 回答