在上一篇文章中我们成功得到了重新组织后的数据,接下来需要做的便是将数据插入到数据库中了。在与数据库打交道的过程中有一些方法是普遍的,我们将这些通用方法封装到一个DbUtil类中,以便复用,封装好的DbUtil如下:

  1. package DbUtil;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8.  
  9. /**
  10. * 封装数据库常用操作
  11. * @author changshou
  12. *
  13. */
  14. public class DbUtil {
  15. //取得数据库连接
  16. public static Connection getConnection(){
  17. Connection conn = null;
  18. try {
  19. Class.forName("oracle.jdbc.driver.OracleDriver");
  20. String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
  21. String username = "drp1";
  22. String password = "drp1";
  23. conn = DriverManager.getConnection(url, username, password);
  24. } catch (ClassNotFoundException e) {
  25. // TODO Auto-generated catch block
  26. e.printStackTrace();
  27. } catch (SQLException e) {
  28. // TODO Auto-generated catch block
  29. e.printStackTrace();
  30. }
  31. return conn;
  32. }
  33.  
  34. //关闭连接
  35. public static void close(Connection conn){
  36. if(conn != null){
  37. try {
  38. conn.close();
  39. } catch (SQLException e) {
  40. // TODO Auto-generated catch block
  41. e.printStackTrace();
  42. }
  43. }
  44. }
  45.  
  46. //关闭PreparedStatement和Statement
  47. public static void close(PreparedStatement pstmt){
  48. if(pstmt != null){
  49. try {
  50. pstmt.close();
  51. } catch (SQLException e) {
  52. // TODO Auto-generated catch block
  53. e.printStackTrace();
  54. }
  55. }
  56. }
  57.  
  58. //关闭Statement
  59. public static void close(Statement stmt){
  60. if(stmt != null){
  61. try {
  62. stmt.close();
  63. } catch (SQLException e) {
  64. // TODO Auto-generated catch block
  65. e.printStackTrace();
  66. }
  67. }
  68. }
  69.  
  70. //关闭ResultSet
  71. public static void close(ResultSet rs){
  72. if(rs != null){
  73. try {
  74. rs.close();
  75. } catch (SQLException e) {
  76. // TODO Auto-generated catch block
  77. e.printStackTrace();
  78. }
  79. }
  80.  
  81. }
  82. /**
  83. * 手动开启事务,不让事务自动提交
  84. * @param conn
  85. */
  86. public static void beginTransaction(Connection conn){
  87. try{
  88. if(conn != null){
  89. if(conn.getAutoCommit()){
  90. conn.setAutoCommit(false);//手动提交
  91. }
  92. }
  93.  
  94. }catch(SQLException e){
  95.  
  96. }
  97. }
  98.  
  99. /**
  100. * 提交事务
  101. * @param conn
  102. */
  103. public static void commitTransaction(Connection conn){
  104. try{
  105. if(conn != null){
  106. if(!conn.getAutoCommit()){
  107. conn.commit();
  108. }
  109. }
  110.  
  111. }catch(SQLException e){
  112.  
  113. }
  114. }
  115.  
  116. /**
  117. * 回滚事务
  118. * @param conn
  119. */
  120. public static void rollbackTransaction(Connection conn){
  121. try{
  122. if(conn != null){
  123. if(!conn.getAutoCommit()){
  124. conn.rollback();
  125. }
  126. }
  127.  
  128. }catch(SQLException e){
  129.  
  130. }
  131. }
  132.  
  133. public static void reset(Connection conn){
  134. try{
  135. if(conn != null){
  136. if(conn.getAutoCommit()){
  137. conn.setAutoCommit(false);
  138. }else{
  139. conn.setAutoCommit(true);
  140. }
  141. }
  142.  
  143. }catch(SQLException e){
  144.  
  145. }
  146. }
  147. }

下面的代码将真正执行数据的插入操作,注意在执行代码前需引入相关jar包,如jdbc驱动等。否则在执行的过程中会报错。

  1. package UserManager;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4.  
  5. import com.sun.org.apache.bcel.internal.generic.RETURN;
  6.  
  7. import DbUtil.*;
  8. public class UserManager {
  9.  
  10. public void insertUser(String userId,String userName,String userRoot){
  11. //执行插入的sql语句
  12. String sql = "INSERT INTO T_TEST1 (USERUD,USERNAME,USERROOT) VALUES (?,?,?)";
  13. Connection conn = null;
  14. PreparedStatement pstmt = null;
  15. try{
  16. //得到数据库连接
  17. conn = DbUtil.getConnection();
  18. pstmt = conn.prepareStatement(sql);
  19. //给占位符赋值
  20. pstmt.setString(1,userId);
  21. pstmt.setString(2, userName);
  22. pstmt.setString(3, userRoot);
  23. //执行插入语句
  24. pstmt.executeUpdate();
  25. }catch(Exception e){
  26. e.printStackTrace();
  27.  
  28. }finally{
  29. //关闭相关资源
  30. DbUtil.close(pstmt);
  31. DbUtil.close(conn);
  32. }
  33. }
  34. }

总结:将xml文件中的数据插入到数据库中所涉及到的环节主要有四个。第一是前端xml文件的解析。第二是xml数据的传输。第三是数据的重新组合。第四是数据的插入。贯穿这四个环节所涉及的语言分别是xml,javascript,html,java。从当今编程的趋势看,混合语言的使用已经是一种趋势,而解决类似问题的关键就在于将整个过程分成若干块,将每一块提供一个接口,只要接口的实现没有问题,整个过程也不会有太大问题。

Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库。

Ajax实现xml文件数据插入数据库(二)--- ajax实现与jsp的数据交互。

Ajax

Ajax实现xml文件数据插入数据库(二)--- ajax实现与jsp的数据交互。的更多相关文章

  1. Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库

    Ajax实现将xml文件数据插入数据库的过程所涉及到的内容比较多,所以对于该过程的讲解本人打算根据交互的过程将其分为三个部分,第一部分为构建解析xml文件的javascript库,第二部分为ajax与 ...

  2. xml文件读取到数据库

    xml文件读取到数据库   第一步,导包 c3p0,dom4j,jaxen,MySQL-connector 第二步  xml文件,config文件 第三步 javabean 第四步 c3p0的工具类 ...

  3. Qt的Model/View Framework解析(数据是从真正的“肉(raw)”里取得,Model提供肉,所以读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了)

    最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道Model/Vi ...

  4. jQuery ajax解析xml文件demo

    解析xml文件,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息. 前端代码: <!doctype html> <html> <hea ...

  5. mysql 带换行符的字符串数据插入数据库异常

    带换行符的字符串数据插入数据库异常现象 某个字符串类型的字段中部分记录中带换行符,数据同步插入异常,提示如下类似警告信息: Incorrect string value:'<aherf=&quo ...

  6. C/s从文件(TXT)中读取数据插入数据库

    流程: 1.当按钮单击时,弹出OpenFileDialog 2.判断后缀名是否合法 3.导入数据库 按钮事件中的代码: 1.判断用户是否选中文件. 2.判断用户选择的文件是否为txt //第一步,当按 ...

  7. C#程序中:如何向xml文件中插入节点(数据)

    向xml文件中动态的添加节点(数据)是一件很爽的事,可以给你的程序带来很多的方便,比如在web中,如果你的Flash用到了xml文件,这个方法可以让你在后台就轻轻松松的更新你的Flash内容哦!一起研 ...

  8. Java中实现SAX解析xml文件到MySQL数据库

    大致步骤: 1.Java bean 2.DBHelper.java 3.重写DefaultHandler中的方法:MyHander.java 4.循环写数据库:SAXParserDemo.java ① ...

  9. C#中操作xml文件(插入节点、修改、删除)

    已知有一个xml文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?> <b ...

随机推荐

  1. iOS--Swift开发中的单例设计模式

    最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...

  2. 第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  3. linux 线程回顾

    额,时隔两年重新写博客了. 这次看一下thread_cond_wait(pthread_cond_t * cond, pthread_mutex_t *mutex)和thread_cond_signa ...

  4. asp.net MVC4 +MVCpager

    asp.net MVC4 +MVCpager 无刷新分页 本人菜鸟,最近在用MVC4和MVCpager做无刷新分页时,发现点击下一页时数据不是Ajax提交的,弄了好久终于找到原因,原来还是Jquery ...

  5. Ibatis配置存储过程xml文件案例

    -- <parameterMaps> <!--注意:parameterMap中的参数个数和顺序要和ProcGetPersonByName存储过程中的一致--> <para ...

  6. Windows Forms框架编程

    <Windows Forms框架编程>节选   第九章 设计模式与原则 软件设计模式(Design pattern)是一套被反复使用的代码设计经验总结.使用设计模式是为了可重用代码.让代码 ...

  7. C#事件与委托的区别

    C#事件与委托的区别 1. 委托 事件是利用委托来定义的,因此先解释委托.委托是一个类,它与其他类如int,string等没有本质区别,int代表的是所有的整形,而string代表的是字符串,委托则代 ...

  8. Dynamics CRM 客户端的插件调试

    Dynamics CRM 客户端的插件调试 一直以来,Dynamics CRM插件在大家的印象中都是不便于调试的,根据官方文档(http://technet.microsoft.com/zh-cn/l ...

  9. Mac OS X安装之虚拟机环境下的总结

    最近一直忙着公司iOS Touch的新版发布,终于忙过了.现在,又开始了新的阶段,不过算是轻松了很多.回来一看,自己的博客空空如也,实在受不了了.于是,开始更一下吧,哈哈. 这个文档是我几个月前,开始 ...

  10. C++中内存泄露的检测

    C++没有java的内存垃圾回收机制,在程序短的时候可能比较容易发现问题,在程序长的时候是否有什么检测的方法呢? 假设有一个函数可以某点检测程序的内存使用情况,那是否可以在程序开始的时候设置一个点,在 ...