暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL JDBC、ODBC 应用开发示例

原创 梧桐 2023-08-16
3499

JDBC、ODBC 程序,用于与应用程序建立连接,传送数据和查询结果。

一、JDBC连接

1 安装配置JDK软件

下载安装JDK

转到https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html。选择适当的JDK软件,然后单击“下载”。双击按一步安装。JDK软件已安装在您的计算机上,如在C:\Program Files\Java\jdk1.8.0_281目录中。如果需要,您可以把JDK安装到其它个位置。

设置JAVA_HOME:

右键单击“我的电脑”,然后选择“属性”。
在“高级”选项卡上,选择“环境变量”,然后编辑以下三个变量,例如。

JAVA_HOME C:\Program Files\Java\jdk1.8.0_281
CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
PATH %JAVA_HOME%\bin %JAVA_HOME%\jre\bin

测试是否成功

打开cmd窗口,输入java -version查看是否安装配置成功

C:\java -version java version "1.8.0_281" Java(TM) SE Runtime Environment (build 1.8.0_281-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

2 配置eclipse环境

新建java project
打开IntelliJ IDEA,新建名为pg-jdbc 的 java 项目

new —>java —>project
Project SDK 选JDK安装目录
addtional libraries and_frameworks选SQL Support
Default Dialect:选postgresql

在右上角“database”中增加“data sources and drivers”
正确填写 name general中的相关信息(略),Test Connection,到Successful
至此,数据库连接完成。

3 程序测试

把以下两个文件复制到新建的项目中(/src目录下),修改IP和PWD,City表为历史表,您也可以换成您库中已有的表。

ConnTest.java

import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ConnTest { public static void main(String[] args) { Connection conn = ConnUtil.getConn(); String sql = "select * from city"; Statement stmt; stmt = null; ResultSet rs; rs = null; try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); System.out.println("city"); while (rs.next()) { System.out.print(rs.getString(1)); System.out.print(" " + rs.getString(2)); System.out.print("\n"); } } catch (SQLException e) { e.printStackTrace(); } } }

ConnUtil.java

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnUtil { public static Connection getConn() { Connection conn; conn = null; try { Class.forName("org.postgresql.Driver"); String url = "jdbc:postgres://192.168.138.131:5432/postgres"; try { return DriverManager.getConnection(url, "postgres", "mypassword"); } catch (SQLException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } return conn; } }

RUN—>Eidt configuration

VM options参考配置如下:

-server -Xms128m -Xmx512m -XX:ReservedCodeCacheSize=240m -XX:+IgnoreUnrecognizedVMOptions -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -XX:MaxJavaStackTraceDepth=-1

RUN,结果如下:

C:\Program Files\Java\jdk1.8.0_281\bin\java.exe" -server -Xms128m -Xmx512m -XX:ReservedCodeCacheSize=240m -XX:+IgnoreUnrecognizedVMOptions -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -XX:MaxJavaStackTraceDepth=-1 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.2.3\lib\idea_rt.jar=1917:C:\Program Files\JetBrains\IntelliJ IDEA 2018.2.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\tyler\AppData\Local\Temp\classpath1384363653.jar ConnTest city 中国 西安 中国 襄阳 中国 喀什 蒙古 乌兰巴托 蒙古 苏赫巴托尔

如果您在此过程里遇到

  • Error: 找不到或者无法加载主类
  • Error: 无法加载JVM DLL C:\ Program Files \ Java \ jdk1.8.0_112
  • Error: Could not create the Java Virtual Machine.

等问题,请仔细检查上述步骤,正确配置JDK以及IDEA中有与JDK的参数。

二、ODBC的安装与使用

ODBC(Open Database Connectivity)开放数据库连接,基于Windows环境的一种数据库访问接口标准。postgres支持ODBC,程序员可通过在windows下安装odbc,实现与postgres数据库的连接。

安装VC++ runtime

  https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0    

安装ODBC

  下载postgres-odbc-2.1.msi到本地,双击安装

配置DSN

2.安装成功后,进入C:\Windows\System32\路径下,双击odbcad32.exe。
3.点击添加–>在"用户DSN"选项卡下,选择postgresql Unicode;

  • 修改Database为要连接的数据库名,如postgres;

  • 修改Server为要连接服务端IP,如192.168.138.131;

  • 修改Port为要连接的集群port,如5432;

  • 修改User Name为要连接的数据库用户,如postgres;

  • 修改Password为要连接的数据库的密码,如123456;

  • 其他默认。

    点击Test,提示连接成功,说明数据库连接成功,点击Save保存。

配置项目

右击项目-> 属性-> 配置属性->C/C++ ->

常规->附加包含目录

$PATH(实际解压路径)\odbcTestProGTest_windows \odbcTestProGTest\include $PATH(实际解压路径)\odbcTestProGTest_windows \odbcTestProGTest\lib\win32

右击项目-> 属性-> 配置属性-> 链接器-> 常规->附加库目录

$PATH(实际解压路径)\odbcTestProGTest_windows \odbcTestProGTest\lib\Win32

右击项目->属性->配置属性->链接器->输入->附加依赖项

$PATH(实际解压路径)\odbcTestProGTest_windows \odbcTestProGTest\lib\Win32\gtestd.lib $PATH(实际解压路径)\odbcTestProGTest_windows \odbcTestProGTest\lib \Win32\gtest_maind.lib $PATH(实际解压路径)\odbcTestProGTest_windows \odbcTestProGTest\lib\Win32\gtest.lib

右击项目->添加->现有项,添加odbc_config.txt(在项目目录中:PATH

\odbcTestProGTest_windows\odbcTestProGTest\odbcTestPro\odbc_config.txt)修改odbc_config.txt的内容(根据实际数据库信息修改),如:

#数据源名称 g_dbdsn=postgresql35W #连接库名 db_name=mydb #连接数据库ip地址 host=192.168.138.131 #用户名 g_dbuser=postgres #密码 g_dbpwd=mypassword #模式名 schema_name=public

右击项目->属性->点击右上角配置管理器:

活动解决方案配置选择Debug;活动解决方案平台选择Win32;保存退出属性配置。

右击项目->生成

Ctrl+F5执行用例

三、ASP.NET驱动

准备

  • 安装Visual Studio官网下载并安装Visual Studio 2013。
  • 在postgres官网下载 postgres-npsql-2.1.zip,解压得到Npsql.dll和Mono.Security.dll

新建网站

点击文件–>新建网站–>ASP.NET空网站(自定义路径和项目名称,如:D: \vs2010\WebSite1)。点击确定。

网站中添加库类

  1. 右键项目名称,添加ASP.NET文件夹–>Bin;
  2. 将Npsql.dll和Mono.Security.dll拷贝到项目的bin目录文件夹下(Npsql.dll和 Mono.Security.dll在postgres安装包中);
  3. 在项目中,右键Bin–>添加现有项,选择Npsql.dll和Mono.Security.dll,点击添加;
  4. 在项目中,右键Bin–>添加引用,选择浏览页签,选中Npsql.dll和Mono.Security.dll,点击确定。

添加postgres.cs接口类

  1. 右键项目名称,添加ASP.NET文件夹–>App_Code;
  2. App_Code下新建postgres.cs,右键App_Code–>添加新项,选择Visual C#的类,名称输入 postgres.cs,点击添加。

postgres.cs的代码如下:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //using System.Windows.Forms; using System.Data; using Npsql; public class postgres { DataSet DS; bool ECode; string ErrString; NpsqlConnection Conn = new NpsqlConnection(); public postgres(string ServerName, string ServerPort, string DBName, string UserName, string Pwd) { ECode = false; Conn.ConnectionString = "Server=" + ServerName + ";Port=" + ServerPort + ";User Id=" + UserName + ";Password=" + Pwd + ";Database=" + DBName; try { Conn.Open(); } catch (Exception e) { ECode = true; ErrString = e.Message; } } public DataSet GetRecordSet(string sql) { NpsqlCommand sqlCmd = new NpsqlCommand(); sqlCmd.Connection = Conn; sqlCmd.CommandText = sql; try { NpsqlDataAdapter adp = new NpsqlDataAdapter(sqlCmd); DS = new DataSet(); adp.Fill(DS); } catch (Exception e) { ErrString = e.Message; ECode = true; return null; } return DS; } public int ExecuteSQLScalar(string Sqls) { string s; NpsqlCommand sqlCmd = new NpsqlCommand(); sqlCmd.Connection = Conn; sqlCmd.CommandText = Sqls; sqlCmd.CommandType = CommandType.Text; try { s = sqlCmd.ExecuteScalar().ToString(); } catch (Exception e) { ErrString = e.Message; ECode = true; return -1; } return (int.Parse(s)); } public string ExecuteSQLScalarTOstring(string Sqls) { string s; NpsqlCommand sqlCmd = new NpsqlCommand(); sqlCmd.Connection = Conn; sqlCmd.CommandText = Sqls; sqlCmd.CommandType = CommandType.Text; try { s = sqlCmd.ExecuteScalar().ToString(); } catch (Exception e) { ErrString = e.Message; ECode = true; return "-1"; } return s; } public string ExecuteSQLWithTrans(string Sqls) { string s; NpsqlTransaction myTrans; myTrans = Conn.BeginTransaction(); NpsqlCommand sqlCmd = new NpsqlCommand(); sqlCmd.Connection = Conn; sqlCmd.CommandText = Sqls; sqlCmd.CommandType = CommandType.Text; sqlCmd.Transaction = myTrans; sqlCmd.ExecuteNonQuery(); //Sqls="SELECT @@IDENTITY AS ID"; sqlCmd.CommandText = Sqls; try { s = sqlCmd.ExecuteScalar().ToString(); } catch (Exception e) { ErrString = e.Message; ECode = true; myTrans.Commit(); return ""; } myTrans.Commit(); return (s); } public void ExecuteSQL(string Sqls) { NpsqlCommand sqlCmd = new NpsqlCommand(); sqlCmd.Connection = Conn; sqlCmd.CommandText = Sqls; sqlCmd.CommandType = CommandType.Text; try { sqlCmd.ExecuteNonQuery(); } catch (Exception e) { ErrString = e.Message; ECode = true; } } public NpsqlDataReader DBDataReader(string Sqls) { NpsqlCommand sqlCmd = new NpsqlCommand(); sqlCmd.Connection = Conn; sqlCmd.CommandText = Sqls; sqlCmd.CommandType = CommandType.Text; try { return sqlCmd.ExecuteReader(CommandBehavior.CloseConnection); } catch (Exception e) { ErrString = e.Message; ECode = true; return null; } } public void DBClose() { try { Conn.Close(); } catch (Exception e) { ErrString = e.Message; ECode = true; } } public bool ErrorCode() { return ECode; } public string ErrMessage() { return ErrString; } ~postgres() { } }

创建测试窗体

右键项目名称,添加新项–>Visual C#->Web窗体,点击添加。

创建测试窗体

右键项目名称,添加新项–>Visual C#->Web窗体,点击添加。

Default.aspx.cs代码如下:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Npsql; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //NpgDB myDb = new NpgDB("localhost", "5432", "postgres", "postgres", "123456"); postgres myDb = new postgres("192.168.138.131", "5432", "test", "postgres", "123456"); string retStr = ""; string testSql = "select * from student"; NpsqlDataReader reader = myDb.DBDataReader(testSql); // 判断数据是否读到尾. while (reader.Read()) { //控制台输入 string temp = String.Format("{0},{1},{2},{3}", reader[0], reader[1], reader[2], reader[3]); } System.Diagnostics.Debug.WriteLine("student\n" + retStr); Console.WriteLine(retStr); // 关闭 reader 对象. reader.Close(); } }

运行结果

• 运行结果

右键项目名称–>生成网站,启动调试(F5),查看即时窗口输出。
运行结果显示时asp.net连接使用postgres成功,显示student表的数据与postgres数据库中查看结果一致。f

最后修改时间:2025-03-12 11:20:50
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论