/**

* DBUtil封装了加载驱动的静态块,与数据库建立连接和关闭连接的静态方法

* 用来管理数据库的连接数据库的链接信息保存在属性文件中

* @author Administrator

*

*/

---------------------------------------------------------------------------------

package util;

import java.io.IOException;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

/**

* 封装了加载驱动的静态块,与数据库建立连接和关闭连接的静态方法

* 用来管理数据库的连接数据库的链接信息保存在属性文件中

* @author Administrator

*

*/

public class DBUtil {

public static void main(String[] args) throws Exception {

Connection conn = getConnection();

System.out.println(conn.getClass().getName());

close(conn);

}

private static BasicDataSource ds;

static {

try {

//加载属性文件数据

Properties prop = new Properties();

prop.load(DBUtil.class.getClassLoader().getResourceAsStream

("db.properties"));

String driverclass = prop.getProperty("jdbc.driverclass");

String url = prop.getProperty("jdbc.url");

String user = prop.getProperty("jdbc.user");

String password = prop.getProperty("jdbc.password");

String strMaxActive = prop.getProperty("dbcp.MaxActive");

String strInitialSize = prop.getProperty("dbcp.InitialSize");

//1、加载驱动

//实例化并初始化连接池。

ds = new BasicDataSource();

ds.setDriverClassName(driverclass);

ds.setUrl(url);

ds.setUsername(user);

ds.setPassword(password);

ds.setMaxActive(Integer.parseInt(strMaxActive));

ds.setInitialSize(Integer.parseInt(strInitialSize));

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException("读取属性文件异常!",e);

}

}

//2、创建连接

/*

* 定义一个方法需要什么?

* 1、返回值类型:

* 是否有运算结果?如果有,结果的类型就是返回值类型。

* 2、参数列表:

* 方法中是否有不确定的参数参与运算?如果有,即为参数。

*/

public static Connection getConnection() throws SQLException{

return ds.getConnection();

}

//3、归还连接

public static void close(Connection conn){

if(conn!=null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException("归还连接异常!",e);

}

}

}

}

属性文件:db.properties

jdbc.driverclass=oracle.jdbc.driver.OracleDriver

jdbc.url=jdbc:oracle:thin:@localhost :1521:xe

jdbc.user=system

jdbc.password=zjz1992

#dbcp param

dbcp.MaxActive=1

dbcp.InitialSize=1

----------------------------------------------------------------------------------------

package test;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import org.junit.Test;

import util.DBUtil;

/**

* junit测试类:可以让满足条件的任意方法单独直接执行。

* 条件:

*  1.public

*  2.void

*  3.无参数

*  4.方法前必须加@Test

* @author Administrator

*

*/

public class Test {

/**

* 根据ID查询员工

*/

@Test

public void test1(){

//假设传入的员工ID是1:

int id = 1;

//创建连接

Connection con = null;

try {

con = DBUtil.getConnection();

String sql =

"SELECT  * FROM emp "

+ "WHERE empno=" + id;

Statement smt = con.createStatement();

//执行查询

ResultSet rs = smt.executeQuery(sql);

//结果集中封装了多行数据,需要遍历

while(rs.next()){

/* 查询列的两个方法

* rs.get类型(字段名)

* rs.get类型(字段索引)

*/

System.out.println(rs.getString("empno"));

System.out.println(rs.getInt("empno"));

}

} catch (SQLException e) {

//1.记录日志

e.printStackTrace();

//2.能处理则自己处理(入返回默认值)

//3.处理不了则上报(向上抛)

throw new RuntimeException("查询员工失败!",e);

}finally{

//归还连接

DBUtil.close(con);

}

}

----------------------------------------------------------------------------------------

public class Test {

/*

* PreparedStatement查询

* 查询工资高于某值的所有员工。

*/

@Test

public void test1(){

//假设传入的工资

double salary = 4500.00;

Connection con = null;

try {

//1.创建连接

con = DBUtil.getConnection();

String sql =

"SELECT ename FROM emp "

+ "WHERE sal>?";

/*

* 创建PreparedStatement对象

* 发送SQL并建立执行计划

*/

PreparedStatement ps = con.prepareStatement(sql);

/*

* 设置参数

* ps.set类型(?的索引,?的值)

*/

ps.setDouble(1, salary);

//执行SQL

ResultSet rs = ps.executeQuery();

while(rs.next()){

System.out.println(rs.getString("ename"));

//System.out.println(rs.getInt("ename"));

}

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException("查询员工失败!",e);

} finally {

DBUtil.close(con);

}

}

/**

* 演示PreparedStatemende增加

*/

@Test

public void test2(){

//假设用户传入了如下要添加的数据

String ename = "唐僧";

String job = "领导";

int mgr = 0;

Date date = new Date(System.currentTimeMillis());

double sal = 9000.00;

double comm = 3000.0;

int depton = 2;

Connection con = null;

try {

con = DBUtil.getConnection();

String sql =

"INSERT INTO emp "

+ "VALUES(seq_emp.nextval,?,?,?,?,?,?,?) ";

PreparedStatement ps = con.prepareStatement(sql);

ps.setString(1, ename);

ps.setString(2, job);

ps.setInt(3, mgr);

ps.setDate(4, date);

ps.setDouble(5, sal);

ps.setDouble(6, comm);

ps.setInt(7, depton);

ps.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException("查询员工失败!",e);

} finally {

DBUtil.close(con);

}

}

/**

* 演示PreparedStatemende修改

*/

@Test

public void test3(){

//假设用户传入了如下要修改的数据

int empno = 101;

String ename = "悟空";

String job = "保镖";

int mgr = 101;

Date date = new Date(System.currentTimeMillis());

double sal = 5000.00;

double comm = 0;

int depton = 2;

Connection con = null;

try {

con = DBUtil.getConnection();

String sql =

"UPDATE emp "

+ "SET ename=?, "

+ "job=?, "

+ "mgr=?, "

+ "hirdate=?, "

+ "sal=?, "

+ "comm=?, "

+ "depton=? "

+ "WHERE empno=? ";

PreparedStatement ps = con.prepareStatement(sql);

ps.setString(1, ename);

ps.setString(2, job);

ps.setInt(3, mgr);

ps.setDate(4, date);

ps.setDouble(5, sal);

ps.setDouble(6, comm);

ps.setInt(7, depton);

ps.setInt(8, empno);

ps.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException("修改员工失败!",e);

} finally {

DBUtil.close(con);

}

}

/**

* 演示PreparedStatemende删除

*/

@Test

public void test4(){

//假设要删除的员工的id为

int empno = 102;

Connection con= null;

try {

con = DBUtil.getConnection();

String sql = "DELETE FROM emp "

+ "WHERE empno=?";

PreparedStatement ps = con.prepareStatement(sql);

ps.setInt(1, empno);

ps.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException("删除员工失败!",e);

}finally{

DBUtil.close(con);

}

}

Java中hir_Java中数据库的使用基础相关推荐

  1. java中选择性插入数据库,选中java数据

    Openfire开发配置,Openfire源代码配置,OpenFire二次开发配置 1.下载源代码:http://www.igniterealtime.org/downloads/source.jsp ...

  2. idea中链接mysql查询_在Idea中编写Java程序连接查询Sqlite数据库

    1.使用SqliteSpy建立好数据库文件SqliteSpy运行界面 2.准备好一个空文件夹存放java工程和数据库文件,准备好数据库驱动jar包拷贝到文件夹中sqlite数据库文件和驱动 3.在Id ...

  3. Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net...

    Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net 1. -catalog与schema的设计区别1 ...

  4. Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库

    H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分.下面来演示一下如何将H2数据库嵌入到我们的Web应用中. 一.搭建测 ...

  5. java代码连接oracle数据库连接_在JAVA中连接Oracle数据库(例子)

    * TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - java - 代码样式 - 代码模板 */ package person.fane.test; import java.sql ...

  6. Java web程序中备份oracle数据库

    Java web程序中备份oracle数据库 1.生成备份文件: public ActionForward createDmp(ActionMapping mapping, ActionForm fo ...

  7. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

  8. 基于Java线程池读取数据库中数据(学习+运用)

    基于Java线程池读取数据库中数据(学习+运用) 以下是学习内容 Main.java import java.util.concurrent.ArrayBlockingQueue; import ja ...

  9. Java 8流中的数据库CRUD操作

    在开始使用新工具时要克服的最大障碍是让您着手处理小事情. 到目前为止,您可能对新的Java 8 Stream API的工作方式充满信心,但是您可能尚未将其用于数据库查询. 为了帮助您开始使用Strea ...

最新文章

  1. Matlab字符串的基本操作
  2. SpringBoot Bean配置
  3. 查看Linux命令_搜索Linux命令_查找Linux命令
  4. win8 必须重新启动计算机才能关闭用户账户控制,windows8中怎么关闭用户账户控制(UAC)仅针对单个用户...
  5. service nginx start启动nginx出现Failed to start nginx.service:unit not found
  6. lm_license_file 冲突怎么办_【微课+语音】孩子一个多月没有上学了怎么办?
  7. 如何有效创建工作分解结构?
  8. Sublime Text下载使用
  9. 安装keil5时,注册机在解压后消失的解决以及使用注册机破解keil5时,无法破解
  10. 解决mysql插入中文出现错误ERROR 1366 (HY000): Incorrect string value: ‘\x80\x85\xEF\xBC\x8C\xE6...‘ for column
  11. python sep参数_Python sep参数使用方法详解
  12. 【EC200U】 基站定位
  13. android hierarchyViewer 的UI工具的使用
  14. hihoCoder1290. Demo Day
  15. 实现火车站售票的例子
  16. 江哥带你玩转C语言| 12 -二维数组和字符串
  17. 单商户商城和多商户商城系统的区别
  18. 信号处理中简单实用的方法——提取信号中的包络
  19. 深度学习2---任意结点数的三层全连接神经网络
  20. 来这里,实现高薪就业梦想。

热门文章

  1. labelme 批量转换json文件 详细步骤
  2. 利用axis调用webservice接口
  3. Python PAT乙级 1068 万绿丛中一点红 (20分) 成功
  4. LeetCode(力扣) 刷题注意事项 持续更新 ~ ~
  5. 基于矢量的水下路由协议
  6. 安卓期末大作业——Android水果连连看
  7. uni保存canvas图片_UniApp 用canvas生成图片保存本地
  8. 让计算机猜测你心中想的0-100之间的一个整数
  9. 忍者必须死3系统拆解+测评
  10. VScode设置语言为中文成功,菜单栏仍然显示成英文状态