1. Jdbc的六个编程步骤

1. 注册一个驱动

注册驱动程序有三种方式:

方式一:Class.forName(“oracle.jdbc.driver.OracleDriver”);

JAVA 规范中明确规定:所有的驱动程序必须在静态初始化代码块中将驱动

注册到驱动程序管理器中。

方式二:Driver drv = new oracle.jdbc.driver.OracleDriver();

DriverManager.registerDriver(drv);

方式三:编译时在虚拟机中加载驱动

javac –Djdbc.drivers = oracle.jdbc.driver.OracleDriver xxx.java

java –D jdbc.drivers=驱动全名 类名

使用系统属性名,加载驱动 -D 表示为系统属性赋值

附 : mysql 的 Driver 的全名 com.mysql.jdbc.Driver

SQLServer 的 Driver 的全名 com.microsoft.jdbc.sqlserver.SQLServerDriver

2. 取得一个连接

Conn = DriverManager.getConnection(jdbcURL,userName,password);

3. 获得一个Statement声明对象

Statement st = conn.createStatement();

PreparedStatement ps = conn.prepareStatement(sql);

CallableStatemetn cs = conn.prepareCall(sql);

4. 通过Statement对象执行Sql语句

sta.execute(String sql); 如果返回一个结果集则返回true,否则返回false。

sta.executeQuery(String sql);返回一个查询结果集。

sta.executeUpdate(String sql);返回值为 int 型,表示影响记录的条数。

将 sql 语句通过连接发送到数据库中执行,以实现对数据库的操作。

5. 若有结果集ResultSet则处理结果集

ResultSetMetaDate rsmd = rs.getMetaData();

int columnCount = rsmd.getColumnCount();

While(rs.next()){

for(int i = 1; i <= columnCount; i++)

{

if(i != 1) System.out.print(",");

String name = rsmd.getColumnName(i); //取得第i列的列名称

String value = rs.getString(i); //取得第i列的值

System.out.print(name + "=" + value);

}

}

6. 关闭资源

2. 第一个Jdbc程序

  1. public class AccountDaoBad
  2. {
  3. public void select()
  4. {
  5. Connection con = null;
  6. Statement st = null;
  7. ResultSet rs = null;
  8. try
  9. {
  10. Class.forName("oracle.jdbc.driver.OracleDriver");
  11. /** static init block in OracleDriver*/
  12. String jdbcURL = “jdbc:oracle:thin:@192.168.0.5:1521:tarena”;
  13. con = DriverManager.getConnection(jdbcURL, "sd0703", "sd0703");
  14. st = con.createStatement();
  15. System.out.println(st.getFetchSize());
  16. String sql = "select id,no,owner,pwd,cdate,balance from sd0703_account";
  17. rs = st.executeQuery(sql);
  18. while(rs.next())
  19. {
  20. System.out.print("id=" + rs.getInt(1));
  21. System.out.print(",no=" + rs.getString(2));
  22. System.out.print(",owner=" + rs.getString(3));
  23. System.out.print(",pwd=" + rs.getString(4));
  24. System.out.print(",cdate=" + rs.getDate(5));
  25. System.out.println(",balance=" + rs.getDouble(6));
  26. }
  27. }catch(SQLException e)
  28. {
  29. e.printStackTrace();
  30. throw new RuntimeException(e.getMessage());
  31. }catch(ClassNotFoundException e)
  32. {
  33. e.printStackTrace();
  34. throw new RuntimeException(e.getMessege());
  35. }finally
  36. {
  37. try{ con.close();}catch(Exception e) {e.printStatckTrace();}
  38. }
  39. }
public class AccountDaoBad
{
public void select()
{
Connection con = null;
Statement st = null;
ResultSet rs = null; try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
/** static init block in OracleDriver*/
String jdbcURL = “jdbc:oracle:thin:@192.168.0.5:1521:tarena”;
con = DriverManager.getConnection(jdbcURL, "sd0703", "sd0703");
st = con.createStatement();
System.out.println(st.getFetchSize());
String sql = "select id,no,owner,pwd,cdate,balance from sd0703_account";
rs = st.executeQuery(sql);
while(rs.next())
{
System.out.print("id=" + rs.getInt(1));
System.out.print(",no=" + rs.getString(2));
System.out.print(",owner=" + rs.getString(3));
System.out.print(",pwd=" + rs.getString(4));
System.out.print(",cdate=" + rs.getDate(5));
System.out.println(",balance=" + rs.getDouble(6));
}
}catch(SQLException e)
{
e.printStackTrace();
throw new RuntimeException(e.getMessage()); }catch(ClassNotFoundException e)
{
e.printStackTrace();
throw new RuntimeException(e.getMessege()); }finally
{
try{ con.close();}catch(Exception e) {e.printStatckTrace();}
}
}

3. 常用类

1. Connection, Statement, ResultSet,

4. 2.0新特性

(1)事务管理与图片的存储

  1. public class ImageLibraryService
  2. {
  3. public void addImage(long id, String imageName, String path) throws SQLException
  4. {
  5. Connection con = null;
  6. PreparedStatement ps = null;
  7. ResultSet rs = null;
  8. try
  9. {
  10. con = ConnectionFactory.getConnection();
  11. con.setAutoCommit(false);
  12. String sql = "insert into ImageLibrary(id, name, image)";
  13. sql += " VALUES(?, ?, empty_blob())";
  14. ps = con.prepareStatement(sql);
  15. ps.setLong(1, id);
  16. ps.setString(2, imageName);
  17. ps.executeUpdate();
  18. ps.close();
  19. ps = con.prepareStatement("select image from ImageLibrary WHERE id = ? for update ");
  20. ps.setLong(1, id);
  21. rs = ps.executeQuery();
  22. if (rs.next())
  23. {
  24. Blob image = rs.getBlob(1);
  25. OutputStream out = image.setBinaryStream(0);
  26. BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
  27. BufferedInputStream bufferedIn = new BufferedInputStream(new FileInputStream(path));
  28. int c;
  29. while ((c = bufferedIn.read()) != -1)
  30. {
  31. bufferedOut.write(c);
  32. }
  33. bufferedIn.close();
  34. bufferedOut.close();
  35. }
  36. con.commit();
  37. } catch (Exception e)
  38. {
  39. e.printStackTrace();
  40. try
  41. {
  42. con.rollback();
  43. } catch (SQLException se) { }
  44. throw new SQLException(e.getMessage());
  45. } finally
  46. {
  47. JdbcUtil.close(rs, ps, con);
  48. }
  49. }
  50. //以下代码没有进行细致的异常捕获
  51. public void restoreImage(long id, String filename) throws Exception
  52. {
  53. Connection con = ConnectionFactory.getConnection();
  54. Statement st = con.createStatement();
  55. String sql = "SELECT image From ImageLibrary Where id = " + id;
  56. ResultSet rs = st.executeQuery(sql);
  57. while (rs.next())
  58. {
  59. Blob image = rs.getBlob("image");
  60. BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(filename));
  61. BufferedInputStream in = new BufferedInputStream(image.getBinaryStream());
  62. int c;
  63. while ((c = in.read()) != -1) out.write(c);
  64. in.close();
  65. out.close();
  66. }
  67. }
  68. }
public class ImageLibraryService
{
public void addImage(long id, String imageName, String path) throws SQLException
{
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try
{
con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
String sql = "insert into ImageLibrary(id, name, image)";
sql += " VALUES(?, ?, empty_blob())";
ps = con.prepareStatement(sql);
ps.setLong(1, id);
ps.setString(2, imageName);
ps.executeUpdate();
ps.close();
ps = con.prepareStatement("select image from ImageLibrary WHERE id = ? for update ");
ps.setLong(1, id);
rs = ps.executeQuery();
if (rs.next())
{
Blob image = rs.getBlob(1);
OutputStream out = image.setBinaryStream(0);
BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
BufferedInputStream bufferedIn = new BufferedInputStream(new FileInputStream(path));
int c;
while ((c = bufferedIn.read()) != -1)
{
bufferedOut.write(c);
}
bufferedIn.close();
bufferedOut.close();
}
con.commit();
} catch (Exception e)
{
e.printStackTrace();
try
{
con.rollback();
} catch (SQLException se) { }
throw new SQLException(e.getMessage());
} finally
{
JdbcUtil.close(rs, ps, con);
}
}
//以下代码没有进行细致的异常捕获
public void restoreImage(long id, String filename) throws Exception
{
Connection con = ConnectionFactory.getConnection();
Statement st = con.createStatement();
String sql = "SELECT image From ImageLibrary Where id = " + id;
ResultSet rs = st.executeQuery(sql);
while (rs.next())
{
Blob image = rs.getBlob("image");
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(filename));
BufferedInputStream in = new BufferedInputStream(image.getBinaryStream());
int c;
while ((c = in.read()) != -1) out.write(c);
in.close();
out.close();
}
}
}

(2)结果集游标的上下游动

  1. con = ConnectionFactory.getConnection();
  2. st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  3. String sql = "select id,no,owner,pwd,cdate,balance from sd0703_account";
  4. rs = st.executeQuery(sql);
  5. rs.afterLast(); //将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后。
  6. while(rs.previous())
  7. {
  8. System.out.print("id=" + rs.getInt(1));
  9. System.out.print(",no=" + rs.getString(2));
  10. System.out.print(",owner=" + rs.getString(3));
  11. System.out.print(",pwd=" + rs.getString(4));
  12. System.out.print(",cdate=" + rs.getDate(5));
  13. System.out.println(",balance=" + rs.getDouble(6));
  14. }
con = ConnectionFactory.getConnection();
st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
String sql = "select id,no,owner,pwd,cdate,balance from sd0703_account";
rs = st.executeQuery(sql);
rs.afterLast(); //将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后。
while(rs.previous())
{
System.out.print("id=" + rs.getInt(1));
System.out.print(",no=" + rs.getString(2));
System.out.print(",owner=" + rs.getString(3));
System.out.print(",pwd=" + rs.getString(4));
System.out.print(",cdate=" + rs.getDate(5));
System.out.println(",balance=" + rs.getDouble(6));
}

注:ResultSet静态常量字段(参见javax.sql.ResultSet)

ResultSet.TYPE_SCROLL_INSENSITIVE

该常量指示可滚动但通常不受 ResultSet 底层数据更改影响的 ResultSet 对象的类型。

ResultSet.CONCUR_READ_ONLY

该常量指示不可以更新的 ResultSet 对象的并发模式。

http://www.cnblogs.com/smileallen/archive/2013/02/16/3391573.html

jdbc初步(转)的更多相关文章

  1. JDBC初步 JDBC连接SQLServer 2008之心路历程

    转自:http://www.cnblogs.com/weilengdeyu/archive/2013/01/17/2864321.html JDBC简介 今天,研究了下JDBC连接SQL Server ...

  2. JDBC初步(一)

    import java.sql.*; public class TestJDBC { // orcl为oracle数据库中的数据库名,localhost表示连接本机的oracle数据库 // 1521 ...

  3. JDBC初步

     public class TestMySqlConnection{  public static void main(String[] args){              Class.forNa ...

  4. 初步涉及JDBC

    一.为什么要使用JDBC: 1.在之前的学习中,我们都是通过控制台来输入信息,创建对象,然后再输出信息,但是这样无法保存数据,每次程序运行都需要重新输入,很麻烦. 2. 在这样的情况下,我们就需要利用 ...

  5. JDBC 常用词汇以及初步思想

    ####JDBC程序访问数据库步骤

  6. JDBC 编程初步

    JDBC 概述 什么是JDBC 是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成,JDBC提供了一种操作数据的标准,JDBC的目标是使Java程序员使用JDBC可以 ...

  7. JDBC的初步了解及使用

    一.概念 1.什么是JDBC? JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由 ...

  8. Jdbc Template初步了解

    JdbcTemplate简介 Java语言提供了jdbc来访问数据库,在jdbc api中需要手动的获取和释放连接等资源,使用起来需要做许多重复的工作.Spring在jdbc api的基础上做了抽象和 ...

  9. 浅谈JDBC编程

    一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...

随机推荐

  1. 初识JAVA,对servlet的理解

    一.WEB开发的简单理解 Web开发是一个指代网页或站点编写过程的广义术语.网页使用 HTML.CSS 和 JavaScript编写.这些页面可能是类似于文档的简单文本和图形.页面也能够是交互式的,或 ...

  2. HTML5在input背景提示文本(placeholder)的CSS美化

    本文转自http://www.webhek.com/html5-placeholder-css/ 在火狐浏览器中的写法和在谷歌浏览器和Safari里的写法有些不同.但相信以后会统一. /* 通用 */ ...

  3. linux shell编程指南第十八章------控制流结构

    在书写正确脚本前,大概讲一下退出状态.任何命令进行时都将返回一个退出状态.如 果要观察其退出状态,使用最后状态命令: $ echo $? 主要有4种退出状态.前面已经讲到了两种,即最后命令退出状态$ ...

  4. MFC的消息反射机制

    1.消息反射解释: 父窗口将子窗口发给它的通知消息,首先反射回子窗口进行处理(即给子窗口一个机会,让子窗口处理此消息),这样通知消息就有机会能被子窗口自身进行处理. 2.MFC中引入消息反射的原因: ...

  5. String[255]在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串(内含许多实验测试)

    学了好多不了解的知识: procedure TForm1.Button1Click(Sender: TObject); var s1 : String; s2 : String[]; begin s1 ...

  6. Hongwei Xi

    Hongwei Xi Hongwei Xi Hongwei Xi's Curriculum Vita Hongwei Xi

  7. django url调度

    Django的url配置相同遵循着DRY(dont repeat yourself)的规则.下面都是官方文档的样例: 首先介绍的是Django怎样处理http的请求: 1.在setting里定义ROO ...

  8. 使用简单的 5 个步骤设置 Web 服务器集群

    通过在多个处理器之间分担工作负载并采用多种软件恢复技术,能够提供高度可用的环境并提高环境的总体 RAS(可靠性.可用性和可服务性).可以得到的好处包括:更快地从意外中断中恢复运行,以及将意外中断对终端 ...

  9. win7+vs2008+opencv

    1.下载安装VS2008,然后直接下载opencv的windows的安装版, 2.把opencv解压出来,我的路径为:D:\Program\opencv 3.配置PATH:电脑--属性--高级系统设置 ...

  10. python语言学习5——输入和输出

    输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字. 注意点: 字符串用的是单引号 碰到逗号输出时就会输出一个空格 输入 python提供了一个input(),可以让用户输入一个字 ...