Unit01: JDBC原理 、 JDBC基础编程
Unit01: JDBC原理 、 JDBC基础编程
这个文件里面有两块内容:
1.用比较麻烦的方式连接数据库,test1(),test4()
2.创建DBTool,测试DBTool连接数据库 ,test5(),test6(),
注意:这个案例中没有使用连接池。
package jdbc; import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; import org.junit.Test; import util.DBTool; /**
* Junit测试类,每个方法都能单独执行。
* 1.方法前加上@Test
* 2.方法是公有的,无返回值,无参
*/
public class TestDay01 { /**
* 1.创建连接
* 2.执行DML
*/
@Test
public void test1() {
System.out.println(1);
Connection conn = null;
try {
//1.加载驱动:告诉DriverManager
//我们想要使用哪个驱动类.
Class.forName(
"oracle.jdbc.driver.OracleDriver");
//2.调用DriverManager创建连接
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.201.227:1521:orcl",
"openlab", "open123");
System.out.println(conn);
//3.创建Statement
Statement smt = conn.createStatement();
//4.执行DML
//在JDBC中写SQL不能写结束符(;)
String sql =
"insert into emps_lhh values("
+ "emps_seq_lhh.nextval,"
+ "'悟空','职员',0,sysdate,"
+ "5000.0,1000.0,2)";
//返回增加(修改/删除)的行数
int rows = smt.executeUpdate(sql);
System.out.println(rows);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} /**
* 使用Properties读取db.peoperties
* 1.peoperties文件存储的是key-value
* 2.Properties类本质上就是Map,
* 专门用来读取properties文件.
*/
@Test
public void test4() {
Properties p = new Properties();
//1.获取任意类的类加载器
//2.类加载器从classes目录下读取文件
//3.db.properties刚好被编译到classes下
try {
p.load(TestDay01.class.getClassLoader()
.getResourceAsStream("db.properties"));
String driver = p.getProperty("driver");
System.out.println(driver);
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 1.测试DBTool
* 2.执行update语句
*/
@Test
public void test5() {
Connection conn = null;
try {
conn = DBTool.getConnection();
System.out.println(conn);
Statement smt = conn.createStatement();
String sql =
"update emps_lhh "
+ "set ename='刘备',"
+ "job='董事长',"
+ "sal=30000.0,"
+ "comm=90000.0 "
+ "where empno=1";
int rows = smt.executeUpdate(sql);
System.out.println(rows);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBTool.close(conn);
}
} /**
* 执行DQL语句
*/
@Test
public void test6() {
Connection conn = null;
try {
conn = DBTool.getConnection();
Statement smt = conn.createStatement();
String sql =
"select * from emps_lhh "
+ "where job='市场'";
//查询方法返回的是结果集对象,
//该对象中封装了数据库所返回的
//多行多列的数据.
ResultSet rs = smt.executeQuery(sql);
//结果集中有一个指针(变量),
//默认指向第一行之上(空值).
while(rs.next()) {
//每次next()会让指针向下移动一行,
//即变量+1.若该行有数据则返回true,
//否则返回false.
//从结果集某一行中取列的值:
//rs.get类型(字段名)
//rs.get类型(字段序号)
System.out.println(
rs.getInt("empno"));
System.out.println(
rs.getString("ename"));
System.out.println(
rs.getDouble("sal"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBTool.close(conn);
}
} }
DBTool.java文件,封装了连接数据库的功能
package util; import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties; public class DBTool { private static String driver;
private static String url;
private static String user;
private static String pwd; static {
//在类加载时只读取一次配置文件
Properties p = new Properties();
try {
p.load(DBTool.class.getClassLoader()
.getResourceAsStream("db.properties"));
driver = p.getProperty("driver");
url = p.getProperty("url");
user = p.getProperty("user");
pwd = p.getProperty("pwd");
//只需要加载一次驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(
"加载配置文件失败", e);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(
"加载驱动类失败", e);
}
} /**
* 此处直接抛出SQLException,是为了强制
* 调用者去处理异常,从而避免其忘记写finally,
* 以及在finally当中关闭连接.
*/
public static Connection getConnection()
throws SQLException {
return DriverManager
.getConnection(url, user, pwd);
} public static void close(Connection conn) {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(
"关闭连接失败", e);
}
}
} }
db.properties 文件,存放连接数据库的配置:
1.文件名必须以“properties”结尾;
2.文件里边不能有中文,注释也不能是中文;
# db connection parameters
# key=value
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@192.168.201.227:1521:orcl
user=openlab
pwd=open123
Unit01: JDBC原理 、 JDBC基础编程的更多相关文章
- JDBC原理
JDBC原理 JDBC是什么: Java Database Connectivity:Java访问数据库的解决方案 JDBC是Java应用程序访问数据库的里程碑式解决方案.Java研发者希望用相同 ...
- 一个基础又很重要的知识点:JDBC原理(基本案例和面试知识点)
JDBC全称又叫做Java DataBase Connectivity,就是Java数据库连接,说白了就是用Java语言来操作数据库.这篇文章主要是对JDBC的原理进行讲解.不会专注于其使用.主要是理 ...
- JDBC一(web基础学习笔记七)
一.JDBC Java数据库的连接技术(Java DataBase Connectivity),能实现Java程序以各种数据库的访问 由一组使用Java语言编写的类和接口(JDBC API)组成,它j ...
- 【JDBC】jdbc原理总结
1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库 ...
- JDBC三(web基础学习笔记九)
一.JDBC编程步骤 二.将数据库的信息放入资源文件 // (1)使用Class.forName来导入drive Class.forName("oracle.jdbc.driver.Orac ...
- jdbc原理与步骤
jdbc原理 1.加载JDBC驱动,并将其注册到DriverManager 2.建立数据库连接,获取connection对象 3.建立Statement对象或PreparedStatement对象 4 ...
- JDBC原理及常见错误分析
1.JDBC:Java DataBase Connectivity 可以为多种关系型数据库DBMS 提供统一的访问方式,用Java来操作数据库 2.JDBC API 主要功能: 三件事,具体是通过以下 ...
- Hadoop 综合揭秘——MapReduce 基础编程(介绍 Combine、Partitioner、WritableComparable、WritableComparator 使用方式)
前言 本文主要介绍 MapReduce 的原理及开发,讲解如何利用 Combine.Partitioner.WritableComparator等组件对数据进行排序筛选聚合分组的功能.由于文章是针对开 ...
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)
IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file ...
随机推荐
- ssh原理与应用
一.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会 ...
- leetcode 559. Maximum Depth of N-ary Tree
Given a n-ary tree, find its maximum depth. The maximum depth is the number of nodes along the longe ...
- js排序算法04——归并排序
归并排序是一种分治算法.思想是把原数组切分成较小的数组,直到每个小数组只有一个位置,再将小数组归并成较大的数组,直到最后有一个完整有序的大数组. js实现如下: function mergeSort( ...
- navicat for mysql 导入SQL Server显示中文乱码解决办法
解决方法是在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用mysql字符集”前的对勾,在编码里选择utf-8
- mysqldump 使用方法
1.仅导出数据: mysqldump -t -uroot -proot pgenius RES_COM_PFT_FCST>RES_COM_PFT_FCST.sql 2.有条的导出数据: mysq ...
- Nginx+keepalived 脚本安装主从双机热备自动切换解决方案
Nginx+keepalived 脚本安装主从双机热备自动切换解决方案 2013-07-02 19:24:13 标签:filesnginx keepalived 原创作品,允许转载,转载时请务必以超链 ...
- LeetCode OJ:Min Stack(最小栈问题)
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- Webstorm常用快捷键大全
webstorm应该是目前最强的js编辑器了,结合sublime text可以很效率的开发项目.今天整理了一些webstorm比较实用的快捷键: Ctrl+/ 或 Ctrl+Shift+/ 注释(// ...
- sed和awk简介
什么是sed和awk sed和awk是Linux环境下数据的处理工具,可以完成对数据的增删改查的功能. sed处理时是以行尾单位的,awk处理数据时以字段为单位. se ...
- 手机微信网站开发放弃windows phone的理由
1.手机操作系统市场份额: 全球(2.44% 下滑): http://news.mydrivers.com/1/449/449736.htm 中国(1% 下滑): http://app.techweb ...