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 ...
随机推荐
- echarts 折线图配置
html内容: <div id="user_num_chart" style="width: 582px;height:250px;"></d ...
- settings.xml配置文件详解
简单值 一半顶层settings元素是简单值,它们表示的一系列值可以配置Maven的核心行为:settings.xml中的简单顶层元素 < settings xmlns="http:/ ...
- NPOI 生成 Excel
前言 在 c# 中可以使用对应的com组件生成或操作excel,但前提是必须安装了Office Excel , 但服务器端不一定会安装Excel,而且它操作起来并不简单.但是,使用NPOI这个第三 ...
- JTable的应用
最近项目中使用到一个table表格,表格的样子如下: 可以修改数量,以及折扣,对应的最终价会相应的变化. 随手写了份插件,命名为JTable,可以给热爱jquery 的友友们一个参考: 代码如下: / ...
- CMDB配置资源管理数据库(理解)
CMDB是运维自动化的基础,它为日志系统,发布系统,监控系统等运维系统(ELK,zabbix,open-falcon)提供接口函数, 第一种方式:Agent方法实现,agent不能直接访问数据库,因为 ...
- jquery中ajax跨域的写法
由于JS同源策略的影响,因此js只能访问同域名下的文档.因此要实现跨域,一般有以下几个方法: 一.处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2 ...
- C++面向对象高级编程(五)类与类之间的关系
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming OOP面向对象编 ...
- Ubuntu下sh *.sh使用==操作符执行报错
----<鸟哥的Linux私房菜--基础篇>学习笔记 ubuntu默认的sh是连接到dash,而我们写shell脚本时使用的时bash.bash和dash在一些方面是不兼容的.因此执行同一 ...
- 剑指offer--44.两个链表的第一个公共结点
@selfboot 牛逼的代码,长度相同,一遍出结果, 长度不同,短的点跑完,变成长的,当长的跑完变成短的链表的时候,较长的链表已经走过了多的结点. ------------------------- ...
- [转载]latex插入两栏的图形或表格
转载自:http://blog.csdn.net/huilingwu/article/details/51649250 latex进行两栏排版时,有时会遇到一些宽度较大的图形或表格,没办法挤在一栏中, ...