利用JavaBeans实现两种数据库间数据导入的一种方法
javaweb导出导入数据库
![javaweb导出导入数据库](https://img.taocdn.com/s3/m/f99536eb59f5f61fb7360b4c2e3f5727a5e924fd.png)
javaweb导出导入数据库第一篇:java web导出导入数据库导出数据库进入C:Program FilesMySQLMySQL Server 5.0bin利用mysqldump--user=root--password=root book >bookbak.sql或mysqldump –u root-p abc > abc.sql 导出整个数据库:mysqldump mysql > c:mydb.sql-u root-p导入Create 数据库Use 数据库Source 脚本第二篇:Oracle数据库导入导出命令总结执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,DOS中可以执行时由于在oracle中,安装目录ora9iBIN被设置为全局路径,该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。
下面介绍的是导入导出的实例。
数据导出:将数据库zxcc完全导出,用户名kf 密码zx 导出到D:zxcc.dmp中exp kf/zx@zxcc file=d:zxcc.dmp full=yfull=y 表示全库导出。
full总共有2个可选项yes(y)/no(n),缺省情况下full=no,这时只会将该用户下的对象导出。
将数据库zxcc中kf用户与cc用户的表导出exp kf/zx@zxcc file=d:zxcc_ur.dmp owner=(kf,cc)full方式可以备份所有用户的数据库对象,包括表空间、用户信息等,owner=XX只能备份指定用户的对象,其他用户下的就不备份了,EXP中full=y和owner=XX是不能同时使用的。
将数据库zxcc中的表kf_operator、kf_role导出exp kf/zx@zxcc file= d:zxcc_tb.dmp tables=(kf_operator,kf_role)tables=xx 表示备份相关表,不能同时和owner、full使用。
信息系统集成试卷及参考答案
![信息系统集成试卷及参考答案](https://img.taocdn.com/s3/m/f24f986f1eb91a37f1115c15.png)
云南大学软件工程硕士《信息系统集成》课程考试试卷一、名词解释题(本类题共10题,每小题2分,共20分)1. 信息系统2. 体系结构3. B/S模式4. DNS5. 信息系统集成6. 数据集成7. 数据共享8. 接口集成9. 数据仓库技术10. J2EE1、信息系统是用信息化手段将业务逻辑固化的,是人、设备、应用软件、操作环境、业务流程的集合体。
信息系统是管理理念、整合实施水平的体现。
信息系统是由计算机硬件、网络和通讯设备、计算机软件、信息资源、信息用户和规章制度组成的以处理信息流为目的的人机一体化系统。
2、体系结构,指信息系统的每个组成部分之间的相互关系,包括:层次、拓朴结构、布局、接口、边界等;组成部分包括:硬件、软件、数据、操作规程、文档、参与的人员等。
3、B/S(Browser/Server,浏览器/服务器)模式又称B/S结构。
它是随着Internet技术的兴起,对C/S模式应用的扩展。
在这种结构下,用户工作界面是通过IE浏览器来实现的。
B/S 模式最大的好处是运行维护比较简便,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, W AN, Internet/Intranet等)访问和操作共同的数据;最大的缺点是对企业外网环境依赖性太强,由于各种原因引起企业外网中断都会造成系统瘫痪。
4、DNS 是域名系统(Domain Name System) 的缩写,它是由解析器和域名服务器组成的。
域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
将域名映射为IP地址的过程就称为“域名解析”。
域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。
DNS 命名用于Internet 等TCP/IP 网络中,通过用户友好的名称查找计算机和服务。
当用户在应用程序中输入DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如IP 地址。
在JavaBean中连接数据库
![在JavaBean中连接数据库](https://img.taocdn.com/s3/m/c920b7ac1b37f111f18583d049649b6648d70933.png)
在JavaBean中连接数据库随着JSP语言技术的发展,在JSP页面中连接数据库的编程方式越来越少,在开发大型项目中,通常采用将连接数据库代码封装在JavaBean或Servlet中,这样可以提高代码重用性,减小页面维护难度。
下面依然以登录为例,演示在JavaBean中连接数据库。
操作步骤如下。
(1)在Eclipse中创建Web项目07。
(2)为了简化问题,首先创建一个与登录信息相关联的JavaBean,名称为myBean.java,代码如下:src\com\wsy\myBean.java关键代码:public class myBean {private String name; //定义name属性private String password; //定义password属性public String getName() { //定义name属性的getXXX()方法StringTrans s=new StringTrans(); //实例化StringTrans对象return s.tranC(name); //将name属性转码为UTF-8 }public void setName(String name) { //定义name属性的setXXX()方法 = name;}public String getPassword() { //定义password属性的getXXX()方法return password;}public void setPassword(String password) { //定义password属性的setXXX()方法this.password = password;}}代码说明:从上述代码中可以看出,myBean.java除了两个属性值外,还包含4个根据这两个属性值创建的setXXX()方法与getXXX()方法,myBean.java中不含有任何逻辑代码,主要的功能是数据传递。
JavaBean简单介绍及其应用
![JavaBean简单介绍及其应用](https://img.taocdn.com/s3/m/84b6f7c8ab00b52acfc789eb172ded630b1c98d8.png)
JavaBean简单介绍及其应⽤Bean的中⽂含义是“⾖⼦”,顾名思义JavaBean是⼀段Java⼩程序。
JavaBean实际上是指⼀种特殊的Java类。
它通经常使⽤来实现⼀些⽐較经常使⽤的简单功能。
并能够⾮常easy的被重⽤或者是插⼊其它应⽤程序中去。
全部遵循⼀定编程原则的Java类都能够被称作JavaBean。
⼀. Java Bean技术概述Java Bean是基于Java的组件模型,由属性、⽅法和事件3部分组成。
在该模型中,JavaBean能够被改动或与其它组件结合以⽣成新组件或完整的程序。
它是⼀种Java类,通过封装成为具有某种功能或者处理某个业务的对象。
因此。
也能够通过嵌在JSP页⾯内的Java代码訪问Bean及其属性。
Bean的含义是可反复使⽤的Java组件。
所谓组件就是⼀个由能够⾃⾏进⾏内部管理的⼀个或⼏个类所组成、外界不了解其内部信息和执⾏⽅式的群体。
使⽤它的对象仅仅能通过接⼝来操作。
⼆. Java Bean编写规范Java Bean实际上是依据JavaBean技术标准所指定Bean的命名和设计规范编写的Java类。
这些类遵循⼀个接⼝格式。
以便于使函数命名、底层⾏为以及继承或实现的⾏为,其最⼤的长处在于可以实现代码的可重⽤性。
Bean并不须要继承特别的基类(BaseClass)或实现特定的接⼝(Interface)。
Bean的编写规范使Bean的容器(Container)可以分析⼀个Java类⽂件。
并将其⽅法(Methods)翻译成属性(Properties),即把Java类作为⼀个Bean类使⽤。
Bean的编写规范包含Bean类的构造⽅法、定义属性和訪问⽅法编写规则。
2.1. Bean组件的⼯作机制在JavaBeansVersion1.01 A规范中定义了该组件的5种重要机制:(1)内省(Introspection):组建能够发表其⽀持的操作和属性。
同⼀时候也⽀持在其它组件中发现反复利⽤的对象库,如⽤户权限控制和电⼦邮件⾃⼰主动回复等。
使用JavaBean连接数据库
![使用JavaBean连接数据库](https://img.taocdn.com/s3/m/c55e8f82d4d8d15abe234e5b.png)
JSP+JavaBean1、JavaBean类1、显示学生信息内容JavaBeanpackage com.DataBase;import java.sql.*;public class MyDbBean{private Statement stmt = null;ResultSet rs = null;private Connection conn = null;private String dsn;//构造函数public MyDbBean() { }//根据dsn参数,加载驱动程序,建立连接public void getConn(String dbname, String uid, String pwd) throws Exceptiontry{dsn = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=" +dbname;Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();conn = DriverManager.getConnection(dsn, uid, pwd);}catch (Exception ex){System.err.println("aq.executeQuery: " + ex.getMessage());}}//执行查询类的SQL语句,有返回集public ResultSet executeQuery1(String sql){rs = null;try{stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONL Y);rs = stmt.executeQuery(sql);}catch(SQLException ex){System.err.println("aq.executeQuery:"+ex.getMessage());}return rs;}//执行更新类的SQL语句,无返回集public void executeUpdate2(String sql){stmt = null;rs=null;try{stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONL Y);stmt.executeQuery(sql);stmt.close();conn.close();}catch(SQLException ex){System.err.println("aq.executeQuery: " + ex.getMessage());}}//关闭对象public void closeStmt()try{ stmt.close(); }catch(SQLException ex){System.err.println("aq.executeQuery: " + ex.getMessage());}}public void closeConn(){try{ conn.close(); }catch(SQLException ex){System.err.println("aq.executeQuery: " + ex.getMessage());}}}“list.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="testbean" scope="session" class="com.DataBase.MyDbBean" /><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>学籍管理系统</title></head><%! String url,sql; %><%! int i;%><body bgcolor="#ffffff"><div align="center"><font color="#000000" size="5">学籍管理系统</font> </div> <table width="75%" border="1" cellspacing="1" cellpadding="1" align="center"><tr><td width=16% align=center>学号</td><td width=16% align=center>姓名</td><td width=8% align=center>性别</td><td width=8% align=center>年龄</td><td width=16% align=center>籍贯</td><td width=12% align=center>更改</td><td width=12% align=center>删除</td></tr><%//调用getConn方法与数据库建立连接testbean.getConn("Data_Stu", "sa","");sql="select * from stuInfo";ResultSet rs=testbean.executeQuery1(sql);//查询数据库while(rs.next()){%><tr><td width=16% align=center><%=rs.getString(1)%></td><td width=16% align=center><%=rs.getString(2)%></td><td width=8% align=center><%=rs.getString(3)%></td><td width=8% align=center><%=rs.getInt(4)%></td><td width=16% align=center><%=rs.getString(5)%></td><td width=12% align=center><%=rs.getString(6)%></td><td width=12% align=center><a href="change.jsp?xuehao=<%=rs.getString(1)%>">修改</a></td> <td width=12% align=center><a href="del.jsp?xuehao=<%=rs.getString(1)%>">删除</a></td></tr><%}rs.close();testbean.closeStmt();testbean.closeConn();%></table><div align="center"><a href="insert.jsp">添加新记录</a> </div></body></html>2、添加记录“insert.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*,java.util.*;" errorPage=""%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>添加记录</title></head><body bgcolor="#FFFFFF" text="#000000"><div align="center"><font color="#000000" size="5">添加新记录</font></div><form name="form1" method="post" action="query.jsp"><table width="35%" border="1" cellspacing="1" cellpadding="1" align="center"> <tr><td width="46%" align="center">学号</td><td width="54%"> <input type="text" name="xuehao" size="7"></td></tr><tr><td width="46%" align="center">姓名</td><td width="54%"> <input type="text" name="name" size="8"></td></tr><tr><td width="46%" align="center">性别</td><td width="54%"> <select name="sex" size="1"><option value="男" selected> 男</option><option value="女">女</option></select></td></tr><tr><td width="46%" align="center">年龄</td><td width="54%"> <input type="text" name="age" size="2"></td></tr><tr><td width="46%" align="center">籍贯</td><td width="54%"> <input type="text" name="jiguan" size="8"></td></tr><tr><td width="46%" align="center">院系</td><td width="54%"> <input type="text" name="department" size="8"></tr><tr align="center"><td colspan="2" align="center"><input type="submit" name="Submit" value="提交"> <input type="reset" name="reset" value="清空"></td></tr></table></form></body></html>“query.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*,java.util.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="query" scope="session" class="com.DataBase.MyDbBean"/> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>插入数据</title></head><body><%! String xuehao,name,sex,age,jiguan,department,url,sql; %><%! int i;%><%xuehao=request.getParameter("xuehao").trim();name=request.getParameter("name").trim();name=new String(name.getBytes("ISO-8859-1"),"UTF-8");//编码转换sex=request.getParameter("sex").trim();sex=new String(sex.getBytes("ISO-8859-1"),"UTF-8");age=request.getParameter("age").trim();i=Integer.parseInt(age);jiguan=request.getParameter("jiguan").trim();jiguan=new String(jiguan.getBytes("ISO-8859-1"),"UTF-8");department=request.getParameter("department").trim();department=new String(department.getBytes("ISO-8859-1"),"UTF-8");if(xuehao.length()!=7){//检查学号的位数response.sendRedirect("err.jsp");}response.sendRedirect("err.jsp");}//调用getConn()方法与数据库建立连接query.getConn("Data_Stu","sa","");sql="select * from stuInfo where 学号='"+xuehao+"'";ResultSet rs=query.executeQuery1(sql);if(rs.getRow()>0){ response.sendRedirect("err.jsp"); }sql="insert into stuInfo(学号,姓名,性别,年龄,籍贯,院系)";sql=sql+"values('"+xuehao+"','"+name+"','"+sex+"','"+i+"','"+jiguan+"','"+department+"')";query.executeUpdate2(sql);out.println("<font size=3 color=blue>正在处理信息,请稍后......</font><meta http-equiv='refresh' content='2;url=list.jsp'>");rs.close();query.closeStmt();query.closeConn();%></body></html>3、更改记录“change.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@ page import="java.sql.*,java.util.*;" errorPage=""%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="modify" scope="session" class="com.DataBase.MyDbBean"/><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>修改记录</title></head><body bgcolor="#FFFFFF" text="#000000"><div align="center"><font color="#000000" size="5">修改记录</font> </div><%! String xuehao,url,sql,sex; %><%xuehao=request.getParameter("xuehao").trim();//调用getConn()方法与数据库建立连接modify.getConn("Data_Stu","sa","");sql="select * from stuInfo where 学号='"+xuehao+"'";ResultSet rs=modify.executeQuery1(sql);while(rs.next()){%><form name="form1" method="post" action="change_query.jsp?xuehao=<%=xuehao%>"><table width="35%" border="1" cellspacing="1" cellpadding="1" align="center"><tr><td width="46%" align="center">学号</td><td width="54%"> <%=rs.getString(1)%></td></tr><tr><td width="46%" align="center">姓名</td><td width="54%"> <input type="text" name="name" size="8" value=<%=rs.getString(2)%>></td></tr><tr><td width="46%" align="center">性别</td><td width="54%"> <%sex=rs.getString(3).trim();if(sex.equals("男")){%><option value="男" selected>男</option><option value="女">女</option></select><% }else{%><select name="sex" size="1"><option value="男" >男</option><option value="女"selected>女</option></select><% } %></td></tr><tr><td width="46%" align="center">年龄</td><td width="54%"> <input type="text" name="age" size="2" value=<%=rs.getInt(4)%>></td></tr><tr><td width="46%" align="center">籍贯</td><td width="54%"> <input type="text" name="jiguan" size="8" value=<%=rs.getString(5)%>></td></tr><tr><td width="46%" align="center">院系</td><td width="54%"> <input type="text" name="department" size="8" value=<%=rs.getString(6)%>></td></tr><tr align="center"><td colspan="2" align="center"><input type="submit" name="Submit" value="提交"> <input type="reset" name="reset" value="清空"></td></tr></table></form><%}rs.close();modify.closeStmt();modify.closeConn();%></body></html>“change_query.jsp”<%--Document : change_queryCreated on : 2010-5-8, 17:32:29Author : Administrator--%><%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*,java.util.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="modify" scope="session" class="com.DataBase.MyDbBean"/><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>修改记录</title></head><body><%! String xuehao,name,sex,age,jiguan,department,url,sql; %><%! int i;%><%xuehao=request.getParameter("xuehao").trim();out.print(xuehao);name=request.getParameter("name").trim();name=new String(name.getBytes("ISO-8859-1"),"UTF-8");sex=request.getParameter("sex").trim();sex=new String(sex.getBytes("ISO-8859-1"),"UTF-8");age=request.getParameter("age").trim();i=Integer.parseInt(age);jiguan=request.getParameter("jiguan").trim();jiguan=new String(jiguan.getBytes("ISO-8859-1"),"UTF-8");department=request.getParameter("department").trim();department=new String(department.getBytes("ISO-8859-1"),"UTF-8");if(name.equals("")){response.sendRedirect("err1.jsp");}try{//调用getConn()方法与数据库建立连接modify.getConn("Data_Stu","sa","");sql="update stuInfo set 姓名= '"+name+"',性别= '"+sex+"',年龄="+i+",籍贯= '"+jiguan+"',院系=modify.executeUpdate2(sql);out.println("<font size=3 color=blue>正在修改记录,请稍后......</font><meta http-equiv='refresh' content='2;url=list.jsp'>");modify.closeStmt();modify.closeConn();}catch(Exception e){response.sendRedirect("err.jsp");}%></body></html>4、删除记录“del.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*,java.util.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="del" scope="session" class="com.DataBase.MyDbBean"/><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>删除记录</title></head><body><%! String xuehao,url,sql; %><%xuehao=request.getParameter("xuehao").trim();try{//调用getConn()方法与数据库建立连接del.getConn("Data_Stu","sa","");sql="delete from stuInfo where 学号='"+xuehao+"'";del.executeUpdate2(sql);out.println("<font size=3 color=blue>正在删除数据,请稍后......</font>" +"<meta http-equiv='refresh' content='2;url=list.jsp'>");del.closeStmt();del.closeConn();}catch(Exception e){response.sendRedirect("err.jsp");}%></body></html>JSP+ Servlet 访问数据库<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>无标题文档</title></head><body><form name="form1" method="post" action="servlet"><p>客户查询</p><p>请输入用户名:<input type="text" name="USERNAME"><input type="submit" name="Submit" value="提交"></p><p> </p></form><form name="form2" method="get" action="servlet"><p>根据总数查询</p><p>总数范围在<input type="text" name="totalmin">和<input type="text" name="totalmax">之间</p><p><input type="submit" name="Submit2" value="提交"></p></form><p> </p></body></html>package tree;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import java.sql.*;public class queryextends HttpServlet {private static final String CONTENT_TYPE = "text/html; charset=GB2312";//Initialize global variablespublic void init() throws ServletException {super.init();}//执行HTTP Post请求public void doPost(HttpServletRequest request,HttpServletResponse response) throwsServletException,IOException{PrintWriter out=response.getWriter();response.setContentType(CONTENT_TYPE);//设置响应的MIME类型。
利用JavaBeans实现两种数据库间数据导入的一种方法
![利用JavaBeans实现两种数据库间数据导入的一种方法](https://img.taocdn.com/s3/m/b258448cec3a87c24028c45b.png)
计 算机 网络化 的加 速发 展 和 网络 性能 的提 高 ,
DB3 DB4 为 数 据 源 ; 头 为 转 化 模 式 ) , 箭 。为 解 决 4个
异 构数 据 源 间 的互访 , 须 建立 起 1 必 2种 访 问 模 式 。
使 信 息 系统 得 到 了快 速 的 发 展 。 为 了 充 分 利 用 各 信
利用a B n实 两 数 库 数 导 的 种 法 Ja a 现 种 据 间 据 入 一 方 v es
张 斌 刘彦 军 张凤 英 。侯 , , , 峰
000) 1 0 0 (. 1 内蒙 古 医 学 院 ;. 2 内蒙 古 财 经 学 院 ;. 林 格 尔 县 高 级 中学 , 3和 内蒙 古 呼 和 浩 特 摘 要 : 论 了 在 B/ 讨 S模 式 下 , 现 不 同 数 据 库 之 间 的 数 据 互 访 , 现 教 学 管 理 系 统 中 异 构 数 库 - 实 实 2 _
个 异 构 数 据 源 建 立 起 两 种 访 问 模 式 , 能 实 现 它 们 才 的 互 访 , 使 互 访 系统 表 现 出 较 大 的 复 杂 性 , 便 于 这 不 灵 活 的访 问 。 每 次 在 互 访 系 统 中 加 人 一 个 新 的数 据 源 , 须 为 这 个 新 数 据 源 建 立 起 与 已 有 数 据 源 的 多 必 种 访 问模 式 , 无 疑 又 降 低 了 系统 的 可 扩 展 性 。 这
而 使 系统 具 有 较 强 的 灵 活 性 和 开 放 性 。 关 键 词 :DB ; J C ODBC; a a e n ;DB J v B a s J C— — ODBC B i g ; 据 库 rd e 数
中图分 类号 : TP3 1 l
Java与数据库的连接与操作
![Java与数据库的连接与操作](https://img.taocdn.com/s3/m/932484d5988fcc22bcd126fff705cc1755275f14.png)
Java与数据库的连接与操作在当今信息时代,数据库的使用变得不可或缺。
无论是企业还是个人,都需要对海量数据进行储存、管理和操作。
而Java作为一种功能强大的编程语言,具有广泛的应用范围,极其擅长与数据库的连接和操作。
本文将探讨Java与数据库的连接与操作的方法和技巧。
一、数据库的连接在使用Java与数据库进行交互之前,我们首先需要建立数据库的连接。
Java提供了多种方式与数据库进行连接,其中最常用和推荐的是使用JDBC(Java Database Connectivity)。
JDBC是Java为访问数据库而制定的一套API,它提供了一种标准的方法来连接和操作不同类型的数据库,包括关系型数据库如Oracle和MySQL,以及非关系型数据库如MongoDB。
在使用JDBC连接数据库时,我们首先需要加载数据库的驱动程序,然后根据数据库类型、用户名和密码等信息建立连接。
以下是一个使用JDBC连接MySQL数据库的示例代码:```javaimport java.sql.*;public class DatabaseConnection {public static void main(String[] args) {Connection conn = null;// 加载数据库驱动Class.forName("com.mysql.jdbc.Driver");// 建立连接conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");// 进行数据库操作...} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}```在以上代码中,我们首先使用`Class.forName()`方法加载MySQL数据库的驱动程序。
Javabean技术访问数据库
![Javabean技术访问数据库](https://img.taocdn.com/s3/m/4ddec0d326fff705cc170afb.png)
Javabean访问数据库【摘要】:提出实现与数据库紧密结合的数据类型, 并使用该类型的对象访问和操作数据库。
对B/S 模式下利用JSP和JavaBean 技术进行数据库访问开发强大的JSP程序, 使得显示页面和数据库访问和操作相分离的研究。
可以提高数据库访问和操作的安全性, 便于调试和维护, 且可重用封装数据库操作的JavaBean, 从而增加代码的重用性和系统的安全性。
【关键词】:javabean 数据库引言:在开发web应用程序时,数据库的访问是必不可少的。
通过对数据库的访问实现对数据的增、删、改、查等操作。
这一系列的操作代码是烦琐且在每次对数据库的操作时都要重复编写的代码。
Javabean的任务就是”一次性编写,任何地方执行,任何地方重用“。
这就是是实际上解决困扰工业上的日益增加的复杂性问问题,提供一个简单、紧凑的和优秀的问题解决方案。
在利用JSP开发时可使用Javabean技术来解决。
Javabean的概述Javabean是一种Java语言写成的可重用的软件组件。
组件是自含的、可重复使用的软件单元;Javabean中的组件,则可以使用可视的应用程序开发,可视编写地将他们编写到Java程序中.Javabean在容器中运行并对外提供具体的业务逻辑操作功能。
一般来说,Javabean被分成两类:可视化Javabean和不可视化Javabean。
可视化Javabean可以表示简单的GUI组件,不可视化Javabean 在后台完成业务逻辑处理功能,例如:访问数据库执行查询操作中的Javabean,这些javabean在运行时不需要任何可视的界面。
在JSP程序中所用的Javabean 一般以不可视化的组件为主,而可视化的 Javabean一般用以Applet程序或者Java应用程序。
Javabean是一些Java类,任何具有某种特性和事件接口约定的Java类都可以是一个Javabean。
为写成Javabean,类必须是具体的和公共的,并且具有无参数的构造器。
如何利用Java技术实现两个不同数据库之间的数据交换
![如何利用Java技术实现两个不同数据库之间的数据交换](https://img.taocdn.com/s3/m/ef2f0acc48649b6648d7c1c708a1284ac8500597.png)
如何利用Java技术实现两个不同数据库之间的数据交换如何利用Java技术实现两个不同数据库之间的数据交换利用Java技术实现两个不同数据库之间的数据交换的方法有哪些你知道吗?你知道如何利用Java技术实现两个不同数据库之间的数据交换吗?下面是店铺为大家带来的如何利用Java技术实现两个不同数据库之间的'数据交换的知识,欢迎阅读。
1、建立远程数据库的连接:public static synchronized Connection getConFromRemote() {Connection con = null;String url = "jdbc:sqlserver://dbo:1436;databaseName=re mote_jadepool";String userName = "hkm12345";String password = "pwd12345";try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriv er");con = DriverManager.getConnection(url, userName, password);} catch (SQLException ex1) {ex1.printStackTrace();} catch (ClassNotFoundException ex) {ex.printStackTrace();}return con;}2、建立本地数据库的连接public static synchronized Connection getConFromLocal() {Connection con = null;String url = "jdbc:sqlserver://127.0.0.1dbo:1436;databaseName=jadepool";String userName = "hkm123";String password = "pwd123";try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriv er");con = DriverManager.getConnection(url, userName, password);} catch (SQLException ex1) {ex1.printStackTrace();} catch (ClassNotFoundException ex) {ex.printStackTrace();}return con;}3、将远程数据库的数据保存到本地数据库中public void backupDB() {Jade j0 = new Jade(getConFromRemote(), ING_DB_01);List v0 = j0.query("select * from jade_book");List v1 = j0.query("select * from jade_book_cs");mit();Jade j1 = new Jade(getConFromLocal(), ING_DB_02);j1.(" from jade_book");j1.("jade_book", v0);j1.(" from jade_book_cs");j1.("jade_book_cs", v1);mit();}【如何利用Java技术实现两个不同数据库之间的数据交换】。
7.07使用JavaBean连接数据库.
![7.07使用JavaBean连接数据库.](https://img.taocdn.com/s3/m/26e3d57a3c1ec5da51e27013.png)
பைடு நூலகம்
小结
本章结合实例讲解了JavaBean的概念、特点、在JSP 中如何使用JavaBean,以及如何使用JavaBean去操作 数据库。本章的重点是学会在JSP页面中调用 JavaBean。通过本章的学习读者应该可以理解 JavaBean的作用,如何编写JavaBean类,并且能够在 JSP页面中成功地使用它。在后面章节中还会用到 JavaBean,读者会不断地掌握使用JavaBean的技巧。
7.07 使用JavaBean连接数据库
使用JavaBean连接数据库
在JavaBean中,可以使用JDBC进行数据库操作,比 如连接数据库、查询数据库、向数据库中插入数据 等。在JSP中使用Java脚本虽然也可以进行数据库操 作,但是这样会造成页面过于复杂、臃肿,维护起 来非常不方便,这种缺点在大型项目中更加突出。 使用JavaBean操作数据库,然后把操作的结果返回 给JSP页面去显示,这样就减轻了JSP的负担,使其 更专注于页面显示。
java项目实现数据导入方法
![java项目实现数据导入方法](https://img.taocdn.com/s3/m/0bd71a9285254b35eefdc8d376eeaeaad0f3164d.png)
java项目实现数据导入方法数据导入是在Java项目中常见的任务之一。
在实际开发中,我们经常需要将外部数据导入到我们的项目中,以便进行进一步的处理和分析。
本文将介绍一种常用的数据导入方法,帮助读者了解如何在Java项目中实现数据导入。
我们需要明确导入的数据来源。
数据可以来自各种不同的地方,例如本地文件、数据库、Web服务等。
在本文中,我们将以本地文件作为数据来源进行讲解。
1. 读取本地文件在Java中,我们可以使用java.io包中的File类来读取本地文件。
通过创建一个File对象,并指定文件的路径,我们就可以获取到文件的相关信息。
例如:```javaFile file = new File("C:/data.txt");```这段代码将创建一个File对象,表示位于C盘根目录下的data.txt文件。
2. 解析文件数据一旦我们获取到了文件对象,下一步就是解析文件中的数据。
数据的格式可能是各种各样的,例如文本文件、CSV文件、JSON文件等。
针对不同的格式,我们可以使用不同的方法来解析数据。
例如,如果文件是一个文本文件,我们可以使用Java的IO流来逐行读取文件内容,并进行相应的处理。
代码示例:```javatry (BufferedReader br = new BufferedReader(new FileReader(file))) {String line;while ((line = br.readLine()) != null) {// 对每一行数据进行处理// ...}} catch (IOException e) {e.printStackTrace();}```上述代码使用了Java 7中引入的try-with-resources语法,可以自动关闭资源,非常方便。
3. 数据处理与存储在解析文件数据时,我们可以根据具体需求对数据进行相应的处理。
例如,可以将数据存储到数据库中,或者将数据转换为Java对象进行进一步的操作。
Java实现Excel导入数据库,数据库中的数据导入到Excel
![Java实现Excel导入数据库,数据库中的数据导入到Excel](https://img.taocdn.com/s3/m/9c51ae67a55177232f60ddccda38376baf1fe0d8.png)
Java实现Excel导⼊数据库,数据库中的数据导⼊到Excel maven 加⼊mysql包和处理Excel的jar包<dependencies><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency></dependencies>数据库:⽤户表CREATE TABLE `user_info` (`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '⽤户ID',`user_name` varchar(50) NOT NULL COMMENT '⽤户名称',`email` varchar(50) DEFAULT NULL COMMENT '邮箱',`mobile` varchar(20) NOT NULL COMMENT '⼿机号',`password` varchar(30) DEFAULT NULL COMMENT '登录密码',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建⽇期',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新⽇期',`del_flg` char(1) DEFAULT '0' COMMENT '删除flag 0:未删除;1:已删除;',PRIMARY KEY (`user_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='⽤户信息';⼯具类:public class DBhepler {String driver = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://url:3306/数据库名";Connection con = null;ResultSet res = null;public void DataBase() {try {Class.forName(driver);con = DriverManager.getConnection(url, "⽤户名", "密码");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.err.println("装载 JDBC/ODBC 驱动程序失败。
Java实现两个数据库数据的迁移
![Java实现两个数据库数据的迁移](https://img.taocdn.com/s3/m/0da8aad77e192279168884868762caaedd33ba93.png)
Java实现两个数据库数据的迁移 原料:mysql,sqlite3 思想步骤: ⾸先从⼀个数据库取出数据,每取⼀条就添加到另⼀个数据库。
⽰例:import java.sql.*;public class SQLite_To_MySQL {private Connection getIteconn(){try {Class.forName("org.sqlite.JDBC");return DriverManager.getConnection("jdbc:sqlite:E:\\MyDB\\lagou.db");} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}return null;}private Connection getMysqlconn(){try {Class.forName("org.mariadb.jdbc.Driver");return DriverManager.getConnection("jdbc:mariadb://localhost:3306/test","oukele","oukele");} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}return null;}public void deal() throws SQLException {//SQLite数据库Connection iteconn = getIteconn();Statement itestmt =iteconn.createStatement();ResultSet iters = itestmt.executeQuery("select * from lagou_position");//结果集获取到的长度int size = iters.getMetaData().getColumnCount();//⽐较懒,拼接insert into 语句StringBuffer sbf =new StringBuffer();sbf.append("insert into lagou values (");String link ="";for (int i = 0; i <size ; i++) {sbf.append(link).append("?");link=",";}sbf.append(")");//MySQL数据库Connection mysqlconn = getMysqlconn();PreparedStatement mysqlpstmt = mysqlconn.prepareStatement(sbf.toString());//取出结果集并向MySQL数据库插⼊数据 ( 使⽤批处理 )//完成条数int count =0;int num=0;//取消事务(不写⼊⽇志)mysqlconn.setAutoCommit(false);long start = System.currentTimeMillis();while (iters.next()) {++count;for (int i=1;i<= size;i++) {mysqlpstmt.setObject(i, iters.getObject(i));}//将预先语句存储起来,这⾥还没有向数据库插⼊mysqlpstmt.addBatch();//当count 到达 20000条时向数据库提交if (count % 20000 ==0 ){++num;mysqlpstmt.executeBatch();System.out.println("第"+num+"次提交,耗时:"+(System.currentTimeMillis()-start)/1000.0+"s");}}//防⽌有数据未提交mysqlpstmt.executeBatch();//提交mit();System.out.println("完成 "+count+" 条数据,耗时:"+(System.currentTimeMillis()-start)/1000.0+"s");//恢复事务// mysqlconn.setAutoCommit(true);//关闭资源close(mysqlconn,mysqlpstmt,null);close(iteconn,itestmt,iters);}public void close(Connection conn,Statement stmt,ResultSet rs){ if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}} 调⽤:public static void main(String[] args) {SQLite_To_MySQL test = new SQLite_To_MySQL();try {test.deal();} catch (SQLException e) {e.printStackTrace();}}。
Java多线程批量数据导入的方法详解
![Java多线程批量数据导入的方法详解](https://img.taocdn.com/s3/m/bb95f2c077a20029bd64783e0912a21614797f76.png)
Java多线程批量数据导⼊的⽅法详解前⾔:当遇到⼤量数据导⼊时,为了提⾼处理的速度,可以选择使⽤多线程来批量处理这些处理。
常见的场景有:⼤⽂件导⼊数据库(这个⽂件不⼀定是标准的CSV可导⼊⽂件或者需要在内存中经过⼀定的处理)数据同步(从第三⽅接⼝拉取数据处理后写⼊⾃⼰的数据库)以上的场景有⼀个共性,这类数据导⼊的场景简单来说就是将数据从⼀个数据源移动到另外⼀个数据源,⽽其中必定可以分为两步数据读取:从数据源读取数据到内存数据写⼊:将内存中的数据写⼊到另外⼀个数据源,可能存在数据处理⽽且根据读取的速度⼀般会⽐数据写⼊的速度快很多,即读取快,写⼊慢。
设计思路由于场景的特点是读取快,写⼊慢,如果是使⽤多线程处理,建议是数据写⼊部分改造为多线程。
⽽数据读取可以改造成批量读取数据。
简单来说就是两个要点:批量读取数据多线程写⼊数据⽰例多线程批量处理最简单的⽅案是使⽤线程池来进⾏处理,下⾯会通过⼀个模拟批量读取和写⼊的服务,以及对这个服务的多线程写⼊调⽤作为⽰例,展⽰如何多线程批量数据导⼊。
模拟服务import java.util.concurrent.atomic.AtomicLong;/*** 数据批量写⼊⽤的模拟服务** @author RJH* create at 2019-04-01*/public class MockService {/*** 可读取总数*/private long canReadTotal;/*** 写⼊总数*/private AtomicLong writeTotal=new AtomicLong(0);/*** 写⼊休眠时间(单位:毫秒)*/private final long sleepTime;/*** 构造⽅法** @param canReadTotal* @param sleepTime*/public MockService(long canReadTotal, long sleepTime) {this.canReadTotal = canReadTotal;this.sleepTime = sleepTime;}/*** 批量读取数据接⼝** @param num* @return*/public synchronized long readData(int num) {long readNum;if (canReadTotal >= num) {canReadTotal -= num;readNum = num;} else {readNum = canReadTotal;canReadTotal = 0;}//System.out.println("read data size:" + readNum);return readNum;}/*** 写⼊数据接⼝*/public void writeData() {try {// 休眠⼀定时间模拟写⼊速度慢Thread.sleep(sleepTime);} catch (InterruptedException e) {e.printStackTrace();}// 写⼊总数⾃增System.out.println("thread:" + Thread.currentThread() + " write data:" + writeTotal.incrementAndGet()); }/*** 获取写⼊的总数** @return*/public long getWriteTotal() {return writeTotal.get();}}批量数据处理器import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/*** 基于线程池的多线程批量写⼊处理器* @author RJH* create at 2019-04-01*/public class SimpleBatchHandler {private ExecutorService executorService;private MockService service;/*** 每次批量读取的数据量*/private int batch;/*** 线程个数*/private int threadNum;public SimpleBatchHandler(MockService service, int batch,int threadNum) {this.service = service;this.batch = batch;//使⽤固定数⽬的线程池this.executorService = Executors.newFixedThreadPool(threadNum);}/*** 开始处理*/public void startHandle() {// 开始处理的时间long startTime = System.currentTimeMillis();System.out.println("start handle time:" + startTime);long readData;while ((readData = service.readData(batch)) != 0) {// 批量读取数据,知道读取不到数据才停⽌for (long i = 0; i < readData; i++) {executorService.execute(() -> service.writeData());}}// 关闭线程池executorService.shutdown();while (!executorService.isTerminated()) {//等待线程池中的线程执⾏完}// 结束时间long endTime = System.currentTimeMillis();System.out.println("end handle time:" + endTime);// 总耗时System.out.println("total handle time:" + (endTime - startTime) + "ms");// 写⼊总数System.out.println("total write num:" + service.getWriteTotal());}}测试类/*** SimpleBatchHandler的测试类* @author RJH* create at 2019-04-01*/public class SimpleBatchHandlerTest {public static void main(String[] args) {// 总数long total=100000;// 休眠时间long sleepTime=100;// 每次拉取的数量int batch=100;// 线程个数int threadNum=16;MockService mockService=new MockService(total,sleepTime);SimpleBatchHandler handler=new SimpleBatchHandler(mockService,batch,threadNum);handler.startHandle();}}运⾏结果start handle time:1554298681755thread:Thread[pool-1-thread-2,5,main] write data:1thread:Thread[pool-1-thread-1,5,main] write data:2...省略部分输出thread:Thread[pool-1-thread-4,5,main] write data:100000end handle time:1554299330202total handle time:648447mstotal write num:100000分析在单线程情况下的执⾏时间应该为total*sleepTime,即10000000ms,⽽改造为多线程后执⾏时间为648447ms。
RowSet技术
![RowSet技术](https://img.taocdn.com/s3/m/c4cd9d6eb84ae45c3b358cde.png)
▪
}
添加总结
▪ 新插入的行位于当前游标的下一行。本例 中,先把游标移到最后一行,那么在新插 入数据后,新插入的行就是最后一行了。 在新插入行时,一定要先调用方法 moveToInsertRow(),然后调用 updateXXX() 设置各列值,再调用 insertRow(),最后再把游标移到当前行。 注意一定要遵循这个步骤,否则将抛出异 常。
-8", "root", "3539856122");
▪
conn.setAutoCommit(false);
▪
Statement st=conn.createStatement();
▪
ResultSet rs=st.executeQuery("select * from one");
▪
crs.populate(rs,1);
}
▪
st(); 添加某一行
▪
jrs.moveToInsertRow();
▪
jrs.updateInt(1, 46);
▪
jrs.updateString(2,"哈哈");
▪
jrs.updateString(3, "男");
▪
jrs.insertRow();
▪
crs.acceptChanges(conn);//同步到数据库
▪
Class.forName("com.mysql.jdbc.Driver");
▪
CachedRowSet crs =new CachedRowSetImpl();
▪
Connection
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=UTF
Java中的数据库编程连接和操作各种数据库
![Java中的数据库编程连接和操作各种数据库](https://img.taocdn.com/s3/m/d34e7155c381e53a580216fc700abb68a982ad39.png)
Java中的数据库编程连接和操作各种数据库在Java开发中,数据库是一个不可或缺的组成部分。
数据库连接和操作是Java程序与数据库进行数据交互的关键。
本文将介绍Java中使用不同方式连接和操作各种数据库的方法。
一、JDBC连接数据库JDBC(Java Database Connectivity)是Java中用于连接和操作数据库的标准API。
通过JDBC,我们可以使用标准的SQL命令对数据库进行增删改查操作。
1. 导入JDBC相关的库和类在Java中,需要导入JDBC相关的库和类才能使用JDBC进行数据库连接和操作。
可以通过在代码中使用import语句导入相关库和类。
以下是导入JDBC库和类的示例代码:```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;```2. 连接数据库连接数据库是进行数据库操作的第一步。
可以使用JDBC提供的DriverManager类的getConnection方法来建立与数据库的连接。
以下是建立与MySQL数据库的连接的示例代码:```javaString url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";Connection connection = DriverManager.getConnection(url, username, password);```3. 操作数据库连接数据库后,就可以使用Connection对象进行数据库操作。
可以通过创建Statement、PreparedStatement或CallableStatement对象来执行SQL语句,以实现对数据库的增删改查操作。
mybatis xml java bean传参法 详解
![mybatis xml java bean传参法 详解](https://img.taocdn.com/s3/m/db10bf91b04e852458fb770bf78a6529657d3556.png)
MyBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的XML 或注解来配置和映射原生信息,将接口和Java 的POJOs (Plain Old Java Objects, 普通的Java 对象)映射成数据库中的记录。
Java Bean 是Java 中的一种定义对象的规范,它包括私有属性和公共getter 和setter 方法。
当使用MyBatis 进行数据库操作时,我们通常会将Java Bean 作为参数传递给SQL 语句。
以下是使用XML 映射文件和Java Bean 传参的详细步骤:创建Java Bean:首先,你需要创建一个Java Bean 来表示你要从数据库中获取的数据。
例如,如果你有一个User表,你可以创建一个如下的Java Bean:javapublic class User {private int id;private String name;private String email;// ... 其他属性和方法}创建MyBatis XML 映射文件:在MyBatis 的XML 映射文件中,你可以定义SQL 语句,并使用<resultMap>元素来定义Java Bean 的属性和数据库表字段的映射关系。
例如:xml<mapper namespace="erMapper"><select id="getUserById" parameterType="int" resultMap="userResultMap">SELECT * FROM User WHERE id = #{id}</select><resultMap id="userResultMap" type="User"><id property="id" column="id"/><result property="name" column="name"/><result property="email" column="email"/><!-- ... 其他属性和列的映射--></resultMap></mapper>在这个例子中,getUserById方法接受一个整数参数(表示用户的ID),并返回一个User对象。
Java实现MySQL数据库导入
![Java实现MySQL数据库导入](https://img.taocdn.com/s3/m/7993f70fb42acfc789eb172ded630b1c59ee9b35.png)
Java实现MySQL数据库导⼊距离上班还有⼀段时间。
现在总结⼀下如何使⽤Java语⾔实现数据库导⼊:⾸先新建名为test的数据库;其次执⾏下⾯Java代码:[java]1. import java.io.File;2. import java.io.IOException;3.4. /**5. * MySQL数据库导⼊6. *7. * @author GaoHuanjie8. */9. public class MySQLDatabaseImport {10.11. /**12. * Java实现MySQL数据库导⼊13. *14. * @author GaoHuanjie15. * @param hostIP MySQL数据库所在服务器地址IP16. * @param userName 数据库⽤户名17. * @param password 进⼊数据库所需要的密码18. * @param importFilePath 数据库⽂件路径19. * @param sqlFileName 数据库⽂件名20. * @param databaseName 要导⼊的数据库名21. * @return 返回true表⽰导⼊成功,否则返回false。
22. */23. public static boolean importDatabase(String hostIP, String userName, String password, String importFilePath, String sqlFileName, String databaseName) {24. File saveFile = new File(importFilePath);25. if (!saveFile.exists()) {// 如果⽬录不存在26. saveFile.mkdirs();// 创建⽂件夹27. }28. if (!importFilePath.endsWith(File.separator)) {29. importFilePath = importFilePath + File.separator;30. }31.32. StringBuilder stringBuilder=new StringBuilder();33. stringBuilder.append("mysql").append(" -h").append(hostIP);34. stringBuilder.append(" -u").append(userName).append(" -p").append(password);35. stringBuilder.append(" ").append(databaseName);36. stringBuilder.append(" <").append(importFilePath).append(sqlFileName);37. try {38. Process process = Runtime.getRuntime().exec("cmd /c "+stringBuilder.toString());//必须要有“cmd /c ”39. if (process.waitFor() == 0) {// 0 表⽰线程正常终⽌。
java 实现数据库服务器之间的数据传输
![java 实现数据库服务器之间的数据传输](https://img.taocdn.com/s3/m/1d3c2804b52acfc788ebc905.png)
java 实现两个数据库服务器之间的数据传输,我使用的是数据库的备份和恢复功能。
如图1所示,A机器上的数据库信息传到B机器上。
其实没必要用一个系统实现,可以直接到A机器上导出数据库,比如XX.sql、XX.dmp、XX.MDF等等文件,传入到B机器上导入就可以。
但是一般客户不知道数据库导入导出命令,需要给个界面化操作。
界面上需要的填入的信息大概就是A、B机器数据库的数据库名称、IP、端口、用户名、密码等信息。
前几天帮同学完成这功能之后,一个公司也可以开发这样的一个系统,将所有数据库导入导出集成到系统中,发布到公司的内网上,供公司人员使用也不错的。
图1废话不多说了,就实现上面的功能,下面给出mysql例子。
原理比较简单,通过客户端访问OA系统,填入必要的信息之后,将信息传入C服务器处理,在C机器上取得A数据库信息,然后将A数据库信息在C服务器上恢复到B上。
如图2所示,这些是我需要的数据库信息。
图2首先,备份A机器上的MySql数据库信息:备份恢复mysql数据库需要用到mysqldump和mysql命令,这需要我们指定他们的exe执行文件。
有两种修改方案,一种修改环境变量的path变量,编辑path变量,在它的变量值中添加mysql安装路径bin目录下(C:\Program Files\MySQL\MySQL Server 5.0\bin),另一种在使用备份恢复命令时直接具体的路径:C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump。
下面给出主要方法:/*** @Function Name: bakMysql* @Description: 备份mysql数据库* @Date Created: Oct 27, 2011 8:57:05 PM* @param : dbName 数据库名称,tableNames 备份的数据表名称(多张表以逗号分隔),ip* 需要备份的数据库地址,username 用户名,password 密码,dbFilePath 临时目录* @Author: Li Qing* @Last Modified: , Date Modified:*/public boolean bakMysql(String dbName, String tableNames, String ip, String username, String password, String dbFilePath) {// 备份命令,可以分两种情况考虑,如果只备份整个数据库,那么表tableNames为空,这时备份整个数据库,如果tableNames有值,这里就备份某一张或者多张表String bakComand = " mysqldump " + "-h " + ip + " -u" + username+ " -p" + password + " --set-charset=utf-8 " + dbName + " "+ tableNames;try {Runtime rt = Runtime.getRuntime();Process p = rt.exec("cmd /c " + bakComand);// 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012年1月内蒙古科技与经济Januar y 2012 第1期总第251期Inner M o ngo lia Science T echnolo gy &Economy N o .1T o tal N o .251利用JavaBeans 实现两种数据库间数据导入的一种方法X张 斌1,刘彦军2,张凤英3,侯 峰1(1.内蒙古医学院;2.内蒙古财经学院;3.和林格尔县高级中学,内蒙古呼和浩特 010000) 摘 要:讨论了在B/S 模式下,实现不同数据库之间的数据互访,实现教学管理系统中异构数库之间的数据转换的一个方法。
论述了一个基于JDBC(Jav a Dat aBase Connectiv it y )异构数据库教学管理系统的实现过程。
在该系统中,利用JavaBeans 实现了JDBC 驱动程序的动态加载和数据库的动态链接,从而使系统具有较强的灵活性和开放性。
关键词:JDBC ;ODBC ;JavaBeans ;JDBC ——ODBC Bridg e ;数据库 中图分类号:T P311 文献标识码:A 文章编号:1007—6921(2012)01—0080—03 计算机网络化的加速发展和网络性能的提高,使信息系统得到了快速的发展。
为了充分利用各信息系统已有的数据源,经常需要实现不同信息系统之间的数据互访。
然而,系统实现技术以及实现时间上的差异,造成了在不同的信息系统中存有大量异构数据源。
当前,世界上大量宝贵的有价值的信息都以不同形式存放于不同类型的数据库系统中。
传统而普遍的Client /Sever 结构数据库系统不易于动态地适应企业、教育等行业日益增长的业务要求,不能跨平台应用,长期的维护需要很高的费用。
另一方面,从数据的存储方式上看,在本质上表示相同的信息的数据,在不同的数据源中被定义为不同的存储方式。
如:定义字段的不同,字段的类型不同,定义字段的长度不同等等。
异构数据库的存在给实现不同信息系统间数据互访带来了很大不便。
为此,解决异构数据源方便、灵活的互访问题便成为一个有意义的研究课题,尤其是在教学管理系统中实现两种不同数据库间数据的导入和导出。
1 解决方案在实现异构数据库间数据的转换与互访过程中,笔者总结了几种解决方案,通过几种方案的比较,可以选出一种比较合理的、方便的、易于使用的解决方案来实现异构数据库间数据的转换与互访,尤其是利用JDBC 技术以及第三方提供的驱动程序来实现数据库间数据的导入与导出就更为方便了。
在教务管理信息系统中的学籍管理部分,笔者就是利用JDBC 技术来实现数据库间数据的导入。
1.1 传统的解决方案解决异构数据源互访的传统方法是两种异构数据源间建立起互相转化的模式,见图1(DB 1,DB 2,DB3,DB4为数据源;箭头为转化模式)。
为解决4个异构数据源间的互访,必须建立起12种访问模式。
所以,对于N 个异构数据源,为了实现他们的互访就需要建立的转化模式总和为:T =N (N -1),相应的交互复杂度为:O(N 2)。
如果采用传统的解决方案实现异构数据源互访会给实现带来极大的不便。
在两个异构数据源建立起两种访问模式,才能实现它们的互访,这使互访系统表现出较大的复杂性,不便于灵活的访问。
每次在互访系统中加入一个新的数据源,必须为这个新数据源建立起与已有数据源的多种访问模式,这无疑又降低了系统的可扩展性。
图1 异构数据源互相转化模式1.2 直接导入与导出方案直接导入、导出的方法是利用数据库管理工具通过图形界面进行的直接操作。
比如,使用SQL Server 2000数据库,导入数据是指从SQL Server 的外部数据源检索数据,并将数据插入到SQL Server 表的过程。
而导出数据是将SQL Serv er 实例中的数据析取为某用户指定格式的过程。
SQL Server 2000提供了一个数据导入与数据导出工具(或者是利用企业管理器),这是一个向导程序,利用这个向导工具,可以将桌面数据库系统(如Access 和F ox -・80・X收稿日期:2011-11-28作者简介:张斌,男,内蒙古呼和浩特人,现工作于内蒙古医学院;刘彦军,男,内蒙古呼和浩特人,现工作于内蒙古财经学院;张凤英,女,内蒙古呼和浩特人,现工作于和林格尔县高级中学;侯峰,男,内蒙古呼和浩特人,现工作于内蒙古医学院(通讯作者)。
张斌,等・利用JavaBeans 实现两种数据库间数据导入的一种方法2012年第1期Pro 等)中的数据导入SQL Server 数据库,也可以将SQL Server 数据库中的数据导出到其他数据文件(如Access 的.MDB 文件),此外,还可以完成其他类型的迁移和转换任务。
所以,利用这种方案也可以实现不同数据源之间的互访,只不过每次导入导出都必须手工操作,这样给系统管理人员加大了工作量。
另外,这样的手工操作需要重复很多次并且需要一直保持下去,这样做太麻烦、太繁琐。
1.3 利用JDBC 技术、ODBC 技术的解决方案ODBC 、JDBC 这种开放式的连接技术是异构数据库信息集成中的关键技术。
所以,在“教务管理信息系统”中我们使用JDBC ——ODBC 桥(JDBC ——ODBC Bridge )的方法,这种方法利用JDBC ——ODBC 桥驱动程序,把标准JDBC 的调用转换为ODBC 的调用,并借助于操作系统把它发送到ODBC源,见图2。
图2 JDBC ——O DBC 解决方案通过ODBC 数据源的桥访问数据库并不是最好的解决方案。
理由是:¹利用JDBC 访问ODBC 数据源是一种效率低下并且使用范围有限的解决方案。
使用这种解决方案时,不仅系统必须传递通过多个层次的数据库调用,而且它将JDBC 代码的功能限制在驱动程序能够处理的范围之内;ºODBC 不容易使用,即使简单的查询亦得使用复杂的选项;»使用ODBC 时必须每台用户端电脑都要安装驱动程序管理器,另外再安装JDBC 驱动程序。
因为ODBC 是M icrosof t 公司提供的,所以,在安装Window s 操作系统的电脑可以使用ODBC ,但如果改变了操作系统(比如L inux 操作系统)那么ODBC 就不能正常使用。
1.4 直接利用JDBC 技术以及第三方提供的驱动程序直接利用JDBC 技术以及第三方提供的驱动程序可以访问某些专用的数据源文件,比如访问.DBF 数据源文件时,可以使用JDBC ——ODBC Bridg e 访问,但是如果是利用JDBC ——ODBC Br idge 访问.DBF 数据源文件,会给系统带来很大不便,灵活性不强。
如果是利用JDBC 技术以及第三方提供的驱动程序来连接数据库,不存在环境的限制问题(比如跨平台的使用),因为JDBC 提供了Jav a 程序与多种数据库通信的途径,而不需要编写任何与平台有关的代码来实现这种通讯。
JDBC 抽象了各个数据库厂商的详细资料并且概括了大多数常见的数据库访问函数,所以,决定改变数据库时,可以保证代码不变而只需改变JDBC 驱动程序。
JDBC 驱动程序是由Java 虚拟机使用,它把通用JDBC 调用翻译成数据库能够理解的与厂商有关的数据库调用,这样就可以实现不同数据库间的互相访问。
这种访问模式见图3。
图3 直接利用JDBC 访问模式JDBC 驱动程序一般由数据库厂商提供,也可在Int ernet 找到第三方提供的驱动程序,比如访问.DBF 数据源文件就可以直接找到提供该类型的数据库源文件的驱动程序,如:AVEconnect JDBC 。
故这种解决方案和上面介绍的三种方案相比的优点是:灵活性强、易实现、使用范围广、不受环境的限制等。
下面以方案4介绍一下它的具体操作步骤(利用JAVABEANS 实现数据库间的访问):1.4.1 与数据库建立连接所有的JDBC 程序的第一步是与数据库建立连接。
1.4.1.1 加载驱动程序。
为了与特定的数据源相连,JDBC 必须加载相应的驱动程序,使用Class.f orNam e 方法显式加载一个驱动程序的格式如下:Class .f orNam e (“acs .jdbc .Driver ”)。
1.4.1.2 建立连接。
与某个数据源建立连接是用DriverM anager 类的g et Connect ion 方法。
例如:St ring url =“jdbc:at inav:machine name:7997”;Connect io n cn =null cn =DriverM anag er.g et Connection (ur l,“atinav ”,“acs ”);其中,url 指定连接的数据源,atinav 用户名,acs 密码1.4.2 查询与检索数据库可以通过创建St at em ent 对象来执行查询语句。
所用的方法是Connect ion 类的creat eSt at ement ()。
比如:St at em ent stm t =cn.createSt at ement ();在St at em ent 对象上,可以使用ex ecuteQuer y 方法来执行一个查询语句,并把检索的结果集返回给ResultSet 对象,比如:ResultSet rs;r s =stm t.execut eQuery (“select *fro mst udent ”)・81・ 总第251期 内蒙古科技与经济 此外,还可以用其他方法实现对数据库的其他操作,如:insert表示插入数据、update表示更新数据、delet e表示删除数据等。
以上讨论了不同数据库之间互相访问的解决方案以及利用JavaBeans实现数据库连接的具体操作。
下面结合具体的实例来介绍不同数据库间的互访问题。
2 实例应用JDBC技术与第三方提供的驱动程序通过JavaBeans的具体实现在笔者开发的“教务管理信息系统”中得到了具体的应用,该系统是在Window s 2000下研制开发的,当然还可以在LINU X或其他操作系统下运行。
2.1 问题的产生在教务管理系统中,学生的基本信息是该管理系统中最重要的信息,也是整个系统正常运行的基础。
所以,教务管理中的学籍管理自然也是非常重要的,它主要包括学号、姓名、年龄、年级、入学年份、家庭住址等。
在该管理部分要求把新生的基本信息导入到教务处的学生基本信息表中。
新生表的数据源文件采用的是.DBF格式,而教务处使用的数据库则是SQL server2000,由于数据源的种类和数据存储格式定义上存在差异,所以,要实现数据的导入就要实现数据源间的转化与互访。
为了解决以上问题,在学籍管理中笔者采用了JDBC技术与第三方提供的驱动程序的解决方案(也就是解决方案4)来实现数据的导入。