jdbc向数据库里插数据为什么commit了数据库里还是没有数据

duck166 2013-09-06 05:27:18
private static BasicDataSource dataSource;
public void setDataSource(BasicDataSource dataSource){
this.dataSource=dataSource;
}
Log log;

public void setLog(Log log) {
this.log = log;
}
int i = 1;
private static final String SAVESQL = "insert into mcevent_c (LINEMCID,EVENTDATE,EVENTCODE,MAIN_MSG,SUB_MSG,SEQ) values(?,to_date(?,'yyyy/mm/dd HH24:mi:ss'),?,?,?,?)";

@Override
public synchronized void save(McEvent mc) throws Exception {
Connection con = null;
PreparedStatement ps = null;
int set=0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
try {
con = dataSource.getConnection();
ps = con.prepareStatement(SAVESQL);
ps.setString(1, mc.getLineMCID());
ps.setString(2, sdf.format(mc.getEventDate().getTime()));
ps.setString(3, mc.getEventCode());
ps.setString(4, mc.getMainMSG());
ps.setString(5, mc.getSubMSG());
ps.setInt(6, mc.getSeq());
set=ps.executeUpdate();
con.commit();
System.out.println("set="+set+" "+ mc.getLineMCID() + " "
+ sdf.format(mc.getEventDate().getTime()) + " "
+ mc.getEventCode() + " " + mc.getMainMSG() + " ____"
+ mc.getSubMSG() + "_______ " + mc.getSeq());
} catch (SQLException e2) {
con.rollback();
e2.printStackTrace();
log.logger.error(e2.getMessage());
throw e2;
} catch (Exception e2) {
con.rollback();
e2.printStackTrace();
log.logger.error(e2.getMessage());
throw e2;
} finally {
try {
DBUtil.closeConnection(con, ps);
} catch (Exception e) {
e.printStackTrace();
}
}

}

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@172.30.60.58:1538:SPCGTHR"/>
<property name="username" value="spc"/>
<property name="password" value="spc"/>
</bean>



客户端程序
public void start() {
try {
serverSocket = new ServerSocket(8880);
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
try {
Socket s = serverSocket.accept();
invoke(s);
} catch (IOException e) {
e.printStackTrace();
log.logger.error(e);
}

}
}

public void invoke(final Socket socket) {
new Thread(new Runnable() {
@SuppressWarnings("unchecked")
public void run() {
ObjectInputStream is = null;
String PTName = null;
List<McEvent> mcList = null;
try {
is = new ObjectInputStream(new BufferedInputStream(
socket.getInputStream()));
PTName = socket//获得PT服务器IP最后两位作为标
.getInetAddress()//志位 区分是哪台服务器
.getHostAddress()//传来的信息无法插入数据库
.substring(
socket.getInetAddress().getHostAddress()
.lastIndexOf(".") + 1);
Object obj = is.readObject();
if (obj != null) {
mcList = (List<McEvent>) obj;
mcEventJDBCServiceImpl.saveAll(mcList);
}
} catch (IOException ex) {
ex.printStackTrace();
log.logger.error(ex.getMessage());
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
log.logger.error(ex.getMessage());
} catch (Exception e) {
e.printStackTrace();
log.logger.error(e.getMessage());
try {
ExceptionUtil.saveEvent(mcList, PTName);
} catch (Exception e1) {
e1.printStackTrace();
log.logger.error(e1.getMessage());
}
} finally {
try {
is.close();
} catch (Exception ex) {
}
try {
socket.close();
} catch (Exception ex) {
}
}
}
}).start();
}
}

程序是多个客户端电脑向服务器端发送数据 服务器把数据拿过来插入数据库
...全文
855 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyxcxy 2016-05-18
  • 打赏
  • 举报
回复
private static Statement ste = null; ste = conn.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 加个高级载体
gggggame 2013-09-11
  • 打赏
  • 举报
回复
conn.setAutoCommit(false);这个是不是必须的呢,但也不会造成commit后没有数据的问题啊
suciver 2013-09-10
  • 打赏
  • 举报
回复
从代码上看如果楼主没有报异常的话提交过去就好了啊,只有你报异常了才会回滚
MiceRice 2013-09-10
  • 打赏
  • 举报
回复
貌似没啥原因了,你是不是找错数据库了 =_=
小葫芦 2013-09-10
  • 打赏
  • 举报
回复
ps.executeUpdate(); 不需要提交,把提交去掉看看
duck166 2013-09-10
  • 打赏
  • 举报
回复
引用 1 楼 ldh911 的回复:
先检查有没有错误日志吧。 然后这句话执行了么? System.out.println("set="+set+" "+ mc.getLineMCID() + " " + sdf.format(mc.getEventDate().getTime()) + " " + mc.getEventCode() + " " + mc.getMainMSG() + " ____" + mc.getSubMSG() + "_______ " + mc.getSeq());
打印的语句都执行了 日志也没有报错
duck166 2013-09-10
  • 打赏
  • 举报
回复
统一说一下吧 数据库真的没有连错... 最早是hibernate写的 也会往数据库里插数据 而且能查看的到,但是会有一部分数据莫名其妙插不进去,报数据库里已经存在相同数据了,但是手工插的话又能插的进去,后来又改用spring+jdbc 刚开始也能正常插入数据 数据库里也能查到,但是过了一段时间后 控制台还在显示往数据库插数据 可是数据库里却查不到数据了... 现在直接用jdbc就一点数据也没有了....
u010580980 2013-09-10
  • 打赏
  • 举报
回复
估计看出数据库
枫醉秋 2013-09-10
  • 打赏
  • 举报
回复
看错数据库了
无聊找乐 2013-09-10
  • 打赏
  • 举报
回复
连错了数据库
MiceRice 2013-09-06
  • 打赏
  • 举报
回复
先检查有没有错误日志吧。 然后这句话执行了么? System.out.println("set="+set+" "+ mc.getLineMCID() + " " + sdf.format(mc.getEventDate().getTime()) + " " + mc.getEventCode() + " " + mc.getMainMSG() + " ____" + mc.getSubMSG() + "_______ " + mc.getSeq());

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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