JDBC学习(含转载)

首先连接数据库:

  Class.forName("com.mysql.jdbc.Driver");//加载jdbc驱动

  Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);//连接数据库

  

PreparedStatement 对象是一个很不起眼但是记为重要的接口对象,它继承 于Statement,并与之在两方面有所不同:

1)PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。

2)由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。

作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。同时,三种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。这些方法的 Statement 形式(接受 SQL 语句参数的形式)不应该用于 PreparedStatement 对象。

二.PreparedStatement在Java中常用数据库操作 
1 引用特定的包  
import java.sql.PreparedStatement; 
import java.sql.ResultSet;

2 一般实例化一个PreparedStatement和结果集 
PreparedStatement prepstmt = null; 
ResultSet rs = null;

3 得到SQL语句 
conn 为Connection类型 
prepstmt = conn.prepareStatement(String StrSQl);

4 执行SQL,得到结果集 
rs 为ResultSet类型。 
rs = prepstmt.executeQuery();

三.一些具体用法

1、创建 PreparedStatement 对象

以下的代码段(其中 con 是 Connection 对象)创建包含带两个 IN 参数占位符的 SQL 语句的 PreparedStatement 对象:

PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");  

PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");   

pstmt 对象包含语句 "UPDATE table4 SET m = ? WHERE x = ?",它已发送给DBMS,并为执行作好了准备。

2、传递 IN 参数

在执行 PreparedStatement 对象之前,必须设置每个 ? 参数的值。这可通过调用 setXXX 方法来完成,其中 XXX 是与该参数相应的类型。

例如,如果参数具有Java 类型 long,则使用的方法就是 setLong。setXXX 方法的第一个参数是要设置的参数的序数位置,第二个参数是设置给该参数的值。例如,以下代码将第一个参数设为 123456789,第二个参数设为 100000000:

  pstmt.setLong(1, 123456789);

  pstmt.setLong(2, 100000000);

一旦设置了给定语句的参数值,就可用它多次执行该语句,直到调用clearParameters 方法清除它为止。在连接的缺省模式下(启用自动提交),当语句完成时将自动提交或还原该语句。

如果基本数据库和驱动程序在语句提交之后仍保持这些语句的打开状态,则同一个 PreparedStatement 可执行多次。如果这一点不成立,那么试图通过使用PreparedStatement 对象代替 Statement 对象来提高性能是没有意义的。

利用 pstmt(前面创建的 PreparedStatement 对象),以下代码例示了如何设置两个参数占位符的值并执行 pstmt 10 次。如上所述,为做到这一点,数据库不能关闭 pstmt。在该示例中,第一个参数被设置为 "Hi"并保持为常数。在 for 循环中,每次都将第二个参数设置为不同的值:从 0 开始,到 9 结束。

  pstmt.setString(1, "Hi");

  for (int i = 0; i < 10; i++) {

  pstmt.setInt(2, i);

  int rowCount = pstmt.executeUpdate();

  }

3、IN 参数中数据类型的一致性

setXXX 方法中的 XXX 是 Java 类型。它是一种隐含的 JDBC 类型(一般 SQL 类型),因为驱动程序将把 Java 类型映射为相应的 JDBC 类型(遵循该 JDBCGuide中§8.6.2 “映射 Java 和 JDBC 类型”表中所指定的映射),并将该 JDBC 类型发送给数据库。例如,以下代码段将 PreparedStatement 对象 pstmt 的第二个参数设置为 44,Java 类型为 short:

  pstmt.setShort(2, 44);

  驱动程序将 44 作为 JDBC SMALLINT 发送给数据库,它是 Java short 类型的标准映射。

  程序员的责任是确保将每个 IN 参数的 Java 类型映射为与数据库所需的 JDBC 数据类型兼容的 JDBC 类型。不妨考虑数据库需要 JDBC SMALLINT 的情况。如果使用方法 setByte ,则驱动程序将 JDBC TINYINT 发送给数据库。这是可行的,因为许多数据库可从一种相关的类型转换为另一种类型,并且通常 TINYINT 可用于SMALLINT 适用的任何地方

 1 import java.sql.*;
 2 public class mypreparedstatement {
 3 private final string db_driver="com.microsoft.jdbc.sqlserver.sqlserverdriver";
 4 private final string url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=pubs";
 5 public mypreparedstatement()
 6 {
 7 }
 8 public void query() throws sqlexception{
 9 connection conn = this.getconnection();
10 string strsql = "select emp_id from employee where emp_id = ?";
11 preparedstatement pstmt = conn.preparestatement(strsql);
12 pstmt.setstring(1,"pma42628m");
13 resultset rs = pstmt.executequery();
14
15 while(rs.next()){
16 string fname = rs.getstring("emp_id");
17 system.out.println("the fname is " + fname);
18 }
19 rs.close();
20 pstmt.close();
21 conn.close();
22 }
23 private connection getconnection() throws sqlexception{
24 // class.
25 connection conn = null;
26 try {
27 class.forname(db_driver);
28 conn = drivermanager.getconnection(url,"sa","sa");
29 }
30 catch (classnotfoundexception ex) {}
31 return conn;
32 }
33 //main
34 public static void main(string[] args) throws sqlexception {
35 mypreparedstatement jdbctest1 = new mypreparedstatement();
36 jdbctest1.query();
37 }
38 }
时间: 2024-10-26 16:22:48

JDBC学习(含转载)的相关文章

JDBC学习笔记一

JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程序到JDBC管理器连接. JDBC Driver API: 这支持J

JDBC学习笔记二

Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方法来获取 * 2).通过excuteUpdate(sql)可以执行S

ARM指令集学习总结-转载

ARM指令集比较简单,本文介绍ARM指令集中需要注意和不易理解的地方. 一.ARM指令集是32位的,程序的启动都是从ARM指令集开始,包括所有异常中断都是自动转化为ARM状态,并且所有的指令都可以是有条件执行的.         二.ARM指令集是Load/Store型的,只能通过Load/Store指令实现对系统存储器的访问,而其他的指令都是基于处理器内部的寄存器操作完成的,这和INTEL汇编是不同的,初学者很不易理解.        三.指令的后缀:     "S"  可选后缀,若

【转】JDBC学习笔记(1)——JDBC概述

转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程

【转】JDBC学习笔记(2)——Statement和ResultSet

转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方

JDBC学习笔记(一)

public static void main(String[] args) { ResultSet rs = null; Statement stmt = null; Connection conn = null; try { /** * 1.加载JDBC驱动程序: * 加载目标数据库驱动到JVM * 成功加载后,会将Driver类的实例注册到DriverManager类 * oracle-Driver:oracle.jdbc.driver.OracleDriver * MySQL-Drive

gmock学习二 转载

Google Mock启蒙篇 [2] (Google C++ Mocking Framework for Dummies 翻译) 2011-11-22 22:34:58|  分类: C++ |  标签:google  mock  测试  |举报|字号 订阅 Setting Expectations 成功地使用Mock对象的关键是在它上面设置合适的期望.如果你设置的期望太过严格,你的测试可能会因为无关的改变而失败.如果你把期望设置的太过松驰,bugs可能会溜过去.而你需要的是你的测试可以刚好捕获你

javaweb学习总结(三十二)——JDBC学习入门【转】

原文地址:javaweb学习总结(三十二)——JDBC学习入门 一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后 才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数 据库打交道,如下所示: 1.2.JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作

gmock学习一 转载

Google Mock启蒙篇 [1] (Google C++ Mocking Framework for Dummies 翻译) Google C++ Mocking Framework for Dummies Google Mock启蒙篇 Version: 0.07< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 作者:adrian alexander

JDBC学习第一站之Statement与PreparedStatement

Statement: 通过类的名字,把类(元数据对象)加载到内存中,加载驱动,由于是对数据流做操作,一定要加异常处理,后面也是 <span style="white-space:pre"> </span>// 通过类的名字,把类(元数据对象)加载到内存中 <span style="white-space:pre"> </span>Class.forName("com.mysql.jdbc.Driver&quo