postgresql从入门到菜鸟(五)JDBC连接postgresql数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/s465689853/article/details/81085046

之前都是通过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文。

扫描二维码关注公众号,回复: 4552844 查看本文章

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操作是否成功。

完整代码等上传后会贴出。

猜你喜欢

转载自blog.csdn.net/s465689853/article/details/81085046