精华内容
下载资源
问答
  • 一般我们在使用程序连接、操作数据库时,通常会写一个Dao类,做门用作操作数据库,以方便之用,但是对数据库的连接、登录信息一般都是写死的代码,如果更换操作其他的数据库,就必须更改代码,数据库文件配置就是...

        一般我们在使用程序连接、操作数据库时,通常会写一个Dao类,做门用作操作数据库,以方便之用,但是对数据库的连接、登录信息一般都是写死的代码,如果更换操作其他的数据库,就必须更改代码,数据库文件配置就是解决这样的问题---把要连接的数据库驱动信息,登录帐号密码等信息写在配置文件中,而在代码中,用固定的几行先读取文件中的配置信息,再连接操作数据库,即使更换其他的数据库,也不需要更该代码,只需修改下配置文件几个参数即可。数据库连接池则是解决-----多用户并发访问数据库,数据库连接性能优化方面的问题。

    数据库文件配置

    数据库信息为硬解码形式。在该实例中,我们将数据库信息放置在配置文件中,代码通过读取配置文件,获得信息并对数据库进行访问连接。也就是说,我们把要连接的数据库驱动信息,登录帐号密码等信息写在配置文件中,而在代码中,用固定的几行先读取文件中的配置信息,再连接操作数据库,即使更换其他的数据库,也不需要更该代码,只需修改下配置文件几个参数即可。

    一、介绍
    在前面的例子中,数据库的一些信息,如:数据库名/地址/用户名密码,都是写死在代码中的。如果在实际上线中,数据库信息与开发时的数据库信息不同,我们需要修改代码,重新编译项目。

    解决的办法是将这些可能发生变化的数据库信息写在文件中,代码在运行时读取这些信息,再根据这些信息访问数据。一旦数据库的信息发送变化,修改配置文件便可,无需修改代码

    properties类型文件在java开发中作为配置文件类型使用的比较多。此例中,我们的配置文件就是properties类型。

     

    本例采用JSP登录注册页面,在需要连接数据库验证信息时,对数据库的登录信息写到配置文件。
    二、步骤
    1、建立properties文件,并将该文件properties 文件放在classpath指定的路径中,便于Java对象对此文件进行访问。

    如建立文件jdbc.properties(后缀名就是properties),将该文件放置在操作数据库的Java类相同的文件中,该类在运行时,在当前文件夹下找这个文件。

    l  对应内容如下:

    jdbc.driverClassName=com.mysql.jdbc.Driver

    jdbc.url=jdbc:mysql://localhost:3306/wgw

    jdbc.username=root

    jdbc.password=root

    这4行分别存储了要连接的数据库驱动信息,url,连接登录数据库的用户名和密码。

    2、使用java代码加载properties文件。并读取properties文件中的内容。

    1. public class UserDao
    2. {
    3.    /***
    4.    *判断用户名和密码是否匹配
    5.    ***/
    6.    public boolean isUserPasswordCorrect(UserBean user){
    1. boolean result = false;
              /*设置所需变量*/
    2.    Connection con=null;
    3.    PreparedStatement pmt=null;
    4.    ResultSet rs=null;
    5. /*访问jdbc.properties文件*/
    6.    Properties prop=new Properties();
    7.    try{
    8.             InputStream in=this.getClass().getResourceAsStream("jdbc.properties");
    9.             prop.load(in);
    10.             if(in!=null)     in.close(); 
    11.         }catch(java.io.IOException e){
    12.             System.out.println("[OpenCn] 配置文件打开错误! ");
    13.             return false;
    14.         }
    15. /*读取各种参数*/
    16. String driver   = prop.getProperty("jdbc.driverClassName");  
    17.     String url = prop.getProperty("jdbc.url");  
    18.     String username = prop.getProperty("jdbc.username");  
    19.     String password = prop.getProperty("jdbc.password");  
    20.    try {
    21.    /*建立连接*/
    22.    Class.forName(driver).newInstance();
    23.    con=DriverManager.getConnection(url,username,password);     
    24. /*完成查询*/
    25.    pmt=con.prepareStatement("select * from tb_user where user_name = ? and user_password = ?");
    26.    pmt.setString(1,user.getUserName());
    27.    pmt.setString(2,user.getUserPassword());
    28.    rs = pmt.executeQuery();
    29.    /*根据数据库信息判断是否登录*/
    30.    if(rs.next()){
    31.             result = true;
    32.    }else{
    33.             result = false;
    34.    }
    35. } catch (ClassNotFoundException e) {
    36.                      e.printStackTrace();
    37.             } catch (SQLException e) {
    38.                      e.printStackTrace();
    39.             } catch(Exception e){
    40.                      e.printStackTrace();
    41.             }finally{
    42.                        try{
    43.                      /*关闭各种资源*/
    44.                      if(rs!=null)
    45.                                rs.close();
    46.                      if(pmt!=null)
    47.                                pmt.close();
    48.                      if(con!=null)
    49.                                con.close();
    50.                      }catch(Exception e){}
    51.                     }
    52.             return result;
    53.    }
    54. }

     

    注意:jdbc.properties放置位置:

    l  1、classpath路径中,如放置在UserDao.class文件同目录下。

    l  InputStream in=this.getClass().getResourceAsStream("jdbc.properties");

    l  2、web应用中放置在classes文件夹下。

    l  InputStream in=this.getClass().getResourceAsStream("/jdbc.properties");

     

    数据库池的使用

    l  传统数据库访问模式存在下面的一些缺陷:

    l  每次数据库请求都需要建立一次数据库连接,而每建立一次数据库连接就需要花费0.05s~1s的时间,这个时间相对于数据库本身的操作时间和软件本身的执行时间来说,是非常漫长的。

    l  由于没有对连接数据库的连接数量进行控制,因此可能出现超出数据库处理能力的连接数量和处理请求,导致系统的崩溃。

    l  单独管理每一个连接,并进行使用后的资源回收。在这种方式下,如果某些连接出现了异常,导致无法正常关闭连接,那么将会导致资源的严重浪费甚至数据库服务器的内存泄漏。

    l  由于以上的缺点,开发人员设计出一种叫做“连接池”的技术,来处理传统连接方式带来的问题。

    基本原理

    l  数据库连接池的基本思想就是为数据库连接建立一个“存储池”。

    l  数据库建立初期,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“连接池”中申请一个,使用完毕之后再将该连接作为公共资源保存在“连接池”中,以供其他连接申请使用。

    l  在这种情况下,当需要连接时,就不用再需要重新建立连接,这样就在很大程度上提高了数据库连接处理的速度;同时,还可以通过设定连接池最大连接数来防止系统无控制的与数据库连接;更为重要的是可以通过连接池管理机制监视数据库的连接的数量以及各连接的使用情况,为系统开发﹑测试及性能调整提供依据。

    Tomcat中配置连接池

    l  Tomcat使用的是dbcp数据源(apache上的一个java连接池项目,tomcat标准的连接池组件)。相应的jar包已经放入位置。因此只需配置。

    l  配置的方法有很多种。我们选取下面这个方法的原则依然是便于项目移植。

    l  配置项目私有的连接池。

    l  需要添加的文件:/项目名/META-INF/context.xml

    l  需要修改的文件:/项目名/WEB-INF/web.xml

    第一步:

    添加/项目名/META-INF/context.xml,文件如下所示:

    l  <?xml version="1.0" encoding="UTF-8"?>

    l  <Context reloadable="true">

    l     <Resourcename="jdbc/wgw"

    l              auth="Container"

    l              type="javax.sql.DataSource"

    l              maxActive="100"

    l              maxIdle="30"

    l              maxWait="10000"

    l              username="root"

    l              password="root"

    l              driverClassName="com.mysql.jdbc.Driver"

    l              url="jdbc:mysql://localhost:3306/wgw"/>

    l  </Context>

    其中的每个字段都有自己的含义:

    l  name:定义数据库连接的名称。通常取”jdbc/XXX”的格式。

    l  auth="Container"(不能改动)

    l  type   "javax.sql.DataSource" (不能改动)

    l  maxIdle:表示数据库连接池中处于空闲状态的最大数据库连接数。设为0表示无限制。

    l  minIdle:表示数据库连接池中处于空闲状态的最小数据库连接数。设为0表示无限制。

    l  maxActive:表示连接池中处于活动状态的最大数据库连接数。设为0表示无限制。

    l  maxWait:表示数据库连接池中数据库连接处于空闲的最大等待时间(以毫秒为单位)。如果超过此时间将接到异常。设为-1表示无限制。

    l  driverClassName:指定JDBC驱动器的类。

    l  username:表示登陆数据库时使用的用户名。

    l  password:为登陆数据库的密码。

    l  url:表示的是需要连接的数据库的地址和名称。

    l  这四个属性的定义与前面数据库操作的四个定义相同

    第二步:

    /项目名/WEB-INF/web.xml<web-app>标签中添加对数据源的引用。

    l     <resource-ref>

    l               <description>mysqlConnection</description>

    l               <res-ref-name>jdbc/wgw</res-ref-name>

    l               <res-type>javax.sql.DataSource</res-type>  

    l               <res-auth>Container</res-auth>          

    l     </resource-ref>

    l  子节点说明:

    l  description,描述信息;
    res-ref-name,参考数据源名字,同上一步的属性name;
    res-type,资源类型,”javax.sql.DataSource”;
    res-auth,”Container”;

    l  两步即可。

    l  注意:在tomcat较低的版本(4版)中,书写的形式有所不同,参见google。

    使用连接池访问数据库

    不再使用

    1. Class.forName("com.mysql.jdbc.Driver");
    2. con=DriverManager.getConnection(url,user,password);

    而是使用引入javax.naming.* 包。

    1. Context initCtx = new InitialContext();
    2. Context ctx = (Context) initCtx.lookup("java:comp/env");
    3. //获取连接池对象
    4. Object obj = (Object) ctx.lookup("jdbc/wgw");
    5. //类型转换
    6. javax.sql.DataSource ds = (javax.sql.DataSource)obj;
    7. con=ds.getConnection();

    其中,1、2、6、7行写死。变化的只有4行,需要与Resource 中name 保持一致。

    展开全文
  • ORACLE数据库文件系统简析

    千次阅读 2013-05-22 11:17:32
    一、数据库文件类型 与实例相关联的文件: 1 、参数文件:这些文件告诉Oracle实例在哪里寻找控制文件。例如,某个内存结构有多大等等。 组成数据库的文件: 2、数据文件:用于数据库(这些文件存储包含表、索引...


     一、数据库文件类型
    与实例相关联的文件:
    1 、参数文件:这些文件告诉Oracle实例在哪里寻找控制文件。例如,某个内存结构有多大等等。
    组成数据库的文件:
    2、数据文件:用于数据库(这些文件存储包含表、索引以及其他的部分的信息及数据)。
    3、重做日志文件:记录事务日志
    4、控制文件:它告诉我们这些数据文件存放在什么地方,以及其他关于其状态的信息。
    5、临时文件:用于磁盘上的分类和临时的存储。
    6、密码文件:用于在网络上执行管理活动的用户进行身份验证。
    二、参数文件
    1、数据库的参数文件通常称为init文件,或init.ora文件。这是因为它的默认名是init<ORACLE_SID>.ora。如果没有参数文件,你就不能启动数据库。这使它成为相当重要的文件。然而,由于它是一个纯文本文件,可以由任何一个文本编辑器创建,所以它不是必须特别注意的文件。参数文件的作用至少是获取数据库的名字,以及控制文件的位置。控制文件告诉Oracle其他每个文件的位置。所以它对启动数据库实例是非常重要的。
    2、在通常的配置文件中,有许多其他的配置设置。参数的数量和名称随着版本的不同而不同。例如:在Oracle8.1.5中,有一个参数文件是plsql_load_without_compile。在此之前的版本中则没有,在此之后的版本中也没有。在版本8.1.5、版本8.1.6以及版本8.1.7数据库中,分别有199、201、203个不同的参数,可以分别进行配置。在Oracle提供的个版本的Reference手册中,详细回顾了每一个已记录的参数。
    3、除了已记录的参数,还有在文档资料中没有记录的参数。区分出已记录的参数和没有记录的参数。没有记录的参数以下划线开始。这些参数并不被人所熟知,基本上没有被使用。实际上大部分不被记录的参数更烦人,它们代表着不被接受的功能和向后兼容性标志。在配置文件中没有理由使用那些没有被记录的参数。许多这样的参数有毁坏性的副作用。一般使用的没有记录的参数【_TRACE_FILES_PUBLIC=TRUE】,这使得所有开发人员都可读跟踪文件。而不是只有DBA用户可以读。
    4、参数文件不是必须在某个特殊位置的。启动一个数据库实例时,可以使用startup pfile=filename。当你想观察在不同设置下的影响时,而在数据库上尝试不同的init.ora参数时,这最为有用。
    三、数据文件
    1、每个数据库至少有一个与之相关的数据文件。其实除了最简单的“测试”数据库会只有一个数据文件以外,任何一个真正的数据库至少有两个文件(一个是“系统(SYSTEM)”数据文件,一个是“用户(USER) ”数据文件)。为了理解ORACLE是如何组织这些文件以及数据在它们内部是如何组织的,必须先理解什么是表空间(Tablespace)、段(Segment)、盘区(Extent)、块(Block)。这些都是Oracle用于保存数据库对象的分配单元。
    2、段就是数据库对象,它消耗存储空间(对象),如表、索引、回滚段等等。当你创建一个表的时候,将创建一个表段。当你创建一个分区表时,即在每个分区创建一个表段。当你创建一个索引时,将创建一个索引段,等等。每一个消耗存储空间的对象最终被存储在一个单一的段中。有回滚段、索引段、临时段、聚族段等。段本身是由一个或多个盘区组成。
    3、盘区是在文件中一个连续的分配空间。每个段至少开始于一个盘区,一些对象可能至少需要两个盘区(回滚段是一个至少需要两个盘区的例子)。在文件中,盘区中的空间总是连续的。盘区的容量范围是从一个块到2GB。盘区有块组成。
    4、一个块是在Oracle中空间分配的最小单元。块是存储数据行、索引项、临时排序结果的地方。块是Oracle读写磁盘的对象。Oracle中的块通常有3个常见的大小(2KB、4KB、8KB)。当然更大大小也是允许的。段、盘区、块之间的关系如下图:


    5、一个段由一个或多个盘区组成,一些连续分配的块组成一个盘区。数据库块的大小在数据库创建的时候就固定下来了,数据库中,每个块的容量是相同的,所有的块有相同的通用格式。块头包含关于块类型(表块、索引块等等)的信息、关于块上活动和过时的事务信息、磁盘上块的地址(位置)的信息。表目录,包含此块中存储各行的表的信息。行目录包含着在块中发现的描述行的信息。块头、表目录、行目录统称为块开销(block overhead),即在块上使用的不能提供给存储数据的空间,用来管理块本身。块剩下的两部分为:空闲空间和已用空间。


    6、表空间是一个容器,用来保存段。每一个段恰好属于一个表空间,而一个表空间可以有多个段。表空间本身有一个或多个相关联的数据文件。表空间中给定的任何一个段的盘区完全包含在一个数据文件中。然而,一个段可以拥有来自许多不同数据文件中的盘区。


    表空间在oracle中是一个逻辑存储容器。
    在Oracle中存储的层次结构是:
    (1)、数据库由一个或多个表空间组成;
    (2)、表空间由一个或多个数据文件组成,一个表空间包含一个或多个数据库段。
    (3)、段(表、索引等等)由一个或多个盘区组成。段存在于表空间中且只能属于一个表空间,但是一个段可以存储在表空间所属的多个数据文件当中。
    (4)、盘区是在磁盘上一组连续的块。盘区存在于段中,一个盘区在一个段(表空间)中,但一个盘区只能存在所属表空间的单一数据文件中。
    (5)、块是数据库中最小的分配单元,块是数据库使用的最小的I/O单元。
    7、在Oracle8.1.5之前的版本中,管理在表空间中分配盘区的方法只有一种。这一方法称为表空间字典管理(directionary-managed tablespace)。即在数据字典中管理表空间的空间。当一个对象需要另一个盘区时,它就会请求系统来获得一个盘区。Oracle会随后到它的数据字典中,运行一些请求,发现空间(或没有发现空间),随后更新一个表中的行(或将之全部删除),并在另一个表中插入一行。Oracle管理空间的方法类非常类似于通过修改数据并四处移动来修改应用程序的方法。为了获取附加空间,运行在后台的SQL称为递归SQL。SQL INSERT语句使其它的递归SQL运行以获得更多的空间。如果频繁使用递归SQL,将是十分昂贵的,因此对数据字典的更新必须串行化。它们不能同时处理。
    8、在Oracle8.1.5之后的版本中,引入了一个本地管理表空间的概念,这个概念与字典管理的概念相反。使用本地管理的表空间,在每个数据文件中存储的位图用来管理盘区。现在,要获得盘区,全部的系统需要做的就是在位图中一个位置设为1。要释放表空间,则将它恢复为0。
    四、临时文件
    Oracle中的临时数据文件是一个特殊的数据文件类型。当内存不足以在RAM中保存一个大规模排序操作的中间结果或结果集时,Oracle将使用临时文件来存储它们。永久数据对象,如表或一个索引,是不会存储到临时文件中的,但临时表或临时索引的内容则可能存储到临时文件中。所以,不能在临时文件中创建自己的应用程序表,但可以使用临时表存储临时数据。临时文件从不生成重做日志,但生成撤销日志,当用于全局临时表时,如果准备回滚一些事务,就可以在自己的会话中完成。
    五、控制文件
    控制文件是一个相当小的文件(最大为64MB),它包含Oracle需要的其他文件的目录或路径。参数文件告诉我们控制文件的位置,而控制文件则把数据库和联机重做日志文件的位置告诉实例。控制文件也给Oracle提供其他信息,例如关于已经发生的检查点的信息、数据库的名称、数据库创建时的时间戳、归档重做日志历史等等。控制文件应该由硬件或Oracle(RAID)当RAID或镜像不可用时多路服用的,且应该分别保存在分开的磁盘上,以避免万一出现磁盘故障时造成控制文件丢失。
    六、重做日志文件
    1、重做日志文件对Oracle数据库是至关重要的,它们是数据库的事务日志,仅在数据库恢复时使用(它们的唯一作用就是在实例或介质失败时使用,或作为维护用于数据库故障恢复的后备数据库的方法)。如果关掉数据库所在机器的电源,造成实例失败,Oracle将使用联机重做日志,以将数据库恢复到电源停止之前的那一刹那。如果包含数据文件的磁盘驱动器发生永久性故障,Oracle数据库将使用归档重做日志,与使用联机重做日志一样,将驱动器的备份及时恢复到那一时间点。另外,如果“意外地”丢失了一个表,或删除了一些关键信息,并提交了操作,可以通过这些联机和备份的重做日志来恢复备份,并使Oracle立即将它恢复到事故发生前的时刻。
    2、事实上,在Oracle执行的每一个操作都生成一定数量的重做日志,它们被写入联机重做日志中。一些操作可能以生成尽可能少的重做日志的方式来执行。例如,可以用NOLOGGING属性创建一个索引。这意味着日志中将不记录那个索引的初始创建。
    联机重做日志:
    1、每一个Oracle数据库至少有两个联机重做日志文件,这些联机重做日志文件在大小上是固定的,并以循环的方式使用。重做日志首先写入日志文件1,当日志文件写到末尾时,切换至日志文件2,以此类推,直到写到最后一个日志文件,当最后一个日志文件写到末尾时,将自动切换回日志文件1。
    2、从一个日志文件切换到另一个日志文件的动作称为日志切换。日志切换可能在一个优化效果不是很好的数据库中引起临时的“挂起”。因为重做日志是用来在操作失败时进行恢复处理用的,必须保证在重用之前,不需要在失败时重做日志的内容。如果Oracle不确定它需要一个日志文件的内容,它将暂时悬挂数据库的操作,并保证这个重做所“保护”的数据在磁盘上本身是安全的。一旦此事确定,将重新开始处理,重做日志将被重用。
    3、数据库缓冲区高速缓存是数据库临时存储数据的地方。这是Oracle的SGA的结构。缓冲区高速缓存是第一个也是最重要的性能优化设备,它单独存在,以便使非常慢的I/O进程显得更快一些。只要高速缓存了修改的块,且没有写到磁盘上,就不能使用那个重做日志文件。
    4、检查点是从缓冲区高速缓存到磁盘上脏(被修改过的)块的刷新。DBWn是Oracle的后台进程,负责在缓冲区高速缓存溢出的时候创造空间,更重要的是执行检查点。Oracle在后台做这件事,许多操作会导致检查点的发生,最通常的事情就是重做日志切换。当填满日志文件1,并切换到日志文件2时,Oracle初始化了一个检查点。在这时,启动DBWn,将由日志文件1保护的所有修改块刷新到磁盘上。在DBWn将那个日志文件保护的所有块刷新之前,Oracle 不能重用它。如果在DBWn完成检查点之前试图使用它,将获得如下信息:
                    ...
                    Thread I cannot allocate new log,sequence 66 
                    Checkpoint not complete 
                      Current log#2 seq#65 mem# 0:C:\ORACLE\ORADATA\TKYTE816\REDO02.LOG
                    ...
    在数据库中,有报警(ALERT)日志(报警日志是服务器上的一个文件,它包含来自服务器的丰富消息,如启动和关闭消息和异常事件,如未完成的检查点)。所以,在此时,当此消息出现时,在数据库中的处理被悬挂,这时DBWn在匆忙地完成它的检查点。Oracle尽其所能地给DBWn提供全部处理能力,以期在那时它可以更快地完成。
    5、这时一个在优化得很好的数据库实例中不会看到的信息。如果确实看到了这样的消息,那么就为最终客户引入了人为是、不必要的等待。这时可以避免的。方法是只要分配足够多的联机重做日志文件,以便于不会在检查点完成初始化之前试图重用日志文件。如果这个消息频繁出现,这意味着DBA还没有为应用程序分配足够的联机重做日志,或者需要对DBWn优化得更有效。
    6、不同的应用程序将生产不同数量的重做日志。DSS(决策支持系统,Decision Support System)将自然地生成重要的联机重做日志,但它比OLTP(事务处理 Transcation Processing)系统生成得少。数据库中二进制大对象(Binary Large Object,BLOB)中进行很多图像操作的系统,与简单的订单输入系统相比,可以生成多得多的重做日志。
    7、在设置联机重做日志的大小和数量的时候,必须考虑各种因素,如下:
    (1)备用数据库,如果你正在使用备用数据库特性,在此重做日志在它们填满以后发送到另一台机器,并应用到数据库的一个副本上, 你最有可能想要许多小的重做日志文件。这将有助于保证备用数据库与主服务器的异步不会太明显。
    (2)许多用户修改相同的块,这里你可能想要大的重做日志文件。因为每个人都在修改相同是块,那么希望在将他们写入磁盘之前,尽可能多的更新它们。每一个日志切换将触发一个检查点,所以希望日志切换不要太频繁。
    (3)恢复的平均时间,如果必须保证恢复需要尽可能少的时间。那么可能需要较小的重做日志文件。在恢复上,处理一个或两个小的重做日志文件所花费的时间比处理一个巨大的重做日志文件所花费的时间少。
    归档重做日志
    Oracle数据库可以在两种模式之中的一种下运行-----非归档模式和归档模式。如果不用归档模式的话,系统不会是一个实用系统。非归档模式的数据库迟早将在某一天丢失数据,这是不可避免的。如果不使用归档模式的话,必将丢失数据。只有测试系统或开发系统才可以运行在非归档模式下。这两种模式之间的区别就是Oracle在重用重做日志文件时,对其做了哪些工作。在包含着有价值数据的系统上,必须使用归档模式。















    展开全文
  • java生成Access数据库文件

    千次阅读 2012-12-31 13:20:23
    java生成Access数据库文件  (2011-06-29 11:01:17) 转载▼ 标签:  access数据库   文件路径   绝对路径   文件拷贝   服务端   it 分类: Java ...

    java生成Access数据库文件

     (2011-06-29 11:01:17)
    标签: 

    access数据库

     

    文件路径

     

    绝对路径

     

    文件拷贝

     

    服务端

     

    it

    分类: Java
    • 近日为客户做了一个将当前数据导出到桌面access数据库的功能
    • 思路是这样的:
    • 当客户端选中需要导出的数据发送到服务端
    • 服务端要有一个空白的access数据库,我将这个数据库名称定义为temp.mdb
    • 当服务端接收到请求的时候将这个temp.mdb复制到我指定的一个文件夹路径,复制后的名字使用当前的日期“年月日时分秒”例如:“20110628141646239.mdb”
    • 在这个20110628141646239.mdb文件中创建一个表
    • 向这个表中插入数据
    • 将插入数据后的文件发送到客户端,提示下载

    下面的是我参考的一个方法:

    • 1. 在ClassPath下存一个空的blank.mdb. (也就是在你的项目中包含一个空白的.mdb文件)
    • 2. 将项目中的blank.mdb另存到新的路径. (可能是用户选择要导出mdb文件的保存路径)
    • 3. 将.mdb作为数据源, 用JDBC ODBC添加数据. 注: jdbc-odbc 在jre中是有的jre/lib/rt.jar. 也就是不需要引入额外的jar包.



    注:
    • 步骤3中, 你可以执行CREATE Table的SQL语句.
    • 如果你已经知道了DB的SCHEMA, 那更简单了, 你直接在你的项目中包含一个带有SCHEMA的空的.mdb文件, 这样在步骤3的时候, 不需要再做表结构的创建, 只需要做数据插入即可.


    Java代码
         public class AccessUtil {   
    1.     private Connection connection;   
    2.     private Statement statement;   
    3.        
    4.     // 空白mdb文件路径. 直接保存在src/cn/iwoo/dataexport/common/下.   
    5.     private final String blankMdbFilePath = "cn/iwoo/dataexport/common/";   
    6.     // 空白mdb文件名   
    7.     private final String blankMdbFileName = "blank.mdb";   
    8.     // 需要保存到的新的mdb文件路径和名   
    9.     private String savedMdbFilePathAndName = defaultSavedMdbFilePath + defaultSavedMdbFileName;   
    10.     // 新mdb文件路径   
    11.     public static final String defaultSavedMdbFilePath = "C://";   
    12.     // 新mdb文件名   
    13.     public static final String defaultSavedMdbFileName = "data.mdb";   
    14.     // mdb文件后缀   
    15.     public static final String defaultSavedMdbFileExtension = ".mdb";   
    16.        
    17.     // 标准的单件模式   
    18.     private static AccessUtil instance = new AccessUtil();   
    19.     private AccessUtil() {   
    20.     }   
    21.     public static AccessUtil getInstance() {   
    22.         return instance;   
    23.     }   
    24.        
    25.        
    26.       
    27.     public void setSavedFilePathAndName(String newFilePathAndName) {   
    28.         this.savedMdbFilePathAndName = newFilePathAndName;   
    29.     }   
    30.        
    31.       
    32.     public void deleteOldMdbFile() throws Exception {   
    33.         File oldTargetFile = new File(savedMdbFilePathAndName);   
    34.         if (oldTargetFile.exists()) {   
    35.             oldTargetFile.delete();   
    36.         }   
    37.     }   
    38.   
    39.       
    40.     public void copyBlankMdbFile() throws Exception {   
    41.         InputStream is = this.getClass().getClassLoader().getResourceAsStream(blankMdbFilePath + blankMdbFileName);   
    42.         OutputStream out = new FileOutputStream(savedMdbFilePathAndName);   
    43.         byte[] buffer = new byte[1024];   
    44.         int numRead;   
    45.         while ((numRead = is.read(buffer)) != -1) {   
    46.             out.write(buffer, 0, numRead);   
    47.         }   
    48.         is.close();   
    49.         out.close();   
    50.     }   
    51.   
    52.       
    53.     public void connetAccessDB() throws Exception {   
    54.         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   
    55.         String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + savedMdbFilePathAndName.trim() + ";DriverID=22;READONLY=true}";   
    56.         connection = DriverManager.getConnection(database, """");   
    57.         statement = connection.createStatement();   
    58.     }   
    59.   
    60.       
    61.     private void executeSql(String sql) throws Exception {   
    62.         statement.execute(sql);   
    63.     }   
    64.   
    65.       
    66.     public void closeConnection() throws Exception {   
    67.         statement.close();   
    68.         connection.close();   
    69.     }   
    70.   
    71. }  

    当然,最后我在将我事先准备好的mdb文件copy到我指定的文件夹的时候我用的是自己写的方法

    **
      * 将一个空白的文件拷贝到指定的目录文件夹
      *
      * @param fileFrom空白文件的绝对路径
      * @param fileTo将文件复制到位置的绝对路径
      * @return
      */
     public static boolean copy(String fileFrom, String fileTo) {
      try {
       FileInputStream in = new FileInputStream(fileFrom);
       FileOutputStream out = new FileOutputStream(fileTo);
       byte[] bt = new byte[20480];
       int count;
       while ((count = in.read(bt)) > 0) {
        out.write(bt, 0, count);
       }
       in.close();
       out.close();
       return true;
      } catch (IOException ex) {
       return false;
      }
     }

    展开全文
  • Vector CANoe想要使用新的ldf文件,则需要先将文件导入,否则,ldf查看器里面内容为空 Vector CANoe导入ldf文件方法如下: 点击View->Simulation Setup选项 查看Databases栏目下为空 选中Databases,然后...

    Vector CANoe想要使用新的ldf文件,则需要先将文件导入,否则,ldf查看器里面内容为空

     Vector CANoe导入ldf文件方法如下:

    点击View->Simulation Setup选项

    查看Databases栏目下为空

     选中Databases,然后点击右键,选中"Add"选项,弹出文件夹对话框,进ldf文件所在目录,选中相应的ldf文件,点击Open按钮

     

     

    以类似方式加载dbc数据文件 

    加载完文件之后如下: 

     

    加载完ldf文件之后,nodes节点信息一般也会自动加载,如果 nodes节点信息未自动加载,可以进行手动添加

    添加之后的节点一般默认没有进行配置,添加完之后还需要进行配置

     

     

     

     其他节点添加过程类似

    展开全文
  • 如何上传SQL数据库文件

    千次阅读 2006-11-16 17:35:00
    如何上传SQL数据库文件 1.取得远程服务器的IP和登录用户名、密码;2.在本地安装好sql server服务器;3.将下载的mdf和ldf附加为数据库,在本地打开验证是否正确;4.导出数据库,源选择本地,目的选择远程服务器...
  • 达梦数据库 参数文件介绍

    千次阅读 2019-09-05 16:02:17
    达梦数据库参数文件主要有实例参数文件dm.ini、归档参数文件dmarch.ini及配置集群的参数文件dmmal.ini、dmwatcher.ini、dmmpp.ini、dmtimer.ini、dmwmon.ini。达梦数据库的参数文件,dm.ini是必须的,其它均可选择...
  • 作为一名Exchange管理员在管理exchange服务器的过程中,经常会碰到一些问题,比如日志过大,exchange数据库文件过大等一系列问题,最近发现一些管理员提出stm文件过大该如何处理?有些网友建议删除.stm文件,exchange重新...
  • 那么sqlite数据库文件所在文件夹是: /data/data/com.yourproject/databases 假设数据库名: testdatabase 控制台输入命令 adb pull /data/data/com.yourproject/databases/testdatabase.db d:\shown
  • 数据库属性文件的配置

    千次阅读 2019-05-18 00:57:07
    我们在操作数据库之前都要先加载驱动、建立连接、发送sql语句、处理返回的数据和关闭连接,基本上可以这几个过程。这样繁琐的代码实在是没有什么营养。于是,就有了各种各样的数据库工具类。作者今天不是要讲数据...
  • 索尼A系列相机或者摄像机在视频录制当中,如遇到断电,死机,异常拨电池,或者其它原因异常导致相机提示错误,"影像数据库文件错误,要修复吗”,有时点了修复可以正常修复,但有时点了修复之后,可能会发出视频没有...
  • Java上传文件数据库

    千次阅读 2016-02-29 20:22:30
    Java上传文件数据库  首先在开始本文之前推荐一篇我非常喜欢的博主——孤傲苍狼的一篇相关博文。  JavaWeb学习总结(五十)——文件上传和下载   http://www.cnblogs.com/xdp-gacl/p/4200090.html  本文主要...
  • SHP文件批量导入数据库

    千次阅读 2016-09-21 11:13:46
    Shapefile文件批量导入数据库 序言 数据制作中数据入库2是非常重要的一个环节。本文简要介绍Shp文件批量导入数据库的思路及实现。 基本设计 方案 Shapefile导入数据库,常用数据库Postgresql、mysql、oracle等...
  • Socket实例之客户端向服务端数据库上传文件UI版

    千次阅读 多人点赞 2016-10-18 08:51:23
    运行结果: 首先实现分析: ...信息保存到数据库,并提示数据库注册成功,请登录 2用户登录 客户端选择‘登录以后’后,提示输入用户名...客户端输入上传文件的路径,并读取文件数据,通过输出流发送到服务端,服务端接受
  • 客户端读取文件;服务端接收后;写入数据库;模拟某些真实环境; 一 首先实现套接字收发 效果如上;代码见下; 二 服务端添加数据库操作代码 界面如下; 三 客户端读取文件 效果如下; 四 最终效果 由此...
  • 游戏服务器之文件数据库

    千次阅读 2014-01-05 18:27:36
    游戏服务器之文件数据库用于数据服务器的存取档案。 设计思路: 1、业务线程 ...数据库文件类型分为: 1)索引文件 2)数据文件 (1)索引文件 索引文件的结构包括:文件头描述(FDBHeader...
  • 使用CSV文件批量导入数据库

    千次阅读 2018-02-20 00:40:00
    说明当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率。CSV文件:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符...
  • 把图片文件存入数据库

    千次阅读 2007-03-02 22:10:00
    把图片文件或别的什么文件存入数据库原理上也不是特别复杂,会把字符串和数值存入数据库就肯定能学会把整个文件也存进数据库。要点就是把文件转换成字节数组存到数据库的Image类型字段里。这里介绍两种方法把文件...
  • 达梦数据库中的各个日志文件

    千次阅读 2020-05-07 18:07:46
    重做日志文件 ...每个DM数据库实例必须至少有2个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用。 重做日志文件因为是数据库正在使用的日志文件,因此被称为联机日志文...
  • MySQL数据库面试题(2020最新版)

    万次阅读 多人点赞 2020-03-10 17:20:40
    文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储...
  • 文件系统与数据库系统比较

    千次阅读 2017-12-29 19:05:00
    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。 2)数据库是长期储存在计算机内、有组织的、可共享的数据集合。数据库中的数据指的是以...
  • 以前做过类似的情况,当时是先从数据库读取文件放到本地然后从本地再上传到FTP服务器;(JAVA操作数据库→本地→FTP服务器) 今天这个功能则是(JAVA操作数据库→FTP服务器); 一上来直接把以前的代码拉出来用了 ...
  • 说明:本代码经本人测试,stm89c51等开发板传感器采集数据发送到串口,实现读取并写入数据库,不懂之处大家留言,看见会及时回复大家。 1:读取串口数据写入csv文件: #!/usr/bin/python3 from PyQt5....
  • 数据库导入文件命令load data详解

    千次阅读 2016-03-21 10:59:32
    INTO OUTFILE将一个数据库的数据写进一个文件并且随后马上将文件读回数据库时,两个命令的字段和处理选项必须匹配,否则,LOAD DATA INFILE将不能正确解释文件的内容。假定你使用SELECT ... INTO OUTFILE将由逗号...
  • 文件地理数据库 - 在文件系统中以文件夹形式存储。每个数据集都以文件形式保存,该文件大小最多可扩展至 1 TB。建议使用文件地理数据库而不是个人地理数据库。 个人地理数据库 - 所有的数据集都存储于 Microsoft ...
  • 数据文件传输和数据库数据传输

    千次阅读 2017-10-18 13:01:57
    DC (data circulation) 数据循环,数据怎么高效地在数据库之间,在数据中心之间,在不同系统之间流通,循环起来,是信息系统关键的功能和性能考量指标。DC用于搭建数据流通的中间件。文件可以运输,数据可以运输,...
  • 文件服务器于客户/服务器数据库之间有一个重要差别.从根本上说,这两个术语指数据处理的两种不同方式.在文件服务器数据库中,数据存放在文件之中,数据的各个用户直接从文件中取得他们所需的东西.当有修改发生时,应用...
  • 关于图片或者文件数据库的存储方式归纳

    万次阅读 多人点赞 2016-07-31 19:45:14
    商品图片,用户上传的头像,其他方面的图片。目前业界存储图片有两种做法: 1、 把图片直接以二进制形式存储在数据库中 一般数据库提供一个二进制字段来存储二进制数据。...2、 图片存储在磁盘上,数据库字段中
  • 上传CSV文件,并分批导入至数据库

    千次阅读 2018-01-15 12:01:00
    外部导入csv文件,将数据解析并插入到mysql数据库 2.项目环境 spring spring mvc mybatis 3.解决方法 (1) 上传并读取csv文件 /** * @TODO spring mvc 方式文件上传 * @param multipartFile * @param...
  • 图片和文件如何存到数据库

    万次阅读 多人点赞 2017-08-20 14:38:55
    商品图片,用户上传的头像,...Oracle数据库中是blob或bfile类型2、 图片存储在磁盘上,数据库字段中保存的是图片的路径。一、图片以二进制形式直接存储在数据库中第一种存储实现(PHP语言): 大体思路: 1、将读取
  • package Mail; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet...数据库里的文件我自己加入进去的分别是 hostname、username、password 请问怎么实现?主要是代码不懂?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 534,103
精华内容 213,641
关键字:

如何发送数据库文件