jdbc初步(转)
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程序
- 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();}
- }
- }
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)事务管理与图片的存储
- 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();
- }
- }
- }
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)结果集游标的上下游动
- 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));
- }
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初步(转)的更多相关文章
- JDBC初步 JDBC连接SQLServer 2008之心路历程
转自:http://www.cnblogs.com/weilengdeyu/archive/2013/01/17/2864321.html JDBC简介 今天,研究了下JDBC连接SQL Server ...
- JDBC初步(一)
import java.sql.*; public class TestJDBC { // orcl为oracle数据库中的数据库名,localhost表示连接本机的oracle数据库 // 1521 ...
- JDBC初步
public class TestMySqlConnection{ public static void main(String[] args){ Class.forNa ...
- 初步涉及JDBC
一.为什么要使用JDBC: 1.在之前的学习中,我们都是通过控制台来输入信息,创建对象,然后再输出信息,但是这样无法保存数据,每次程序运行都需要重新输入,很麻烦. 2. 在这样的情况下,我们就需要利用 ...
- JDBC 常用词汇以及初步思想
####JDBC程序访问数据库步骤
- JDBC 编程初步
JDBC 概述 什么是JDBC 是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成,JDBC提供了一种操作数据的标准,JDBC的目标是使Java程序员使用JDBC可以 ...
- JDBC的初步了解及使用
一.概念 1.什么是JDBC? JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由 ...
- Jdbc Template初步了解
JdbcTemplate简介 Java语言提供了jdbc来访问数据库,在jdbc api中需要手动的获取和释放连接等资源,使用起来需要做许多重复的工作.Spring在jdbc api的基础上做了抽象和 ...
- 浅谈JDBC编程
一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...
随机推荐
- Nginx 訪问日志增长暴增出现尖刀的具体分析
前言: Nginx日志里面Mobileweb_access.log增长特别大.一天上百兆.将近100W的訪问记录.依照我们眼下的规模,热点用户才500个左右.就算人人用手机app訪问 ...
- android图片压缩的3种方法实例
android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...
- android.graphics.Color
该类定义的都是些static常量和函数,这些函数都是为了创建和转化成int型的color.颜色是由int型的数表示,由4个字节组成,分别是A R G B,这个int型的值是确定的,透明度的值只能存 ...
- Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通
原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...
- Spring核心技术
这是第二次看关于Spring的资料,由于刚開始学习Spring的时候是边看视频边学习的,所以更注重的是实现代码,可是对宏观的掌握还是不够,这次主要从宏观的角度来分析一下Spring. 什么是Sprin ...
- A*寻路算法的实现
原理:http://www.cppblog.com/christanxw/archive/2006/04/07/5126.html 算法理论请到原理这个传送门,代码中的注释,已经比较详细,所以我不会讲 ...
- Photoshop图象切片保存为网页HTML(DIV+CSS布局)的方法
首先,制作图象切片(以一张图片为例子) 一.选择“切片”工具,在图像上拖动以分割图像(例如:一张图像切割2次就形成3个切片)切片后如下图 二.设置切片选项(如大小.目标链接.图片说明等等):选择“切片 ...
- Linux入门基础 #10:命令行文本处理工具
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- HDU 1535 Invitation Cards (POJ 1511)
两次SPFA. 求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换.可是这个有1000000个点.矩阵开不了. d1[]为 1~N 的最短路. 将全部边的 邻点 交换. d ...
- fck编辑器的使用
FCK编辑器的使用 注意:编辑器有浏览器缓存,所以修改配置后,一定要删一下缓存 这个编辑器是采用 html+javascript 开发出来的 通常作为插件来使用: 1,下载插件包 2,解压,加压之后看 ...