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并实现操作 的相关文章

  • 为什么 java 编译器不报告 Intellij 中多播表达式的未经检查的强制转换警告?

    为什么下面的代码没有报告 Intellij IDEA 的未经检查的警告jdk 1 8 0 121自从Supplier
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 如何对 JSON 类型列进行分组/选择(PG::UndefinedFunction: 错误: 无法识别 json 类型的等式运算符)

    我想做
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • Java 数组的最大维数

    出于好奇 在 Java 中数组可以有多少维 爪哇language不限制维数 但是JavaVM规范将维度数限制为 255 例如 以下代码将无法编译 class Main public static void main String args
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett

随机推荐

  • 竞品分析该怎么做

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