postgresql java_postgresql java的一些例子

pgadmin3:http://www.pgadmin.org/     //postgresql的可视化管理软件,类似于mysql的sqlyog

一个小例子:

第一步:获得已有数据库的一个连接

1. load driver

2.getConnection

注册完Driver后,就可以使用DriverManager的方法了,这个可以具体参见jdk中的解释

Class.forName( "org.postgresql.Driver").newInstance();

String url= "jdbc:postgresql://localhost:5432/kddcup2012";

conn= DriverManager.getConnection(url, user , password );

url可以有三种形式:

jdbc:postgresql:databasejdbc:postgresql://host/databasejdbc:postgresql://host:port/database

而得到一个连接也有很多方法,最简单的就是像上面代码中的方法:

Connection db = DriverManager.getConnection(url, username, password);

例如,可以直接把username和password写到url中:

String ur= "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";

Connection conn= DriverManager.getConnection(url);

还可以设置Properties对象

String url = "jdbc:postgresql://localhost/test";

Properties props= newProperties();

props.setProperty("user","fred");

props.setProperty("password","secret");

props.setProperty("ssl","true");

Connection conn= DriverManager.getConnection(url, props);

以上两个方法都得到了一个ssh连接。

第二步,进行数据库操作

当获得数据库连接后就可以进行数据操作了,下面的部分会多一些简单的小例子,大多来自jdbc interface:

1.简单的查询语句1,使用statement

Statement st =conn.createStatement();

ResultSet rs= st.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500");while(rs.next()) {

System.out.print("Column 1 returned ");

System.out.println(rs.getString(1));

}

rs.close();

st.close();

还可以使用prepareStatement,对sql语句进行变量的填充

int foovalue = 500;

PreparedStatement st= conn.prepareStatement("SELECT * FROM mytable WHERE columnfoo = ?");

st.setInt(1, foovalue);

ResultSet rs=st.executeQuery();while(rs.next()) {

System.out.print("Column 1 returned ");

System.out.println(rs.getString(1));

}

rs.close();

st.close()

注:?代表变量赋值的地方,变量索引从1开始

2.使用cursor,来分页读取ResultSet,也就是说不用一次把所有查询结果提入内存。

1 conn.setAutoCommit(false);2 Statement st =conn.createStatement();3

4 //Turn use of the cursor on.

5 st.setFetchSize(50);6 ResultSet rs = st.executeQuery("SELECT * FROM mytable");7 while(rs.next()) {8 System.out.print("a row was returned.");9 }10 rs.close();11

12 //Turn the cursor off.

13 st.setFetchSize(0);14 rs = st.executeQuery("SELECT * FROM mytable");15 while(rs.next()) {16 System.out.print("many rows were returned.");17 }18 rs.close();19 st.close();

这个操作是隐式的,也就是说并不需要在程序逻辑上有什么显著的改变,它只是改变了运行的机制,也就是说在7-9行中,rs先查询50个结果,然后在while中运行50次,再向下查询50个结果,在运行50次while里的操作。而不用cursor时,rs会一次将所有结果都读入内存,如果返回的结果集特别大时这是无法运行的。

使用cursor需要几个条件:

(1) 使用V3 protocol,在7.4版本以后是默认设置

(2) Connection必须不是AutoCommit的,代码中第1行的设置:conn.setAutoCommit(false);

(3) Statement创建ResultSet时,必须使用ResultSet.TYPE_FORWARD_ONLY选项,这个设置时默认的

(4) query必须是一个单独的Statement,不能是多个Statement的总和。

(5) 另外还要设置Fetch的大小,在代码中第5行中设置,当将fetch的大小设置为0时,则表示一次全部读入。

3. 简单的Insert,Update,Delete等

在postgresql中,这些操作都需要使用PreparedStatement,就算是不需要变量的sql串。

public intDelete(Connection conn)

{int rowsDeleted=0;

PreparedStatement st;try{

st= conn.prepareStatement("DELETE FROM mytable WHERE columnfoo = 500");

rowsDeleted=st.executeUpdate();

st.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}returnrowsDeleted;

}public intInsert(Connection conn)

{int rowsInsert=0;

PreparedStatement st;try{

st= conn.prepareStatement("INSERT INTO mytable(columnfoo,value) values(?,?)");

st.setInt(1, 500);

st.setDouble(2, 0.5);

rowsInsert=st.executeUpdate();

st.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}returnrowsInsert;

}

代码中写了两个简单的Insert和Delete例子,Update与其类似。

下面是一个最最简单的DBHelper

1 packagewzy.db;2

3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.PreparedStatement;6 importjava.sql.ResultSet;7 importjava.sql.SQLException;8 importjava.sql.Statement;9

10 public classDataHelper {11

12 public staticConnection NewConnection(String database,String user,String password)13 {14 Connection conn=null;15 try{16 Class.forName( "org.postgresql.Driver").newInstance();17

18 String url = "jdbc:postgresql://localhost:5432/"+database ;19

20 conn=DriverManager.getConnection(url, user , password );21

22 } catch(InstantiationException e) {23 e.printStackTrace();24 } catch(IllegalAccessException e) {25 e.printStackTrace();26 } catch(ClassNotFoundException e) {27 e.printStackTrace();28 } catch(SQLException e) {29 e.printStackTrace();30 }31 returnconn;32 }33 public staticResultSet Select(Connection conn,String sql)34 {35 Statement st;36 ResultSet rs=null;37 try{38 st =conn.createStatement();39 rs=st.executeQuery(sql);40 } catch(SQLException e) {41 e.printStackTrace();42 }43 returnrs;44 }45 public static booleanInsertOrDeleteOrUpdate(Connection conn,String sql)46 {47 int row=0;48 try{49 PreparedStatement pst=conn.prepareStatement(sql);50 row=pst.executeUpdate();51

52 } catch(SQLException e) {53 //TODO Auto-generated catch block

54 e.printStackTrace();55 }56 return row>0;57 }58 public static boolean InsertOrDeleteOrUpdate(PreparedStatement pst) throwsSQLException59 {60 return pst.executeUpdate()>0;61 }62 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值