java数据库内存
㈠ Java如何创建bdb内存数据库
(1)、Windows->Show View->Other…
(2)、选择 Management->Data Source Explorer,点击OK。
创建Driver
(1)、Window->Preferences
(2)、选择Data Management->Driver Definitions
(3)、点击Add。在Name/Type标签页中,选择Generic JDBC Driver,并修改Driver name为:JDBC Driver。
在JAR List标签页中,加入h2-1.3.164.jar。
在Properties选项页中,配置如下信息:
Connection URL:jdbc:h2:E:\DataBase\yht(路径和文件名,可以自己设置)
Database Name:SAMPLE
Driver Class:org.h2.Driver
User ID:yht(数据库用户名,可以自己设置)
如下图所示:
一路OK返回开发环境。
创建Connections
(1)、File->New->Other…
(2)、选择Connection Profiles->Connection Profile。点击Next。
(3)、选择刚创建的Generic JDBC,并修改Name为:JDBC。点击Next。
(4)、输入密码。第一次输入的为密码,点击Test Connection,查看是否连接成功。
(5)、最后点击Finish:
运行sql脚本
(1)、在环境中打开sql脚本,选择创建的数据库,如下图。
(2)、右击sql文件,选择Execute All。
(3)、成功运行,如下图所示:
获取db格式文件
在路径E:\DataBase\下获取文件:yht.h2.db。
㈡ JAVA查询数据库出现内存溢出
读取的时候内存不足了,你可以增大myeclipse的内存,在myeclise.ini里面,调大各个属性,然后你读取的时候存对象里后,通过byte字节来操作,用缓冲流,写入到磁盘中。
㈢ java如何将从数据库取出的数据预先存入到内存
我觉得你要实现的这个可能跟SpringMvc的关系不是很大。
你要达到的目的其实就是在jvm启动的时候把数据库数据加载一份到内存,一个静态变量和一个静态初始化块就可以搞定你的问题,这两者都是在类加载的时候初始化一次,像前面回答的一样,你可以用一个HashMap搞定。
稍微具体来说,一个静态变量
public static final Map<key,value> cache=new HashMap<key,value>()
static {
cache=请求数据库操作
}
key你自己加,String还是int都行,value是你数据库的结构,可以写个实体。获取的时候直接cache.get(key)就可以了。
㈣ 你好,java 向数据库添加大量数据时内存溢出 在不改变内存的情况下如何解决 你当时是怎么解决的
比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,oracle当然用三层包装即可,mysql用limit,不过分页每次都会新的查询,而且随着翻页,会越来越慢,其实我们想拿到一个句柄,然后向下游动,编译一部分数据(如10000行)将写文件一次(写文件细节不多说了,这个是最基本的),需要注意的时候每次buffer的数据,在用outputstream写入的时候,最好flush一下,将缓冲区清空下;接下来,执行一个没有where条件的SQL,会不会将内存撑爆?是的,这个问题我们值得去思考下,通过API发现可以对SQL进行一些操作,例如,通过:PreparedStatement statement = connection.prepareStatement(sql),这是默认得到的预编译,还可以通过设置:PreparedStatement statement = connection.prepareStatement(sql , ResultSet.TYPE_FORWARD_ONLY , ResultSet.CONCUR_READ_ONLY);
来设置游标的方式,以至于游标不是将数据直接cache到本地内存,然后通过设置statement.setFetchSize(200);设置游标每次遍历的大小;OK,这个其实我用过,oracle用了和没用没区别,因为oracle的jdbc API默认就是不会将数据cache到java的内存中的,而mysql里头设置根本无效,我上面说了一堆废话,呵呵,我只是想说,java提供的标准API也未必有效,很多时候要看厂商的实现机制,还有这个设置是很多网上说有效的,但是这纯属抄袭;对于oracle上面说了不用关心,他本身就不是cache到内存,所以java内存不会导致什么问题,如果是mysql,首先必须使用5以上的版本,然后在连接参数上加上useCursorFetch=true这个参数,至于游标大小可以通过连接参数上加上:defaultFetchSize=1000来设置,例如:
jdbc:mysql://xxx.xxx.xxx.xxx:3306/abc?zeroDateTimeBehavior=convertToNull&useCursorFetch=true&defaultFetchSize=1000
上次被这个问题纠结了很久(mysql的数据老导致程序内存膨胀,并行2个直接系统就宕了),还去看了很多源码才发现奇迹竟然在这里,最后经过mysql文档的确认,然后进行测试,并行多个,而且数据量都是500W以上的,都不会导致内存膨胀,GC一切正常,这个问题终于完结了。
㈤ java如何将从数据库取出的数据预先存入到内存
你要实现的这个可能跟SpringMvc的关系不是很大。
你要达到的目的其实就是在jvm启动的时候把数据库数据加载一份到内存,一个静态变量和一个静态初始化块就可以搞定你的问题,这两者都是在类加载的时候初始化一次,像前面回答的一样,你可以用一个HashMap搞定。稍微具体来说,一个静态变量
public static final Map<key,value> cache=new HashMap<key,value>()
static {
cache=请求数据库操作
}
key你自己加,String还是int都行,value是你数据库的结构,可以写个实体。获取的时候直接cache.get(key)就可以了。
㈥ JAVA 循环查询数据库,总提示内存溢出,不知道怎么办请高手帮忙
如果你的数据量非常大,肯定会内存溢出
你不停的Element dom是把xml加载到内存中的,数据量一多内存就不够了,性能低下
建议你分页查询
然后通过Xstream等xml框架去生成xml
㈦ Java前提下, MySQL数据库,一次性存储大量数据导致内存溢出
内存溢出导致程序崩溃,也分是java层崩了,还是mysql崩了。
如果是java层崩了,注意不要一次性加载太多的数据到内存,并且不在使用的数据要彻底放弃引用关系。java虽然是自动回收,回收的原则就是一个对象不再被持有,即引用计数为零。如果数据太大,可考虑临时文件。
如果是mysql崩了,首先增加配置缓存。一般来说mysql是不容易崩的,特别是插入操作的时候。查询的时候如果查询结果记录集特别大,会导致一个查询需要使用很大的内存空间,这种是有问题的。而插入操作都是一条一条的执行,不会导致大内存的使用。
如果仅仅是数据移植,也尽量不要用ORM框架,比如hibernate,mybatis这些东西,因为他们都有自己的缓存,直接使用JDBC比较好。
㈧ java相关 怎么把数据库的数据预先存入内存
记得之前的远标老师教过我这一块,问了一下。是这样回答的
你创建一个servlet的时候,添加一个init()方法,init方法中执行查询数据库的方法,把数据导入内存。
默认情况下servlet被加载是在第一次请求访问到来得时候,不过可以使用xml文件中配置
<load-on-startup>-1</load-on-startup>
是其在启动tomcat服务的时候就加载servlet就可以了。
㈨ 对于普通的数据库,有内存数据库,比如Java DB(Derby)。是数据库采用了内存数据库就算用了内存数据库
1 java DB 不是内存数据库,时能够管理TB级别数据的一个标准数据库。
使用了内存数据库,从语文角度也应理解,那就是使用了内存数据库。。这还能怎么解释。
2 文件缓存和内存数据库是完全不同的概念。你把文件读取到内存中就是在内存了。你怎么都是问这样的问题。Scanner和InputStream和文件在哪没关系,他只是读取,从哪读,是你设值的,你把文件先读到内存里,他就从内存里面读,你把文件从硬盘读,他就从硬盘读。
㈩ 内存数据库 用JAVA应该如何编写
这玩意你要自己写?
开源免费的
HSQLDB
Apache Derby
想写的话研究人家的源码吧