简单的JDBC应用程序for Java DB2007-05-30 java学堂 今天下载了jdk1.6.0,以后要慢慢来学习1.6中的新特性和其中的一些经典实例。先看看关于java DB的这个最简例子:
Simple JDBC Application (源码SimpleApp.java、文档及derby.jar,derbynet.jar,derbyclient.ar文件请从jdk1.6.0中找)
这个例子是一个最小限度的JDBC 应用程序。 关于这个程序:
- 以内嵌式模式(缺省的)或作为一个服务器环境中的客户端运行,这依赖于传递给程序的参数
- 如果运行在内嵌式模式,则启动Derby 引擎
- 如果运行在客户端模式,则连接到 Derby 网络服务器
- 创建并连接到数据库
- 创建一个表
- 插入数据
- 更新数据
- 查询数据
- 删除表
- 关闭连接
- 如果运行在内嵌式模式,则关闭 Derby。
以下是源码:
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;/* * @author janet */public class SimpleApp{/* 缺省的模式是内嵌式的*/public String framework = "embedded";public String driver = "org.apache.derby.jdbc.EmbeddedDriver";public String protocol = "jdbc:derby:";public static void main(String[] args){new SimpleApp().go(args);}void go(String[] args){/* 处理参数,确定这个程序作为内嵌式使用还是作为客户端使用*/parseArguments(args);System.out.println("SimpleApp starting in " + framework + " mode.");try{/* 装载驱动程序,如果是内嵌式模式,这将启动Derby, 因为它还没有运行. */Class.forName(driver).newInstance();System.out.println("Loaded the appropriate driver.");Connection conn = null;Properties props = new Properties();props.put("user", "user1");props.put("password", "user1");//create=true将创建数据库derbyDBconn = DriverManager.getConnection(protocol +"derbyDB;create=true", props);System.out.println("Connected to and created database derbyDB");conn.setAutoCommit(false);//设置自动提交模式Statement s = conn.createStatement();/* 创建一个表,加入几条记录并更新一条. */s.execute("create table derbyDB(num int, addr varchar(40))");System.out.println("Created table derbyDB");s.execute("insert into derbyDB values (1956,"Webster St.")");System.out.println("Inserted 1956 Webster");s.execute("insert into derbyDB values (1910,"Union St.")");System.out.println("Inserted 1910 Union");s.execute("update derbyDB set num=180, addr="Grand Ave." where num=1956");System.out.println("Updated 1956 Webster to 180 Grand");s.execute("update derbyDB set num=300, addr="Lakeshore Ave." where num=180");System.out.println("Updated 180 Grand to 300 Lakeshore");/* 查询并校验结果. */ResultSet rs = s.executeQuery("SELECT num, addr FROM derbyDB ORDER BY num");if (!rs.next()){throw new Exception("Wrong number of rows");}if (rs.getInt(1) != 300){throw new Exception("Wrong row returned");}if (!rs.next()){throw new Exception("Wrong number of rows");}if (rs.getInt(1) != 1910){throw new Exception("Wrong row returned");}if (rs.next()){throw new Exception("Wrong number of rows");}System.out.println("Verified the rows");s.execute("drop table derbyDB");//删除表System.out.println("Dropped table derbyDB"); rs.close();s.close();System.out.println("Closed result set and statement");conn.commit();conn.close();System.out.println("Committed transaction and closed connection"); boolean gotSQLExc = false;if (framework.equals("embedded")){try{DriverManager.getConnection("jdbc:derby:;shutdown=true");//关闭数据库服务}catch (SQLException se){gotSQLExc = true;}if (!gotSQLExc){System.out.println("Database did not shut down normally");}else{System.out.println("Database shut down normally");}}}catch (Throwable e){System.out.println("exception thrown:");if (e instanceof SQLException){printSQLError((SQLException) e);}else{e.printStackTrace();}}System.out.println("SimpleApp finished");}static void printSQLError(SQLException e){while (e != null){System.out.println(e.toString());e = e.getNextException();}}private void parseArguments(String[] args){
//System.setProperty("derby.system.home", "c:\DBdata");//这样可以设置数据库数据的存放目录
int length = args.length;for (int index = 0; index < length; index++){if (args[index].equalsIgnoreCase("jccjdbcclient")){framework = "jccjdbc";driver = "com.ibm.db2.jcc.DB2Driver";protocol = "jdbc:derby:net://localhost:1527/";}if (args[index].equalsIgnoreCase("derbyclient")){framework = "derbyclient";driver = "org.apache.derby.jdbc.ClientDriver";protocol = "jdbc:derby://localhost:1527/";}}}}