Discuz!NT
欢迎 游客 , 注册 | 登录 | 会员 | 界面 | 简洁版本 | 在线 | 帮助
商都网教育宝典宝库

发表新主题 回复该主题
本主题被查看213次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第   上一主题   下一主题
标题: 使用JDBC创建数据库对象(4)
-[尕硴]
超级版主
UID: 71
来自:
精华: 130
积分: 14003
帖子: 12909
注册: 2007-10-22 17:59:00
状态: 在线
威望: 444.00
金钱: 3355.00 元
只看楼主 2008-04-11 10:06
使用JDBC创建数据库对象(4)
使用JDBC创建数据库对象(4)

  · 执行SQL查询
  我们已经理解了 JDBC 的基本对象,现在就可以执行 SQL 查询了。查询是作为 Statement 对象的方法执行的,您很容易从 Connection 对象获得 Statement 对象:

String query = "SELECT FoodName FROM Food;";
ResultSet results;
try
{
Statement stmt = con.createStatement();
results = stmt.executeQuery(query);
}
catch (Exception e)
{System.out.println("query exception");}


  请注意,这个简单的查询返回 Food 表中的整个 FoodName 列。您使用像这样的简单查询获取整个列的内容。请注意,查询的查询本身是一个 ResultSet ,您可以用我们上面刚讨论过的方法对它进行处理。

  · 打印ResultSet

  因为我们总是要从 ResultSets 中打印数据,我们可以设计一种简单的方法,将整个 ResultSet 转储出来,包括表名称元数据。该子程序如下所示:

private void dumpResults(String head)
{
//
这是打印列标头和每列的内容的
//
通用方法

System.out.println(head);
try
{
//
从元数据中获取列数

rsmd = results.getMetaData();
numCols = rsmd.getColumnCount();
//
打印列名

for (i = 1; i<= numCols; i++)
System.out.print(rsmd.getColumnName(i)+" ");
System.out.println();
//
打印列内容

boolean more = results.next();
while (more)
{
for (i = 1; i <= numCols; i++)
System.out.print(results.getString(i)+" ";
System.out.println();
more = results.next();
}
}
catch(Exception e)
{System.out.println(e.getMessage());}
}

  · 一个简单的JDBC程序
  我们已经学习了 JDBC 的所有基本功能,现在我们可以编写一个简单的程序,该程序打开数据库,打印它的表名以及某一表列的内容,然后对该数据库执行查询。此程序如下所示:

import java.net.URL;
import java.sql.*;
import java.util.*;
class JdbcOdbc_test
{
ResultSet results;
ResultSetMetaData rsmd;
DatabaseMetaData dma;
Connection con;
int numCols, i;
//--
public JdbcOdbc_test()
{
String url = "jdbc:odbc:Grocery prices";
String query = "SELECT DISTINCTROW FoodName FROM Food " + "WHERE (FoodName like 'C%');";
try
{
//
加载 JDBC-ODBC 桥驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//连接数据库
con = DriverManager.getConnection(url);
//获取数据库的元数据
dma =con.getMetaData();
System.out.println("Connected to:"+dma.getURL());
System.out.println("Driver "+dma.getDriverName());
//将数据库中的表的名称转储出来
String[] types = new String[1];
types[0] = "TABLES";
//请注意通配符是 % 符号(而不是“*”)
results = dma.getTables(null, null, "%", types);
dumpResults("--Tables--");
results.close();
}
catch (Exception e)
{System.out.println(e);}
//获取表列的名称
System.out.println("--Column Names--");
try {
results =
dma.getColumns(null, null, "FoodPrice", null);
ResultSetMetaData rsmd = results.getMetaData();
int numCols = rsmd.getColumnCount();
while (results.next() )
String cname = results.getString("COLUMN_NAME");
System.out.print(cname + " ");
System.out.println();
results.close();
}
catch (Exception e)
{System.out.println(e);}
//列出一个列的内容 -- 这是一个查询
try {
Statement stmt = con.createStatement();
results =
stmt.executeQuery("SELECT FOODNAME FROM FOOD;");
}
catch (Exception e)
{System.out.println("query exception");}
dumpResults("--Contents of FoodName column--");
//尝试实际的 SQL 语句
try
{
Statement stmt = con.createStatement();
results = stmt.executeQuery(query);
}
catch (Exception e)
{System.out.println("query exception");}
dumpResults("--Results of Query--");
}


  该程序打印出的结果如下所示:

C:\Projects\objectJava\chapter19>java JdbcOdbc_test
Connected to:jdbc:odbc:Grocery prices
Driver JDBC-ODBC Bridge (ODBCJT32.DLL)
--Tables--
TABLE_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE REMARKS
groceries null Food TABLE null
groceries null FoodPrice TABLE null
groceries null Stores TABLE null
--Column Names--
FSKey StoreKey FoodKey Price
--Contents of FoodName column--
FOODNAME
Apples
Oranges
Hamburger
Butter
Milk
Cola
Green beans
--Results of Query--
FoodName
Cola
#1  
发表新主题 回复该主题
本主题被查看213次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第







现在的时间是 2008-07-24 12:20:11

版权所有 商都网教育宝典
         Powered by Discuz!NT 1.0.6666    Copyright © 2001-2008 Comsenz Inc.
Processed in 0.064 seconds