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)。点击确定。
网站中添加库类
- 右键项目名称,添加ASP.NET文件夹–>Bin;
- 将Npsql.dll和Mono.Security.dll拷贝到项目的bin目录文件夹下(Npsql.dll和 Mono.Security.dll在postgres安装包中);
- 在项目中,右键Bin–>添加现有项,选择Npsql.dll和Mono.Security.dll,点击添加;
- 在项目中,右键Bin–>添加引用,选择浏览页签,选中Npsql.dll和Mono.Security.dll,点击确定。
添加postgres.cs接口类
- 右键项目名称,添加ASP.NET文件夹–>App_Code;
- 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




