2016-03-07 68 views
2

我有一个名为“Duuni”的对象,里面有一些抽象的getter和setter方法,以及Duuni的“DuuniImpl”实现。我使用JdbcTemplate和RowMapper从数据库中检索数据。这里是我的代码:不支持Spring Framework NString

package vjb.de.vietjob.bean; 

import java.util.Date; 

public interface Duuni { 

    public abstract int getId(); 
    public abstract void setId(int id); 

    public abstract String getNimi(); 
    public abstract void setNimi(String nimi); 

    public abstract Date getPaiva(); 
    public abstract void setPaiva(Date paiva); 

    public abstract String getTiedot(); 
    public abstract void setTiedot(String tiedot); 

    public abstract String getPaikka(); 
    public abstract void setPaikka(String paikka); 

    public abstract String getPalkka(); 
    public abstract void setPalkka(String palkka); 



} 

而且DuuniImpl类:

package vjb.de.vietjob.bean; 

import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DuuniImpl implements Duuni { 
    SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd"); 

    private int id; 
    private String nimi; 
    private Date paiva; 
    private String tiedot; 
    private String paikka; 
    private String palkka; 


    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getNimi() { 
     return this.nimi; 
    } 

    public void setNimi(String nimi) { 
     this.nimi = nimi; 
    } 

    public Date getPaiva() { 
     return paiva; 
    } 

    public void setPaiva(Date paiva) { 
     this.paiva = paiva; 
    } 

    public String getTiedot() { 
     return this.tiedot; 
    } 

    public void setTiedot(String tiedot) { 
     this.tiedot = tiedot; 
    } 

    public String getPaikka() { 
     return this.paikka; 
    } 

    public void setPaikka(String paikka) { 
     this.paikka = paikka; 
    } 

    public String getPalkka() { 
     return this.palkka; 
    } 

    public void setPalkka(String palkka) { 
     this.palkka = palkka; 
    } 

    @Override 
    public String toString() { 
     return "duuniIplm [id=" + id + ", nimi=" + nimi + ", paiva=" + paiva 
       + ", tiedot=" + tiedot + ", paikka=" + paikka + ", palkka=" 
       + palkka + "]"; 
    } 


} 

DuuniDaoImpl类:

package vjb.de.vietjob.dao; 

import java.util.List; 

import javax.inject.Inject; 

import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.core.RowMapper; 
import org.springframework.stereotype.Repository; 

import vjb.de.vietjob.bean.Duuni; 



@Repository 
public class DuuniDaoImpl implements DuuniDao { 

    @Inject 
    private JdbcTemplate jdbcTemplate; 

    public JdbcTemplate getJdbcTemplate(){ 
     return jdbcTemplate; 
    } 

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



    public List<Duuni> showDuuni() { 
     String sql = "select * from duuni"; 
     RowMapper<Duuni> duuniRM = new DuuniRowMapper(); 
     List<Duuni> list = jdbcTemplate.query(sql, duuniRM); 
     return list; 
    } 

    public void postDuuni(Duuni duuni) { 
     // TODO Auto-generated method stub 

    } 

    public void deleteDuuni(int id) { 
     // TODO Auto-generated method stub 

    } 

    public void postDuuni() { 
     // TODO Auto-generated method stub 

    } 

} 

DuuniRowMapper类:

package vjb.de.vietjob.dao; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import org.springframework.jdbc.core.RowMapper; 

import vjb.de.vietjob.bean.*; 
public class DuuniRowMapper implements RowMapper<Duuni> { 

    public Duuni mapRow(ResultSet rs, int row) throws SQLException { 
     Duuni duuni = new DuuniImpl(); 
     duuni.setId(rs.getInt("id")); 
     duuni.setNimi(rs.getString("nimi")); 
     duuni.setPaikka(rs.getString("paikka")); 
     duuni.setPaiva(rs.getDate("paiva")); 
     duuni.setPalkka(rs.getString("palkka")); 
     duuni.setTiedot(rs.getNString("tiedot")); 

     return duuni; 
    } 

} 

最后由处理数据的应用程序数据库:

package vjb.de.vietjob.dao; 

import java.util.List; 

import org.springframework.context.support.ClassPathXmlApplicationContext; 

import vjb.de.vietjob.bean.Duuni; 

public class test { 

    public static void main(String[] args) { 
     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("vietjob-data.xml"); 
     DuuniDao dao = (DuuniDao) context.getBean("duuniDao"); 
     List<Duuni> d = dao.showDuuni(); 
     for(Duuni duuni : d){ 
     System.out.println(duuni.getNimi()); 
     } 
     context.close(); 

    } 

} 

但是,当我在运行过程中出现的,错误自带的 “NString不supportted”:

0 [main] INFO org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org[email protected]504bae78: startup date [Mon Mar 07 17:25:45 EET 2016]; root of context hierarchy 
60 [main] INFO org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [vietjob-data.xml] 
385 [main] INFO org.springframework.context.support.PropertySourcesPlaceholderConfigurer - Loading properties file from URL [file:/Volumes/Data/JavaEE/workspace/vietjob/target/classes/db_connection.properties] 
635 [main] INFO org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml] 
719 [main] INFO org.springframework.jdbc.support.SQLErrorCodesFactory - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana] 
Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: StatementCallback; SQL [select * from duuni]; NString not supported; nested exception is java.sql.SQLFeatureNotSupportedException: NString not supported 
    at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:94) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:416) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:471) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:481) 
    at vjb.de.vietjob.dao.DuuniDaoImpl.showDuuni(DuuniDaoImpl.java:35) 
    at vjb.de.vietjob.dao.test.main(test.java:14) 
Caused by: java.sql.SQLFeatureNotSupportedException: NString not supported 
    at org.mariadb.jdbc.internal.SQLExceptionMapper.getFeatureNotSupportedException(SQLExceptionMapper.java:165) 
    at org.mariadb.jdbc.MySQLResultSet.getNString(MySQLResultSet.java:2679) 
    at org.apache.commons.dbcp.DelegatingResultSet.getNString(DelegatingResultSet.java:802) 
    at org.apache.commons.dbcp.DelegatingResultSet.getNString(DelegatingResultSet.java:802) 
    at vjb.de.vietjob.dao.DuuniRowMapper.mapRow(DuuniRowMapper.java:17) 
    at vjb.de.vietjob.dao.DuuniRowMapper.mapRow(DuuniRowMapper.java:1) 
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93) 
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60) 
    at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:460) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:405) 
    ... 4 more 

我使用MariaDB的。

+2

可能与您正在使用的'jdbc'驱动程序有关。请参阅http://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html#getNString-java.lang.String-如果JDBC驱动程序不支持'getNString (String columnLabel)'方法 –

+0

我使用JDBC的最新版本,它是4.1.4.RELEASE。 –

回答

1

使用rs.getString("tiedot")而不是rs.getNString("tiedot"),因为MariaDB Connector/J不支持它。

+0

这是正确的,谢谢。不知道为什么我使用它,因为它没有必要。 –