Java用JDBC通过远程连接PostgreSQL并实现操作

2023-10-30

工具及准备介绍:

1.本文使用的开发软件是eclipse1.7
2.需要下载postgresqlpostgresql-9.2-1002.jdbc3.jar (需要的话在我的资源上下载);需要数据库管理软件Navicat
3.本文是用JDBC连接数据库,通过读取".sql"文件,实现对Postgresql数据库的查询插入操作

实施步骤

1.先远程连接上数据库

(1)打数据库管理软件Navicat,点击左上角的连接,选择PostgreSQL。

在这里插入图片描述
(2)填写连接信息,此处只要填写连接名和密码(安装PgSQL时设置的密码),其他的默认即可。localhost为本机地址(远程连接填写其IP地址),5432是PgSQL数据库的端口。填写完连接信息后,点击测试连接,如果连接成功对话框即表示PgSQL Server已开启。点击确定完成PgSQL数据库的连接。
在这里插入图片描述
连接完成以后,在左侧会看到连接信息,其中Bolisen子目录下的postgres是一个初始的PgSQL数据库,可以直接使用。也可以选中postgres右击选择新建数据库创建一个新的PgSQL数据库。
在这里插入图片描述

插一句(如果项目jar包会导入布局啥的已建好请忽略此条)

开始前的java项目创建省略,下面贴一下我的简单项目图 :!jar包导入的话:新建一个lib(名字随意)文件夹把下载的jar包放进去–>鼠标右击jar包 -->点击Build Path -->然后你点击第一个把它rebuild进去,它就会进入到Referenced Libraries里面(见图一)。dao包主要写对数据的插入方法;Demo包是测试代码;util包是工具包,写连接数据库这些的方法这里插入图片描述
图一:在这里插入图片描述

2.开始写Java代码

2.1首先连接数据库(配置文件方式连接)

(1)项目下建一个.properties文件,例如本文的dbcpconfig.properties文件,文件名可自己取,下面贴一下我的配置文件内容:

driver=org.postgresql.Driver
url=jdbc:postgresql://10.167.81.11:27500/postgres?characterEncoding=utf-8
username=user
password=zzr1100!

<!-- \u521D\u59CB\u5316\u8FDE\u63A5 -->
initialSize=10
<!--\u6700\u5927\u8FDE\u63A5\u6570\u91CF  -->
maxActive=50
<!-- \u6700\u5927\u7A7A\u95F2\u8FDE\u63A5 -->
maxIdle=20
<!-- \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5 -->
minIdle=5
<!-- \u8D85\u65F6\u7B49\u5F85\u65F6\u95F4\u4EE5\u6BEB\u79D2\u4E3A\u5355\u4F4D 6000\u6BEB\u79D2/1000\u7B49\u4E8E60\u79D2 -->
maxWait=60000在这里插入代码片

注意:后面的初始化大小最大容量这些参数一定要写,不然就连不通
(2).连接数据库的Java代码,如下:

public class JDBCUtils {
	       private static Properties prop;
	       static {
	              prop = new Properties();
	              try {
	                    InputStream is= JDBCUtils.class.getClassLoader().getResourceAsStream(
	                                   "dbcpconfig.properties");
	                    prop.load(is);               
	                     Class.forName(prop.getProperty("driver"));//加载驱动
	              } catch (Exception e) {
	            	  	System.out.println("出错了");
	                     throw new RuntimeException(e);
	                     
	              }
	       }
	       //获取连接
	       public static Connection getConnection(Connection conn) {
	              if (conn==null) {
	                     try {
	                            conn=DriverManager.getConnection(prop.getProperty("url"),
	                            prop.getProperty("username"),
	                            prop.getProperty("password"));
	                     } catch (SQLException e) {
	                            throw new RuntimeException(e);
	                     }
	              }
	                return conn;   
	       }
	       //关闭资源
	       public static void close(Connection conn,PreparedStatement prep,ResultSet rs){
	        if(rs != null){
	            try {
	                rs.close();
	            } catch (SQLException e) {
	                e.printStackTrace();
	            } finally{
	                rs = null;
	            }
	        }
	        if(prep != null){
	            try {
	                prep.close();
	            } catch (SQLException e) {
	                e.printStackTrace();
	            } finally{
	                prep = null;
	            }
	        }
	        if(conn != null){
	            try {
	                conn.close();
	            } catch (SQLException e) {
	                e.printStackTrace();
	            } finally{
	                conn = null;
	            }
	        }
	    }
	       public static void close(Connection conn,PreparedStatement prep){
	    	   if(prep != null){
		            try {
		                prep.close();
		            } catch (SQLException e) {
		                e.printStackTrace();
		            } finally{
		                prep = null;
		            }
		        }
		        if(conn != null){
		            try {
		                conn.close();
		            } catch (SQLException e) {
		                e.printStackTrace();
		            } finally{
		                conn = null;
		            }
		        }
	       }
}
在这里插入代码片

2.2建一个.sql文件,读取文件执行插入操作

(1)本文以插入操作举例说明:如下图新建一个sqlfile(名随意)文件夹,再新建一个.sql文件,里面写入你要插入数据的sql语句(注意这里面我只写了一行插入语句进行测试,如果写多行插入语句 ,需要自行再添加逻辑代码)附本文 sql语句示例供参考
在这里插入图片描述

INSERT INTO hxdb.person( name, age, sex)VALUES (?, ?, ?)

(2)Java读取sql文件实现

public class FileReader {
	
	    public static String readText() {
	    	String filePath="sqlfile/insert.sql";
	    	StringBuilder sb=new StringBuilder();
	        //通过路径创建文件
	        File file = new File(filePath);     
	        if (file.isFile() && file.exists()) {
	            try( //文件编码为gbk,这里做个转换
		                InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
		                //字符缓冲流
		                BufferedReader br = new BufferedReader(isr);) {              
	            		String line=null;               
	                while ((line = br.readLine()) != null) {            	
	                	sb.append(line);					
	                }
						             
	            } catch (IOException e) {
	                e.printStackTrace();
	                System.out.println("文件读取错误!");
	            }
	        }else {
	            System.out.println("文件不存在!");
	        }
	        return sb.toString();
	    }	   
}

(3)插入数据操作方法类附本文参考(本文Symfware类主要封装查询插入这些方法,实际类名你自己根据项目取好)

public class Symfware {
	PreparedStatement ps = null;
	Connection con=null;
	ResultSet resultSet=null;
	int result=0;
	//1.查询person表中所有内容
	public void selectPerson(String line) {
		 con=JDBCUtils.getConnection(con);//连接数据库
		try {
			
			 ps=con.prepareStatement(line);
			System.out.println(ps);
			 resultSet=ps.executeQuery();
			while (resultSet.next()) {
				String id = resultSet.getString("name");       //读取当前行名为id的列的数据
	             int age1 = resultSet.getInt("age");
	            // int sex1 = resultSet.getInt("sex");​
	             //System.out.println("name:"+id+"age:"+age1);		
			}
			
		} catch (SQLException e) {
	
			e.printStackTrace();
		}finally {
			JDBCUtils.close(con, ps,resultSet);
		}
			
	}
	
	//2.插入 sql 操作
	public int insertContent(String name,int age,int sex ) {
		
		String sql=FileReader.readText();//读取到的sql
		con=JDBCUtils.getConnection(con);
		
		try {
			con.setAutoCommit(false);
			ps=con.prepareStatement(sql);
			ps.setString(1, name);
			ps.setInt(2, age);
			ps.setInt(3, sex);
			result=ps.executeUpdate();
			 System.out.println(result + "11111多少行");
			 con.commit();
		} catch (SQLException e) {
			e.printStackTrace();
			
		}finally {
			JDBCUtils.close(con, ps);
		}	
		return result;
	}
}

2.3终于到最后一步了,测试结果

以下贴上本文的测试例子

public class Test1 {
	public static void main(String[] args) {
	
		 Symfware symfware=new Symfware();
		 symfware.insertContent("1111", 1238, 0);
		
	}	
}

好嘞!谢谢观看,希望能帮到你

题外话:哈哈哈,我的这篇csdn博文还是我今年毕业后七月份进入一个项目组,期间经历的一小段作业,隔了折磨久才有时间想着把它记录一下,但愿其中细节我没搞错(哈哈哈)如有问题,还请见谅!谢谢

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java用JDBC通过远程连接PostgreSQL并实现操作 的相关文章

  • 我不断收到错误“关系 [TABLE] 不存在”

    我一直在尝试查询数据库中的两个表 在服务器资源管理器中 我可以看到两个表 甚至可以看到其中的列 我们将它们称为 Schema table1 和 Schema table2 其中 Schema 的第一个字母大写 我尝试运行以下查询 selec
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 转义 to_tsquery 中的特殊字符

    如何转义传递给的字符串中的特殊字符to tsquery 例如 这种查询 select to tsquery AT T 生产 NOTICE text search query contains only stop words or doesn
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 竞品分析该怎么做

    竞品分析 作用 知己知彼 百战不殆 为自身产品设计提供功能 可用性 关键技术等方面的参考 提高自身产品的差异化程度 为新立项的产品 拍脑袋想出来的 降低风险 如何选择竞品 行业内领先的产品 通常可以根据一些百度指数 行业排名 业务相似程度来
  • 四款Python在线模拟器

    一 菜鸟工具 地址 http c runoob com compile 9 打开的界面是酱紫的 左边是代码输入框 右边是结果输出框 特点 1 支持切换Python2 Python3版本 2 不支持常用导入模块 例如pandas等 3 运行速
  • 使用Python生成docx文档

    1 首先需要安装doxc的公共库 pip install python docx U 2 安装成功后 使用这个库的方法import docx 3 这样生成的docx内容会有汉字显示不出来 4 这样生成的docx会有乱码 需要调整字体格式添加
  • 解决linux磁盘空间不足的方法

    磁盘空间不足的解决办法 1 首先确定是否是磁盘空间不足 输入命令 df h 查看磁盘信息 很明显 Filesystem下的挂载点 dev vda1 下的50G容量已经耗尽 这时最简单的办法就是找到大且无用的文件并删除 首选就是log文件 2
  • Flutter 常见问题总结

    文章目录 1 内容简介 2 使用Column等容器包裹ListView报错的问题 3 Navigator operation requested does not include a Navigator 4 设置Container背景色 5
  • Java开发中使用sql简化开发

    引语 在Java开发中 我们更希望数据库能直接给我们必要的数据 然后在业务层面直接进行使用 所以写一个简单的sql语句有助于提高Java开发效率 本文由简单到复杂的小白吸收 还请多多指教 使用MySQL数据库 先创建一个简单的表 DROP
  • elemenui自己本地跑起存在的问题&做自定义组件迭代规范

    npm install安装依赖出现PhantomJS not found on PATH 问题 PhantomJS not found on PATH PhantomJS not found on PATH Downloading http
  • 在 React 中应用设计模式:策略模式

    这篇文章是关于我们许多人在 React 和前端开发中遇到的一个问题 有时甚至没有意识到这是一个问题 在不同的组件 钩子 实用程序等中实现了一段逻辑 让我们深入了解问题的详细信息以及如何解决它 正如标题所暗示的 我们将使用策略模式来解决它 问
  • react性能优化的几种方法

    react性能优化的6中方法 1 避免使用内联函数 每次render渲染时 都会创建一个新的函数实例 应该在组件内部创建一个函数 讲事件绑定到函数 这样每次调用render时 就不会创建单独的函数实例 2 使用react fragement
  • 实验五(数据结构与算法实验) 稀疏矩阵

    实验五 数据结构与算法实验 稀疏矩阵 稀疏矩阵ADT的实现 在现实应用中 一些规模很大的特殊矩阵具有重要的地位 特殊矩阵可以采用二维数组存储 简单直接 顺序存储方式保持了矩阵中元素之间的二维线性关系 矩阵操作的算法都很简单 但是其空间的利用
  • 【深入理解C++】引用

    文章目录 1 变量的别名 2 变量的多个别名 3 引用存在的价值 4 引用的大小 5 从汇编角度看引用 6 结构体的引用 7 指针的引用 8 数组的引用 1 变量的别名 在 C 语言中 使用指针 Pointer 可以间接获取 修改某个变量的
  • AS3.0(ActionScript3.0)的开发工具

    转自Adobe 根据项目需求和可用资源 您可能希望使用几个工具中的一个 或结合使用多个工具 来编写和编辑 ActionScript 代码 Flash 创作工具除了创建图形和动画的功能之外 Adobe Flash CS3 Profession
  • portal.php无法打开,Discuz论坛为什么门户、论坛都只能访问到门户?论坛无法访问...

    最近无忧主机小编碰到一个非常奇怪的问题 正常情况下 discuz的门户和论坛是可以分开访问的 比如51php com forum php和51php com portal php 分别访问到的是论坛和门户 相信大部分的客户也是这样的 但是昨
  • sqlilabs靶场学习(part1:环境搭建)

    sqlilabs靶场学习 0x00 两个小目标 0x01 sqlilabs 简介 0x02 sqlilabs 环境搭建 1 db creds inc文件配置 2 setup db php文件创建表结构 0x03 测试关卡 0x00 两个小目
  • 架设传奇时打开DBC数据库出错或读取DBC失败解决方法

    架设传奇时打开DBC数据库出错或读取DBC失败解决方法 DBC右键 属性 高级 管理员身份运行 即可 转载于 https www cnblogs com tutublogs p 8136792 html
  • Python函数和模块运用实践

    1 函数的定义与调用 函数名尽量用英文单词命名 并且容易识别意思 函数的形参有4中类型的参数 位置参数 指定参数 缺省参数和不定长参数 在python实践过程中用的最多的是不定长参数 不定长参数方便代码重构 def introduction
  • 使用Clion开发STM32过程中的提示:此文件不属于任何项目目标,代码洞察功能可能无法正常工作(附带汉化方法)

    Catalog 一 问题描述 二 解决办法 三 附带Clion汉化方法 一 问题描述 笔者在学习STM32开发过程中 在使用CubeMX生成工程文件后 又新建了自己的User文件 在编译的过程中终端会提示 在文件中会提示 并且笔者检查代码确
  • SQLite基本操作

    SQLite SQLite是一个软件库 实现了自给自足的 无服务器的 零配置的 事务性的 SQL 数据库引擎 SQLite 源代码不受版权限制 SQLite 直接访问其存储文件 SQLite 是非常小的 是轻量级的 完全配置时小于 400K
  • Git安装与配置

    1 Git安装与配置 1 1 什么是Git Git是目前世界上最先进的分布式版本控制系统 Git是免费 开源的 最初Git是为辅助 Linux 内核开发的 来替代 BitKeeper 作者 Linux和Git之父李纳斯 托沃兹 Linus
  • Java用JDBC通过远程连接PostgreSQL并实现操作

    工具及准备介绍 1 本文使用的开发软件是eclipse1 7 2 需要下载postgresqlpostgresql 9 2 1002 jdbc3 jar 需要的话在我的资源上下载 需要数据库管理软件Navicat 3 本文是用JDBC连接数