第1讲: JDBC基础(http://gceclub.sun.com.cn/staticcontent/html/jdbc/)
1、建立数据库连接
首先要建立一个到想要使用的DBMS的连接。这包括两个步骤:(1) 加载驱动程序;(2) 创建连接。
(1) 加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //字符串为他驱动程序的类名
(2) 创建连接
创建连接的第二步是使用合适的驱动程序连接到DBMS。如下代码行示范了一般的用法:
//url字符串为使用的子协议,也就是在JDBC URL中放在jdbc:之后的东西
Connection con = DriverManager.getConnection(url,"myLogin", "myPassword");
2、创建和执行JDBC语句
Statement对象可将SQL语句发送到DBMS。这只要创建一个Statement对象,将想要执行的SQL语句传递给适当的执行方法,
然后执行该Statement对象。
Statement stmt = con.createStatement();
对于SELECT语句,使用的方法是executeQuery。对于创建或修改表的语句,使用的方法是executeUpdate。
//strSQL字符串是一条DDL(数据描述语言)语句
stmt.executeUpdate(strSQL);
3、处理结果
JDBC将结果集返回给ResultSet对象
//strSQL字符串是一条查询语句
ResultSet rs = stmt.executeQuery(strSQL);1)next方法变量rs(ResultSet的一个实例)包含了结果集中显示的表。为访问名称和单价要移动到每一行,根据它们的类型检索数值。next方法将光标移到下一行,使那行(称为当前行)成为可在其上操作的行。由于光标初始定位于ResultSet对象第一行的上面,所以第一次调用next方法将光标移到第一行,使它成为当前行。接下来调用next方法将使光标从上至下每次移动一行。2)getXXX方法适当类型的getXXX方法可用于检索列中的数值。检索VARCHAR SQL类型数值的方法是getString。检索该类型数值的方法是getFloat。每次调用next方法,下一行就成为当前行,循环一直持续到rs中再也没有可向前移动的行为止。while (rs.next()){String s = rs.getString(strColumnName1 );//strColumnName1为strSQL字符串中的列名float n = rs.getFloat(strColumnName2)//strColumnName2为strSQL字符串中的列名System.out.println(s + " " + n);}JDBC使用两种方法标识getXXX方法检索数值的列。一种是指定列名,这也是前面例子所做的。另一种是指定列索引(列的序号),1表示第一列,2表示第二列,以此类推。String s = rs.getString(1); float n = rs.getFloat(2);3)getString方法尽管推荐使用getString方法检索CHAR和VARCHAR SQL类型的数据,但也可能用它检索其他基本SQL类型的数据(但不可用它检索新的SQL3数据类型。本教程后面将讨论SQL3类型)。用getString检索所有数值有很多优点但也有局限。如果用它检索numeric类型的数据,getString将把numeric值转换成Java的String对象,这样一来,在数据要作为数字前就必须转换回numeric类型。在数值一直当成字符串的场合,这是无可非议的。如果想让程序检索除了SQL3类型之外的任何标准SQL类型,就可用getString方法。4、关闭连接connection.close();++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++下面是个完整的例子:1)下载并安装Microsoft JDBC (http://download.microsoft.com/download/SQLSVR2000/Install/2.2.0022/NT5XP/EN-US/setup.exe)2) 安装完成Microsoft JDBC后,将安装目录中的lib目录下三个jar文件msbase.jar, mssqlserver.jar, msutil.jar引入项目中3)建立数据库tempdb,建立表COFFEES,SQL语句为:CREATE TABLE COFFEES (COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, SALES INTEGER, TOTAL INTEGER)4)给表COFFEES添加一些数据,如:INSERT INTO COFFEES VALUES ('Colombian', 101, 7.99, 0, 0);5)输入以下源文件,并执行import java.sql.*;/**
* @author liujun TODO To change the template for this generated type comment go
* to Window - Preferences - Java - Code Style - Code Templates
*/
public class JDBC_01
{public static void main(String[] args)
{
showTable();
}public static void showTable()
{//String strDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String strDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
//String strConnUrl="jdbc:odbc:TempDataSources";
String strConnUrl = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tempdb";
String strSQL = "select * from COFFEES";try
{
//加载驱动程序
Class.forName(strDriver);
//创建连接
Connection objConn = DriverManager.getConnection(strConnUrl, "sa",
"");
//创建Statement对象
Statement objStatement = objConn.createStatement();
//JDBC将结果集返回给ResultSet对象
ResultSet objSet = objStatement.executeQuery(strSQL);
//获得查询结果的列数
int lCloumnCount = objSet.getMetaData().getColumnCount();
System.out.println("查询结果如下所示");
//显示列名
for (int i = 1; i <= lCloumnCount; i++)
{
System.out.print(objSet.getMetaData().getColumnName(i)
+ " ");
}
System.out.println();
//显示结果
while (objSet.next())
{
//显示COF_NAME
System.out.print("" + objSet.getString(1));
//显示SUP_ID PRICE SALES TOTAL
System.out.print(" " + objSet.getInt(2));
//显示 PRICE
System.out.print(" " + objSet.getFloat(3));
//显示SALES
System.out.print(" " + objSet.getInt(4));
//显示 TOTAL
System.out.print(" " + objSet.getInt(5));}objConn.close();}
catch (Exception e)
{
System.out.print(e.getMessage());
}
}}