- 浏览: 39776 次
- 性别:
- 来自: 厦门
最新评论
首先要建立一个到想要使用的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());
}
}}5、使用预备语句
PreparedStatement对象是包含一条预编译过的SQL语句。DBMS不必编译就可直接运行PreparedStatement的SQL语句。所以代替Statement对象一般会缩短执行时间。尽管paredStatement对象可用于不带参数的SQL语句,但在多数场合是用于带参数的SQL语句。其用法如下:
String strUpdateSales="UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?";
PreparedStatement updateSales = con.prepareStatement(strUpdateSales);updateSales.setInt(1, 75);//给上面的SQL语句的第一个问号付值updateSales.setString(2, "Colombian");//给上面的SQL语句的第二个问号付值updateSales.executeUpdate();//执行UPDATE COFFEES SET SALES = 75 WHERE COF_NAME LIKE ‘Colombian’因此,可用该对象制作成模板实现一次构造多条带参数的SQL语句,简化编码。6、executeUpdate方法的返回值executeQuery返回一个ResultSet对象,但executeUpdate返回的是一个整数值,指出了表中已更新的行数如果executeUpdate的返回值为0表明如下两种情况:(1) 执行的语句是一不影响任何行的更新语句;(2) 执行的是一DLL语句。7、使用事务一个事务是作为一个单元执行的一组语句(一条或多条语句),因此它们要么全部执行,要么全部不执行。要让两条或更多条语句组成一个事务就要禁用自动提交模式,具体用方法con.setAutoCommit(false);一旦禁用了自动提交模式,就没有SQL语句会提交了,除非您显式调用con.commit()方法,实现提交事务。使用事务可以保持数据完整性。调用rollback方法可取消一个事务,将修改的任何数据返还到以前的值。如果在执行一个事务中的一条或多条语句时得到了SQLException。就应该调用rollback方法取消事务,从头开始整个事务。一般要在catch块中调用rollback,以避免可能使用不正确的数据。8、检索警告SQLWarning对象是SQLException的子类,用于处理数据库访问警告。就像异常一样,警告并不终止程序的执行;它们只是提醒用户——发生了一些未预料的事情。Connection对象、Statement对象(包括PreparedStatement和CallableStatement对象)或ResultSet对象都会报告警告。这些类都有getWarnings方法,为查看调用对象报告的第一个警告,就必须调用该方法。如果getWarnings返回一个警告,就可在其上调用SQLWarning方法getNextWarning取得其他警告。自动执行一条语句会清除前一条语句的警告,因此警告不会迭加。但这也表明提取一条语句报告的警告必须在执行下一语句之前进行。9、存储过程存储过程是一组SQL语句组成的逻辑单元,用于执行特定的任务。存储过程用于封装数据库服务器上执行的一组操作或查询。存储过程可以编译,然后使用不同的参数和结果执行,这些参数和结果可以是输入、输出和输入/输出参数的任意组合。1)用SQL语句创建存储过程如下所示,其方法同其他的DDL语句相同:String createProcedure = "create procedure SHOW_SUPPLIERS " +"as " +"select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " +"from SUPPLIERS, COFFEES " +"where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +"order by SUP_NAME";Statement stmt = con.createStatement();stmt.executeUpdate(createProcedure);2)从JDBC调用存储过程第一步是创建一个CallableStatement对象。CallableStatement对象包含了存储过程的一个调用;但它不包含存储过程本身。接着使用连接con创建了存储过程的一个调用。花括号内的那部分就是存储过程的转义语法。当驱动程序碰到“{call SHOW_SUPPLIERS}”时,它将把这个转义语法转换成数据库使用的本地SQL,以调用call 后面的的存储过程。如下所示:CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");ResultSet rs = cs.executeQuery();注意,用于执行cs的方法是executeQuery,因为cs调用的存储过程包含一个查询,执行后产生一个结果集。如果存储过程包含一条更新或一条DLL语句,那就要使用executeUpdate方法。但有时一个存储过程包含多条SQL语句,因而它产生的不只是一个结果集、不只是一个更新计数或产生一些结果集和更新计数的组合。这样就有多个结果集,这时就应该使用execute方法来执行CallableStatement。 CallableStatement类是PreparedStatement的子类,因此CallableStatement对象可与PreparedStatement对象一样带有输入参数。此外,CallableStatement对象还可带输出参数或输入/输出参数
发表评论
-
偶数样式
2008-11-04 12:25 567<s:if test="#index. ... -
struts的分页
2009-09-22 12:03 655相关文章: 一种传递分页参数的方法 sho ... -
Struts2+JQuery+JSON集成
2009-09-30 12:52 692Struts2+JQuery+JSON集成 细 ... -
Is there a server running on localhost:3306?
2009-11-03 15:50 775这个是mysql版本不同的问题 -
velocity的默认加载路径修改
2009-11-10 15:15 1088package com.yaday.test;import ... -
关于表达式中的#、%、$
2009-11-23 10:53 928引用自:http://blog.csdn.ne ... -
spring结合velocity的应用实例
2009-11-26 11:36 940import java.util.Map; import or ...
相关推荐
5. **事务(Transaction)管理**:JDBC支持ACID(原子性、一致性、隔离性和持久性)事务属性,确保数据的完整性和一致性。`Connection`对象提供了开始、提交和回滚事务的方法。 6. **批处理(Batch Processing)**...
SQLJDBC和SQLJDBC4是Microsoft为Java应用程序提供的用于连接SQL Server数据库的驱动程序。这两个版本都是JDBC(Java Database Connectivity)驱动,允许Java开发者在应用程序中与SQL Server进行交互。下面将详细介绍...
5. **事务处理**:JDBC提供了对ACID(原子性、一致性、隔离性、持久性)事务的支持,确保数据的一致性。 对于SQL Server特定的功能,如T-SQL存储过程,JDBC Driver 3.0也提供了调用接口。开发者可以通过...
总结起来,Spring Data JDBC通过提供高级的抽象和自动化,降低了数据库操作的复杂性,提高了开发效率,而JDBC则是底层的数据库访问API,灵活性更高但需要更多的手动配置和代码编写。根据项目需求和团队技能,开发者...
此外,JDBC也提供了事务管理功能,可以控制一组数据库操作的原子性,确保数据一致性。 六、最佳实践 1. 连接池:使用连接池(如HikariCP或C3P0)管理数据库连接,以提高性能和资源利用率。 2. 数据库连接关闭:...
4. **RowSet接口的增强**:JDBC6支持类型4的JavaBeans Compliant RowSets,允许离线操作数据,增强了数据的移动性和可移植性。 5. **Unicode增强**:对Unicode字符集的支持得到了加强,处理多语言数据更加便捷。 6...
JDBC 4.3规范文档是Java数据库连接(JDBC)API的官方...通过遵循JDBC规范,开发者可以编写出能够在多种数据库系统中移植的代码,同时确保代码的可维护性和扩展性。而对规范文档的深入学习,则是获取这一知识的开始。
hive-jdbc
JDBC 解析JDBC中文API各种数据库之间的链接问题,网络编程
在Java编程语言中,JDBC(Java Database Connectivity)是一个核心的...正确选择和使用JDBC驱动可以确保应用程序的兼容性和最佳性能。在升级Java版本或数据库时,记得检查并更新对应的JDBC驱动,以保持最佳的互操作性。
1. **标准化**:JDBC提供了一套标准API,使得Java开发人员能够以相同的方式连接到不同的数据库,这极大地提高了代码的可移植性和灵活性。 2. **广泛的数据库支持**:通过JDBC,Java程序可以连接到几乎所有主流的...
Java JDBC(Java Database Connectivity)是Java编程语言中用于与各种关系数据库进行交互的一组接口和类。它作为标准API,允许开发人员通过编写Java代码来访问和操作数据库,无需了解数据库特定的SQL语法或者驱动...
Java Database Connectivity(JDBC)是Java编程语言中用于与各种数据库进行交互的一组接口和类。JDBC2000和JDBC2005分别指的是在2000年和2005年时期的JDBC规范版本。这两个版本都是在Java数据库连接技术的发展历程中...
标题中的"sqljdbc4.jar, sqljdbc41.jar, sqljdbc42.jar"是指Microsoft SQL Server为Java应用程序提供的Java Database Connectivity (JDBC)驱动程序。这些JAR文件是数据库连接的关键,允许Java代码与SQL Server进行...
sqljdbc.jar和sqljdbc4.jar属于Type 4,即纯Java实现的驱动,无需依赖于数据库供应商的特定接口或中间件,因此具有较好的跨平台性。 要使用这些驱动,开发者首先需要在项目中引入对应的jar文件,然后通过以下步骤...
* JDBC对于使用者要有一致性,对不同的数据库其使用方法都是相同的。 * 驱动开发必须要实现Driver接口。 二、JDBC的API * java.sql包和javax.sql包 * Driver接口(驱动):在加载某一Driver类时,它应该创建自己的...
mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上...