`
zhyt710
  • 浏览: 206079 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PostgreSQL应用(2)--内存回收与java连接

阅读更多

一.关于垃圾清理

在PostgreSQL的bin目录下有一个名为vacuumdb的程序,是用来回收内存垃圾的。该数据库不提供自己回收垃圾的机制成为很多人的诟柄。但是只要你用该数据库,就一定要接受这个现实。在命令行下用vacuumdb --help查看个命令选项。

我们常用的是如下命令

       vacuumdb -d yourdbname -f -z -v

其中-d指明要整理的数据库,-f 指执行全面整理, -z指输出更新整理(优化)提示,-v指把信息写出到输出设备(标准输出)。

我们还可以增加 -U youusername - W yourpassword 来执行。 否则默认以操作系统当前用户名作为登录名登录。

 

知道这个以后,我们可以写个命令让操作系统定时在适当的时间执行清理命令。

 

二.java连接

废话不多说,直接用代码说话

先建立一个表如下

create table sample (
    id int,
    name varchar(20)
);

 

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class PostgresTest {
	public static void main(String[] args) throws Exception {
		//加载驱动
		Class.forName("org.postgresql.Driver").newInstance();
		
		//取得连接
		String connectionString = "jdbc:postgresql://localhost:5432/mydb";
		Connection conn = DriverManager.getConnection(connectionString, "zhangyt", "zhangyt");
		if(conn != null) {
			System.out.println("数据库连接成功");
		}
		
		Statement stmt = conn.createStatement();
		//插入一条数据
		stmt.executeUpdate("insert into sample values(2, '张艳涛')");
		
		//执行查询操作
		ResultSet rs = stmt.executeQuery("select * from sample");
		while(rs.next()) {
			System.out.println(rs.getInt(1) + " " + rs.getString(2));
		}
		
		rs.close();
		stmt.close();
		conn.close();
	}
} 

 

 注意我在PostgreSQL应用(1)已经提到了驱动的事情。我们需要把驱动相关的jar包包含到我们的classpath中。

 

与此同时我也写了一个web的测试,同样很简单。就是一个jsp提交数据,servlet去处理请求。要注意每一个细节,以杜绝乱码问题。我这个例子的主要目的是看postgres是否会出现自己以前没有遇到过的乱码问题。事实证明没有。它和oracle一样,在建立数据库的时候就指定编码。不像mysql那样的灵活,在任何一个地方都能设置编码。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    
    
    <form name="form1" method="post" action="DoPostgresTest">
    <input type="text" name="username"><br>
    <input type="submit" value="提交">
    </form>

 

package test;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

 public class DoPostgresTest extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;
   
	public DoPostgresTest() {
		super();
	}   	
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}  	
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html");
		
		String username = request.getParameter("username");
		
		try {
			//加载驱动
			Class.forName("org.postgresql.Driver").newInstance();
			
			//取得连接
			String connectionString = "jdbc:postgresql://localhost:5432/mydb";
			Connection conn = DriverManager.getConnection(connectionString, "zhangyt", "zhangyt");
			if(conn != null) {
				System.out.println("数据库连接成功");
			}
			
			Statement stmt = conn.createStatement();
			//插入一条数据
			stmt.executeUpdate("insert into sample values(2, '"+ username +"')");
			
			//执行查询操作
			ResultSet rs = stmt.executeQuery("select * from sample");
			while(rs.next()) {
				response.getWriter().println(rs.getInt(1) + " " + rs.getString(2) + "<br>");
			}
			
			rs.close();
			stmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}   	  	    
}

web.xml中添加如下配置

  <servlet>
    <description></description>
    <display-name>DoPostgresTest</display-name>
    <servlet-name>DoPostgresTest</servlet-name>
    <servlet-class>test.DoPostgresTest</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DoPostgresTest</servlet-name>
    <url-pattern>/DoPostgresTest</url-pattern>
  </servlet-mapping>

 

 

 

 

 

分享到:
评论

相关推荐

    MySQL和PostgreSQL的比较

    MySQL与PostgreSQL均提供了JDBC驱动程序,允许Java应用程序访问数据库。 #### 九、表类型与索引类型 MySQL的表类型和索引类型受到存储引擎限制,如MyISAM支持B-Tree,InnoDB也支持B-Tree。PostgreSQL则更为灵活,...

    数据库连接池java和.net

    数据库连接池是现代应用程序开发中的重要组成部分,尤其是在Java和.NET框架中。数据库连接池是一种管理数据库连接的技术,它允许多个请求共享有限数量的数据库连接,而不是为每个请求创建新的连接。这种技术大大提高...

    Java_Test.zip_java_java数据库工程

    本项目"Java_Test.zip_java_java数据库工程"旨在为初学者提供一个基础平台,以学习和掌握Java编程语言以及如何利用Java连接数据库。下面将详细阐述相关知识点。 1. **Java编程基础**: - **语法特性**:Java采用类...

    优化postgresqll的java驱动程序

    在Java应用程序中与PostgreSQL数据库交互时,性能是至关重要的因素。PostgreSQL的Java驱动程序,也称为JDBC驱动程序,是实现这种交互的核心组件。然而,有时可能会遇到连接性能问题,这可能会影响应用程序的整体效率...

    common-sdbcp1.4.jar_itmop.com.zip

    - **连接回收策略**:合理设定空闲连接回收策略,避免内存泄漏。 6. **与其他数据库驱动的兼容性** DBCP作为一个通用的连接池,支持多种JDBC驱动,如MySQL、Oracle、PostgreSQL等。只需正确配置JDBC驱动类和...

    JAVA流浪猫狗救助.zip

    Java的语法与C++相似,但更简化,同时增加了垃圾回收机制,使得程序员无需手动管理内存。 Java开发语言的核心特性包括: 1. **平台无关性**:Java虚拟机(JVM)使得Java程序能在不同的操作系统上运行,包括Windows...

    HikariCP-2.6.3

    HikariCP是一款高效、高性能的Java数据库连接池,它被设计为替代传统连接池如C3P0、DBCP等,以提供更快的数据库访问速度和更好的资源管理。其名称“Hikari”在日语中意为“光”,象征着它的核心特性——速度与轻量化...

    开源数据库连接池c3p0

    开源数据库连接池c3p0是一款广泛应用于Java后端开发中的数据库连接管理工具,它能够有效地管理和优化数据库连接,提高应用的性能和响应速度。c3p0的主要功能包括连接池的创建、维护以及自动回收资源,使得多个并发...

    c3p0连接池以及配置文件

    C3P0连接池是Java开发中常用的数据库连接池组件,它可以帮助应用程序高效、稳定地管理数据库连接。C3P0是由Maurice Priess创建的一个开源项目,它旨在提供一个健壮、完全免费的JDBC连接池实现,以解决数据库连接管理...

    基于java的服务端JavaScript框架 RingoJS.zip

    - 由于运行在Java平台上,RingoJS可以轻松连接和操作各种Java支持的数据库,如MySQL、PostgreSQL、MongoDB等,提供了灵活的数据存储解决方案。 - 使用Java的JDBC驱动,开发者可以编写SQL语句或使用ORM(对象关系...

    数据库连

    数据库连接是指应用程序与数据库管理系统(DBMS)之间建立的通信链路,使得数据的读取、写入和更新成为可能。以下是对数据库连接的详细说明: 1. **连接方式**: - **TCP/IP连接**:最常见的连接方式,通过网络...

    commons-dbcp-1.3

    2. 销毁连接池:在应用关闭时,记得关闭DBCP连接池,释放所有资源,防止内存泄漏。 3. 异常处理:在使用DBCP时,应妥善处理可能出现的数据库连接异常,如超时、无法获取连接等,确保程序的健壮性。 4. 性能调优:...

    postgresql第二课:体系结构和特色用法1

    PostgreSQL严格遵循ACID原则,支持外键、连接、视图、触发器和存储过程(支持多种编程语言,如C/C++、Java、.Net、Perl、Python、Ruby、Tcl和ODBC)。 在数据类型方面,PostgreSQL提供了丰富的支持,包括INTEGER、...

    dbcp的jar包

    4. 资源回收:当连接不再使用时,DBCP会自动回收,释放连接资源,防止内存泄漏。 5. 故障检测:DBCP提供心跳检测机制,定期检查数据库连接是否正常,如果发现异常,会自动关闭并尝试重新建立连接。 6. 支持多种...

    java和c++程序

    总结来说,Java和C++在数据库连接上通过各自的API和库与数据库交互,而在游戏设计上,Java适合轻量级和Web游戏,C++则更擅长于高性能的3D游戏。通过分析和学习提供的源代码,我们可以深入理解这两种语言在实际开发中...

    ArcSdeSDK(C API+JAVA API)

    《ArcSdeSDK:C API与JAVA API深度解析》 ArcSdeSDK是Esri公司提供的一个核心开发工具包,用于构建与ArcGIS Server交互的应用程序。它支持两种主要的编程接口:C API(应用程序编程接口)和JAVA API,允许开发者以...

    最新版linux apache-tomcat-8.5.69.tar.gz

    Apache Tomcat是一款开源的Java Servlet容器,主要用于部署和运行Java Web应用程序,特别是那些基于Java EE的Web应用。在Linux环境中,Tomcat与操作系统紧密结合,提供高效稳定的服务。最新版的Apache Tomcat 8.5.69...

    基于java的考试系统设计

    1. **Java基础知识**:Java是一种强类型、面向对象的编程语言,具有垃圾回收机制,能够自动管理内存,降低了程序出错的可能性。它的JVM(Java虚拟机)使得代码可以在不同操作系统上运行,实现了“一次编写,到处运行...

    HikariCP JDBC连接池 v3.4.5.zip

    HikariCP是一款高效、高性能的Java JDBC连接池,它被设计为替代传统连接池如C3P0和DBCP,以提供更快、更稳定的数据访问性能。在HikariCP v3.4.5这个版本中,我们可以深入探讨其在数据库连接管理、性能优化以及配置...

    基于java的开发源码-服务端JavaScript框架 RingoJS.zip

    学习和使用RingoJS,开发者不仅可以掌握JavaScript在服务端的应用,还能深入理解Java平台的优势,比如JVM的内存管理和垃圾回收机制,以及Java的类库和框架。这对于提升全栈开发能力是非常有帮助的。同时,由于...

Global site tag (gtag.js) - Google Analytics