仅可以为插入long列的long值赋值

plusjava 2006-08-25 09:34:13
软件环境:
数据库,oracle 9i,用的驱动是10g 的,
spring+jdbc

public class BaseDaoJdbc extends JdbcDaoSupport implements IBaseDao {

public boolean toAdd(String tabName, Map m) {

try {

StringBuffer sbFieldPart = new StringBuffer(0);

StringBuffer sbValuePart = new StringBuffer(0);

Set s = m.keySet();

Iterator it = s.iterator();

// 设置 Set 部分
int i = 0;
while (it.hasNext()) {
String key = (String) it.next();
if (key != null) {
if (i != 0) {
sbFieldPart.append(",");
sbValuePart.append(",");
}
sbFieldPart.append(key);
sbValuePart.append("? ");

i++;
}
}

Object[] obj = new Object[i];

StringBuffer sb = new StringBuffer();
sb.append("insert into ").append(tabName).append("(").append(
sbFieldPart.toString()).append(") values ( ").append(
sbValuePart.toString()).append(")");

if (log.isInfoEnabled()) {

log.info("增加sql 语句: " + sb.toString());
}

it = s.iterator();
i = 0;

while (it.hasNext()) {
String key = (String) it.next();
// if ( (key != null) && (key.equalsIgnoreCase(locName))) {
if (key != null) {

obj[i] = m.get(key);
i++;

}
}



final Object []psobj=obj;
PreparedStatementSetter ps=new PreparedStatementSetter(){

public void setValues(PreparedStatement arg0) throws SQLException {

for(int i=0;i<psobj.length;i++){

if (psobj[i] instanceof Date) {
arg0.setTimestamp(i+1,new java.sql.Timestamp( ( (java.util.Date) psobj[i]).getTime()));

} else {
arg0.setString(i+1, psobj[i].toString());
}

}


}

};

getJdbcTemplate().update(sb.toString(),ps);



return true;

} catch (Exception e) {

log.error("增加记录出错: " + e.toString());
}

return false;
}
配置文件:
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>

<bean id="iBaseDao" class="org.zjecredit.common.dao.BaseDaoJdbc">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate" />
</property>
</bean>

错误提示信息:
经常会报
仅可以为插入long列的long值赋值 数据库里面是clob类型的
form提交的时候,这个字段是String类型的,用的是setString方法,
你的分析:
用10g的驱动不是可以当string处理的?
配置文件:
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>

<bean id="iBaseDao" class="org.zjecredit.common.dao.BaseDaoJdbc">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate" />
</property>
</bean>

错误提示信息:
经常会报
仅可以为插入long列的long值赋值 数据库里面是clob类型的
form提交的时候,这个字段是String类型的,用的是arg0.setString(i+1, psobj[i].toString());
因为这个增加的方法是共用的,存数据的时候类似于
m.put("vcCNID", name);
m.put("vcCNCID", cf.getPid());
m.put("vcTitle", cf.getTitle().trim());
m.put("clContent",cf.getContent1().trim());
m.put("vcSource", cf.getSource().trim());
m.put("dtDate", new Date());
m.put("vcplace",cf.getPlace());
m.put("isImg",cf.getIsimg());
m.put("cstate",cf.getState());

用ps.setClob又不知道哪个是clob类型的

用10g的驱动不是可以当string处理的?
...全文
727 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
terry_yip 2006-08-25
  • 打赏
  • 举报
回复
关于String 和clob的转型,你可以自己定个函数来处理,你说这个增加的方法是共用,我觉得一个公用的数据库插入数据方法,写时应该适应不同的数据类型,这才叫“扩展性”。如果不知道哪个是clob类型的,你在put()中多加个参数,来识别插入的数据类型就可以了,例如0为String,1为clog, 又或者给我的一段转换代码你参考一下,你在插入前把clob转成String就可以了:

clob = rs2.getClob("subject");
if (clob != null) {
Reader is = clob.getCharacterStream();
BufferedReader br = new BufferedReader(is);
String s = br.readLine();
while (s != null) {
strContent += s;
s = br.readLine();
}
}


67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧