package jdbc.score.mapper; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; import jdbc.score.entities.Student; public class StudentMapper implements RowMapper<Student> { //自定义映射规则 public Student mapRow(ResultSet arg0, int arg1) throws SQLException { // TODO Auto-generated method stub } }
时间: 2024-03-04 20:53:22 浏览: 91
这是一段 Java 代码,是使用 Spring JDBC 操作数据库时的一个映射类。其中,`StudentMapper` 实现了 `RowMapper` 接口,用于将查询结果集中的一行记录转换为 `Student` 对象。在 `mapRow()` 方法中,可以自定义映射规则,将查询结果中的字段值与 `Student` 对象的属性进行映射。具体实现方式可以根据项目需求不同而不同。
相关问题
补全代码 根据班级查找学生信息(支持模糊查找),并输出学生信息。 最终运行结果如下: 学生姓名:汪罗睿 所在班级:软工1503 生日: 1995-11-02 性别:男 址:北京市利星行广场微软大厦206体验中心 联系电话: 13939688375 ****** *****★- *★★★★★ 学生姓名:王玉强 所在班级:软工1503 生日: 1995-09-07 性别:男 址:吉林省长春市东南湖大路1281号 联系电话: 16070958343 轩 ****** ***** 学生姓名:王浩 所在班级:软工1502 生日: 1996-02-09 性别:男 址:福建省福州市湖东路中大厦,兴业银行 联系电话: 15851868080 ****** ****** ****** 学生姓名:包敦喜 所在班级:软工1503 生日: 1995-05-15 性别:男 住址:北京市西城区阜成i ]外大街29号, 联系电话: 17215808700 ****** ****** ****** package jdbc.score.dao.impl; import java.util.List; import org.springframework.jdbc.core.JdbcTemplate; import jdbc.score.dao.StudentDao; import jdbc.score.entities.Student; import jdbc.score.mapper.StudentMapper; public class StudentMapper implements RowMapper<Student> { //自定义映射规则 public Student mapRow(ResultSet arg0, int arg1) throws SQLException { // TODO Auto-generated method stub ...........(代码1) }
补全代码如下:
package jdbc.score.dao.impl;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import jdbc.score.dao.StudentDao;
import jdbc.score.entities.Student;
import jdbc.score.mapper.StudentMapper;
public class StudentDaoImpl implements StudentDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<Student> findByClass(String className) {
String sql = "SELECT * FROM student WHERE class_name LIKE ?";
Object[] args = {"%" + className + "%"};
return jdbcTemplate.query(sql, args, new StudentMapper());
}
//其他方法省略
}
其中,代码1应该是这样的:
Student student = new Student();
student.setId(arg0.getInt("id"));
student.setName(arg0.getString("name"));
student.setClassName(arg0.getString("class_name"));
student.setBirthday(arg0.getDate("birthday"));
student.setGender(arg0.getString("gender"));
student.setAddress(arg0.getString("address"));
student.setTel(arg0.getString("tel"));
return student;
org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column 'FIELD' from result set. Cause: java.sql.SQLException: ORA-17004: 列类型无效: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor ; uncategorized SQLException; SQL state [99999]; error code [17004]; ORA-17004: 列类型无效: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor; nested exception is java.sql.SQLException: ORA-17004: 列类型无效: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor
这个异常是由于Oracle JDBC驱动程序不支持使用getCLOB方法获取long类型字段值,而你在结果集中使用该方法获取long类型字段的值,导致了这个异常。
解决这个问题的方法是使用getAsciiStream或getCharacterStream方法获取long字段的值。这两个方法返回一个InputStream或Reader对象,你可以使用这些对象从结果集中读取long字段的值。
例如,如果你的long字段名为FIELD,可以使用以下代码获取该字段的值:
```
String field = null;
try {
InputStream is = resultSet.getAsciiStream("FIELD");
if (is != null) {
byte[] bytes = new byte[is.available()];
is.read(bytes);
field = new String(bytes);
}
} catch (IOException e) {
// handle exception
}
```
这里通过getAsciiStream方法获取了long字段的值,并将其转换为字符串。
另外,在使用MyBatis查询Oracle数据库时,可以在mapper文件中使用<![CDATA[...]]>将SQL语句包裹起来,以避免出现类似getCLOB not implemented的错误。例如:
```
<select id="getLongField" resultType="java.lang.String">
<![CDATA[
SELECT TO_CLOB(FIELD) AS FIELD FROM TABLE
]]>
</select>
```
这里使用了TO_CLOB函数将long类型字段转换为CLOB类型,避免了getCLOB not implemented的错误。
阅读全文