之前都是通过psql命令进行数据库的操作,从这一期开始准备写一些如何通过LIBPQ,JDBC,ODBC等方式来postgresql并进行相关的操作,这一期准备先说说JDBC。
这里分为三个模块来讲:
一.获取连接
二.执行select语句
三.执行insert,delete,update语句
第一部分:获取连接
要通过jdbc连接postgresql首先需要加载JDBC驱动,语法如下
Class.forName("org.postgresql.Driver").newInstance();
然后通过DriverManager获取连接
connection = DriverManager.getConnection("jdbc:postgresql://xxx.xxx.xxx.xxxx:5432/testdb", "postgres", "postgres");
注意这里的getConnection函数的使用方式,getConnection函数一共提供了三种实现
1.通过配置文件的形式连接数据库
getConnection(String paramString, Properties paramProperties)
2.通过关键字形式连接数据
getConnection(String paramString1, String paramString2, String paramString3)
3.通过连接字符串形式连接数据库
getConnection(String paramString)
比较常用的是第一种,使用配置文件的方式进行连接,这里为了方便,就采用第二种了。
注意:加载驱动和获取连接操作均需要进行异常捕获。
到这里,我们就已经能获取一个connection对象了。
第二部分:执行select语句
在获取到connection对象后,我们就可利用connection对象进行对数据库的操作了。
要进行查询操作,需要两个对象Statement和ResultSet。
JDBC一共提供了三种Statement,PreparedStatement,Statement和CallableStatement,个人对这三种方式的理解
Statement:适合只执行一次或极少执行的sql文。
PreparedStatement:适合执行需要传参并且会多次执行的sql文,并且一定程度上防止了sql注入。
CallableStatement:适合执行存储过程。
这里采用比较常用的PreparedStatement进行举例:
public ResultSet query(Connection conn, String sql) {
PreparedStatement pStatement = null;
ResultSet rs = null;
try {
pStatement = conn.prepareStatement(sql);//准备PreparedStatement
rs = pStatement.executeQuery();//执行查询
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return rs;
}
通过以上方式,我们可以获取一个ResultSet对象,即结果集,并且默认游标指在该结果集的第一行,可以通过rs.next()方法获取下一条数据,rs的解析需要结合实际表结构,下面贴出一段以供参考
while(rs.next()){ //当该结果集的下一条数据不为空,读取下一条数据
int id = rs.getInt("id"); //读取当前行名为id的列的数据
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println("id:"+id+" 姓名:"+name+" 性别:"+gender);
}
第三部分:执行insert,delete,update语句
insert,delete,update的执行和select操作类似,但是不同的地方在于,insert,delete,update操作并不会返回ResultSet,而是返回受影响的行数,具体代码如下
public boolean queryUpdate(Connection conn, String sql) {
PreparedStatement pStatement = null; //创建PreparedStatement
int rs = 0; //用于接收返回的受影响行数
try {
pStatement = conn.prepareStatement(sql);
rs = pStatement.executeUpdate();//执行sql操作,获取受影响行数
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs > 0) {
return true; //如果受影响行数超过1行,则认为操作成功
}
return false; //默认返回失败,只有受影响函数大于0时才返回true
/*实际环境中并不一定必须要受影响行数大于0才算执行成功,需根据实际情况判断*,这里的方法只是例子*/
}
以上代码通过函数返回值判断insert,delete,update操作是否成功。
完整代码等上传后会贴出。