java JDBC 提高程序可移植性

程序

很多java初学者在开始接触JDBC编程的时候,在网上和大部分的教材上都是这样
介绍JDBC一般的程序:
//可以运行的完整程序
import java.sql.*;

public class DatabaseDemo
{
public static void main(String args[])
{
Connection con;
Statement stmt;
ResultSet rs;

//load the driver class
try
{//直接在程序里面写字符串 com.microsoft.jdbc.sqlserver.SQLServerDriver
//降低了程序的可移植性。
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(ClassNotFoundException e)
{
System.out.println(e.getMessage());
}

//get database connection ,statement and the ResultSet
try
{
con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs", "sa", "");

stmt=con.createStatement();
rs=stmt.executeQuery("select * from authors");

while(rs.next())
{
for(int i=1;i<=rs.getMetaData().getColumnCount();i++)
{
System.out.print(rs.getString(i)+" | ");
}
System.out.println();
}
}catch(SQLException e)
{
System.out.println(e.getMessage());
}
}

}
这个程序明显有一个问题,就是程序的可移植性很差,加入我现在不用sql server了,我要使用sybase或orcale
而程序已经大包了,怎么办。在这里我们可以像在vc ado中的 uld文件一样。使用我们的properties文件。把属性和对应的值写入属性文件。例如我们在属性文件 basic.properties 输入一些内容:
connectionURL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs
driverManager:com.microsoft.jdbc.sqlserver.SQLServerDriver
userID:sa
password:
//注意属性与值之间要有一个冒号,英文模式,不是中文冒号。
我们可以通过 java.util包里面的Properties类来读取文件属性的值。

java.util.Properties pro=new java.util.Properties pro();
try
{
pro.load(new FileInputStream("basic.properties"));
}catch(IOException e){.......}
conSql=pro.getProperty("connectionURL");
driverStr=pro.getProperty("driverManager");
userId=pro.getProperty("userID");
password=pro.getProperty("password");
这样我们就可以得到properties中的属性值。当我们的应用程序要改用其他的数据库管理系统的时候我们只要
修改 properties文件就可以了。

把上面的程序完善一些(可以运行的)
/*
AA.java
*/
import java.util.*;
import java.io.*;
import java.sql.*;

public class AA
{
public static void main(String args[])
{
String conSql;
String driverStr;
String userId;
String password;
Connection con;
Statement stmt;
ResultSet rs;
Properties pro=new Properties();;
//load the properties file and get the proterties
try
{

pro.load(new FileInputStream("basic.properties"));

}catch(IOException e)
{
System.out.println(e.getMessage());
}

conSql=pro.getProperty("connectionURL");
driverStr=pro.getProperty("driverManager");
userId=pro.getProperty("userID");
password=pro.getProperty("password");
System.out.println(conSql+"\n"+driverStr+"\n"+userId+"\n"+password);
// load the driver class
try
{
Class.forName(driverStr);
}catch(ClassNotFoundException e)
{
System.out.println(e.getMessage());
}

// get the database connection
try
{
con=DriverManager.getConnection(conSql,userId,password);
String queryStr="select * from authors";
stmt=con.createStatement();
rs=stmt.executeQuery(queryStr);

while(rs.next())
{
for(int i=1;i<=rs.getMetaData().getColumnCount();i++)
{
System.out.print(rs.getString(i)+" | ");
}
System.out.println();
}
}catch(SQLException e)
{
System.out.println(e.getMessage());
}

}

}
注意了::::属性文件要和你的java源文件放在同一个目录下面。

时间: 2024-09-27 14:34:24

java JDBC 提高程序可移植性的相关文章

简单的JDBC应用程序for Java DB

今天下载了jdk1.6.0,以后要慢慢来学习1.6中的新特性和其中的一些经典实例.先看看关于java DB的这个最简例子:Simple JDBC Application (源码SimpleApp.java.文档及derby.jar,derbynet.jar,derbyclient.ar文件请从jdk1.6.0中找) 这个例子是一个最小限度的JDBC 应用程序. 关于这个程序: 以内嵌式模式(缺省的)或作为一个服务器环境中的客户端运行,这依赖于传递给程序的参数 如果运行在内嵌式模式,则启动Derb

诊断 Java 代码: 提高 Java 代码的性能 尾递归转换能加快应用程序的速度,但不是所有的 JVM 都会做这种转换

简介: 很多算法用尾递归方法表示会显得格外简明.编译器会自动把这种方法转换成循环,以提高程序的性能.但在 Java 语言规范中,并没有要求一定要作这种转换,因此,并不是所有的 Java 虚拟机(JVM)都会做这种转换.这就意味着在 Java 语言中采用尾递归方法将导致巨大的内存占用,而这并不是我们期望的结果.Eric Allen 在本文中阐述了动态编译将会保持语言的语义,而静态编译则通常不会.他说明了为什么这是一个重要问题,并提供了一段代码来帮助判断您的即时(JIT)编译器是否会在保持语言语义的

Java程序可移植性好的原因是虚拟机,那C++呢

问题描述 在看教学视频,讲到Java的一大特点跨平台性,说Java程序可移植性强是因为有Java虚拟机存在.那如果有C++虚拟机,C++程序的可移植性不也很好吗?初学者,不要鄙视我 解决方案 解决方案二:是的,但那样C++也就不是C++了解决方案三:java就是这样出来的.嘿嘿.解决方案四:它们的原理不一样,java和C++都是基于C语言的,C++是对C语言的加强,本质上还是C语言:而java虽然也是基于C语言的,但它相当于C语言写的一个产品.java的跨平台性其实是在虚拟机上,java的语法一

嵌入式操作系统能提高代码可移植性吗?

问题描述 嵌入式操作系统能提高代码可移植性吗? 同一个平台,从高级芯片到低级芯片转移都这么麻烦,何况不同平台之间的转移.编写可移植的的代码是很重要的.嵌入式操作系统能够提高可移植性? 解决方案 不同平台,不同系统的嵌入代码,没什么可移植性. 当然,和写代码的人有关,像一些开源的项目,基本上不修改或很少的修改就可以跨平台的. 但这只是软件,而不是嵌入式系统.系统的代码,移植性不高! 解决方案二: 可移植性有几个层次: 源代码的可移植性(不修改源代码,或者只修改很少的代码就可以移植到另一个平台) A

使用pureQuery优化现有的JDBC应用程序

开始之前 pureQuery 简介 IBM Data Studio 产品组合中包括 pureQuery,它是一个高性能数据访问平台 ,旨在简化 Java 数据访问的开发.管理.安全保障和优化.它由开发工具(在 Data Studio Developer 中).一个简单直观的 API 和一个运行时(在 Data Studio purequery Runtime 中)组成. 在优化 DB2 数据的 Java 数据访问和保障访问的安全方面,pureQuery 的主 要优点是开发和部署使用静态 SQL

诊断Java代码: 提高Java代码的性能

很多算法用尾递归方法表示会显得格外简明.编译器会自动把这种方法转换成循环,以提高程序的性能.但在 Java 语言规范中,并没有要求一定要作这种转换,因此,并不是所有的 Java 虚拟机(JVM)都会做这种转换.这就意味着在 Java 语言中采用尾递归方法将导致巨大的内存占用,而这并不是我们期望的结果.Eric Allen 在本文中阐述了动态编译将会保持语言的语义,而静态编译则通常不会.他说明了为什么这是一个重要问题,并提供了一段代码来帮助判断您的即时(JIT)编译器是否会在保持语言语义的同时做尾

java jdbc 对 DB2 数据库 做CRUD 操作

问题描述 java jdbc 对 DB2 数据库 做CRUD 操作 本人想通过 java 的jdbc 连接 DB2 数据库,并对数据库进行操作,操了好几天了, 是这样的报错 的 DB2 SQL error: SQLCODE: -805, SQLSTATE: 51002, SQLERRMC: null 自己也去找了这个报错是什么意思, 网上是这样解释的 : -805 在计划中没有发现DBRM或程序包名 解决的办法就是重新绑定 然后自己又去 找 怎么绑定的方法. 我之前一直用的 sql server

Java JDBC学习实战(二): 管理结果集

在我的上一篇博客<Java JDBC学习实战(一): JDBC的基本操作>中,简要介绍了jdbc开发的基本流程,并详细介绍了Statement和PreparedStatement的使用:利用这两个API可以执行SQL语句,完成基本的CURD操作.那么,当我们进行查询操作,查询到了结果集,该如何处理呢? Java提供了一个API,专门用于表示查询的结果集--ResultSet.此外,还提供了一个结果集的分析工具--ResultSetMetaData. 一. ResultSet的介绍 1.1 可移

Java JDBC数据库链接

好久没有编写有关数据库应用程序啦,这里回顾一下java JDBC. 1.使用Java JDBC操作数据库一般需要6步: (1)建立JDBC桥接器,加载数据库驱动: (2)连接数据库,获得Connection对象(使用数据库连接地址,用户名,密码): (3)获得数据库Statement对象: (4)执行数据库操作: (5)读取结果: (6)关闭数据库连接: 2.使用Java JDBC操作数据库(mysql)代码: 连接mysql数据库,需要导入mysql数据库jar包,本代码使用mysql-con