JDBC与Java数据库编程基础
一、JDBC 概述
1、什么是JDBC
称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用同一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。
2、JDBC优缺点
优点:
JDBC使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方。
JDBC支持不同的关系数据库,这使得程序的可移植性大大加强。
JDBC API是面向对象的,可以让用户把常用的方法封装为—个类,以备后用
缺点:
使用JDBC,访问数据记录的速度会受到一定程度的影响。
JDBC结构中包含不同厂家的产品,这就给更改数据源带来了很大的麻烦。
3、JDBC核心接口与类
JDBC核心类库包含在java.sql包中。
类
DriverManager:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并注册后才可以使用,同时提供方法来建立与数据库的连接。
SQLException-有关数据库操作的异常
接口:
Connection:特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果。
PreparedStatement:表示预编译的 SQL 语句的对象。
Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。
ResultSet :表示数据库结果集的数据表,通常通过执行查询数据库的语句生成 。
CallableStatement :用于执行 SQL 存储过程的接口。
二、创建 JDBC应用
1、创建JDBC应用程序的步骤
1.载入JDBC驱动程序
2.定义连接URL
3.建立连接
4.创建Statement对象
5.执行查询或更新
6.结果处理
7.关闭连接
2、JDBC连接Mysql
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class Test5 {
public static void main(String[] args) {
String url = "jdbc:mysql://127.0.0.1:3306/scott";
String username = "root";
String password = "root";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获得连接
conn = DriverManager.getConnection(url, username, password);
//3、创建sql语句
String sql = "select * from dept where loc = ?";
//4、创建PreparedStatement
pstmt = conn.prepareStatement(sql);
//第一个参数指索引,第二个参数要作为查询语句的一部分
pstmt.setString(1, "New YORK");
//5、执行查询
rs = pstmt.executeQuery();
//6、遍历结果集
while(rs.next()){
System.out.println(rs.getString("dname"));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//7、关闭流
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
3、JDBC连接Oracle
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.util.Date; public class JdbcTest{
publicstatic void main(String[] args) {
String driver = "oracle.jdbc.OracleDriver"; //驱动标识符
String url = "jdbc:oracle:thin:@localhost:1521:orcl"; //链接字符串
// url ="jdbc:oracle:thin:@10.0.30.64:1521:orcl"; // 连接远程的数据库可以这么写
String user = "scott"; //数据库的用户名
String password = "tiger"; //数据库的密码
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
boolean flag = false; try {
Class.forName(driver);
con = DriverManager.getConnection(url,user, password);
String sql = "select * from emp";
pstm =con.prepareStatement(sql);
rs = pstm.executeQuery();
while(rs.next()) {
int empno = rs.getInt("empno");
String ename =rs.getString("ename");
double sal = rs.getDouble("sal");
Date hiredate =rs.getDate("hiredate");
int deptno = rs.getInt(("deptno"));
System.out.println(empno +"\t"+ ename +"\t"+ sal +"\t"+ hiredate +"\t"+ deptno);
} flag = true;
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(SQLException e) {
e.printStackTrace();
}
finally {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
} // 关闭执行通道
if(pstm !=null) {
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
}
} // 关闭连接通道
try {
if(con != null &&(!con.isClosed())) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
} if(flag) {
System.out.println("执行成功!");
} else {
System.out.println("执行失败!");
}
}
}
4、ResultSet接口的getXxx 方法
5、JDBC日期时间处理
对于数据库种不同的时间类型,要分别采用与之相对应的Java
(1)包装类来存取:
日期类型用java.sql.Date
时间类型用java.sql.Time
日期/时间类型用java.sql.Timestamp;
getTimestamp()可以把年月日时分秒都取出来,getDate()只能取出年月日,getTime()只能取出时分秒。
(2)JDBC的日期/时间类型转换为字符串
Timestamp timeStamp = //通过数据库访问获取到该数据
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(timeStamp);
(3)java.sql.Timestamp如何转换为java.util.Date
java.sql.Timestamp是java.util.Date的子类,不需要做任何转换直接赋值即可:
java.sql.Timestamp ts;
java.util.Date utilDate;
utilDate = ts;
java.util.Date如何转换为java.sql.Timestamp
java.util.Date是java.sql.Timestamp的父类,要这样转换:
java.sql.Timestamp ts;
java.util.Date utilDate;
ts.setTime(utilDate.getTime());
6、JDBC API:
DriverManager
Connection
Statement
ResultSet
SQLException
JDBC与Java数据库编程基础的更多相关文章
- JDBC与JAVA数据库编程
一.JDBC的概念 1. JDBC (Java DataBase Connectivity) Java数据库连接 a) 主要提供java数据库应用程序的API支持 2. JDBC的主要功能 a) 创建 ...
- 菜鸡的Java笔记 java数据库编程(JDBC)
java数据库编程(JDBC) 介绍 JDBC 的基本功能 content (内容) 现在几乎所有的项目开发过程之中都不可能离开数据库,所以在java ...
- java面向对象下:Java数据库编程
19.Java数据库编程: JDBC概述: JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...
- java数据库编程——读写LOB、可滚动和可更新的结果集、元数据
java 数据库编程 1. 读写LOB 除了数字.字符串和日期之外,许多数据库还可以存储大对象,例如图片或其它数据.在SQL中,二进制大对象称为BLOB,字符型大对象称为CLOB. 要读取LOB,需要 ...
- 如何夯实(Java)编程基础,并深入学习和提高
如何夯实(Java)编程基础,并深入学习和提高? 240赞同反对,不会显示你的姓名 匿名用户 240 人赞同 多学习...网上自学的学习网站很多,见以下榜单~一.汇总榜单: 公开课_学习网站导航 收录 ...
- Java面向对象编程基础
一.Java面向对象编程基础 1.什么是对象?Object 什么都是对象! 只要是客观存在的具体事物,都是对象(汽车.小强.事件.任务.按钮.字体) 2.为什么需要面向对象? 面向对象能够像分析现实生 ...
- Java网络编程基础(Netty预备知识)
今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...
- Vc数据库编程基础MySql数据库的表查询功能
Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...
- Vc数据库编程基础MySql数据库的表增删改查数据
Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...
随机推荐
- mysql实现‘主从复制’
mysql主从复制(超简单) 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 首先准备多台服务器,其中一台作为主服务器,从服务器数量自定. 1.主从服务器分别作以下操作: 主服务器 ...
- selenium借助send_keys实现上传(以网易邮箱为例)
#code:utf-8from selenium import webdriverimport time#网易163邮箱dr = webdriver.Firefox()file_path = 'htt ...
- [零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置
转自:http://redking.blog.51cto.com/27212/114976 重点要会以下两个方面: 1. 抽象类与接口 2. API==>类集 这是两个最重要部分,这两个部分理解 ...
- nefu 628 Garden visiting
//yy:想到昨天一个神题整了几个小时,最后按题解把p拆了用孙子定理..今天这个简单,把C暴力拆了.. 题目链接:nefu 628 Garden visiting 1 <= n, m, p &l ...
- 打印出类所在的jar包
ackage time; /** * Created by sheting on 10/20/2017 */ public class Test { public static void main(S ...
- 请求是如何传递给StandardEngine的?
将请求的传递过程分解学习. CoyoteAdapter将中持有Connector的引用,所以在Coyote这个类中Connector查找它所属的StandardService,而StandardSer ...
- android之对于view的一点深入理解
最近在写程序中,遇到了之前自己没遇到过的代码,一番理解后才知道原来是在动态设定xml布局中的属性.即利用LayoutParams可以动态的设定布局或者控件的宽和高,以及的它的左间距,右间距,内间距,和 ...
- html style标签
<div id="d1">或者<div class="d1">在css下定义id的函数前缀是#,定义class前缀是.css代码就可以这 ...
- 为GRIDVIEW“删除”列添加确认对话框
如何为gridview控件里的“删除”列添加一个确认对话框?网上众说纷纭,大致见到了三种解决方案,现归纳如下:1.继承Web.IO里的button控件,为其实现一个IPostback的接口用于回调,具 ...
- 【题解】洛谷P1311 [NOIP2011TG] 选择客栈(递推)
题目来源:洛谷P1311 思路 纯暴力明显过不了这道题 所以我们要考虑如何优化到至多只能到nlogn 但是我们发现可以更优到O(n) 我们假设我们当前寻找的是第二个人住的客栈i 那么第一个人住的客栈肯 ...