java连接数据库——JDBC连接数据库
DBUtil.java // 数据库操作文件
package com.bjpowernode.jdbc.util; import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class DBUtil { private static String driver ;
private static String url ;
private static String uname ;
private static String pwd ; static{ try {
//创建集合类对象
Properties properties = new Properties();
//把文件封装成字节输入流
InputStream inStream = new FileInputStream(new File("./src/DBConfig.properties")); /*
等同于 ResourceBundle isStream = ResourceBundle.getBundle("com.bjpowernode.jdbc.util.DBConfig"); //注意:DBConfig 不要添加后缀 */
//把字节流加载到集合类中,在内存中以key和value的格式形成
properties.load(inStream);
//通过key获得value
driver = properties.getProperty("driver");
url = properties.getProperty("url");
uname = properties.getProperty("uname");
pwd = properties.getProperty("pwd");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("读取配置文件失败!",e);
} } //获得连接
public static Connection getConnection (){
Connection conn = null;
try {
//1:注册驱动
Class.forName(driver); conn = DriverManager.getConnection(url,uname,pwd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("连接数据库失败!",e);
}
return conn;
} //释放资源
public static void close(ResultSet rs ,Statement pstm ,Connection conn){
try{
if (rs != null){
rs.close();
} }catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("rs关闭失败!",e);
}
try{
if (pstm != null){
pstm.close();
} }catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("pstm关闭失败!",e);
}
try{
if (conn != null){
conn.close();
} }catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("conn关闭失败!",e);
} }
//开启事务
public static void beginTransaction(Connection conn){
try {
if(conn != null){
conn.setAutoCommit(false);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("开启事务失败!",e);
}
}
//提交事务
public static void commit(Connection conn){
try {
if(conn != null){
conn.commit();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("提交事务失败!",e);
}
} //回滚事务
public static void rollback(Connection conn){
try {
if(conn != null){
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("回滚事务失败!",e);
}
}
}
Transfer_transaction.java // 调用数据库文件
package com.bjpowernode.jdbc.transfer; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import com.bjpowernode.jdbc.util.DBUtil; public class Transfer_transaction {
public static void main(String[] args) {
transfer("zs","ls",100);
}
/**
*
* @param from_act : 转出账户
* @param to_act :转入账户
* @param money : 转账金额
*/
private static void transfer(String from_act, String to_act, double money) { /*if(转出账户的金额 >= 转账金额){
转出账户 - 转账金额
转入账户 + 转账金额
}else{
提示余额不足
}*/
Connection conn = null;
//转出账户的金额
try {
//事务是针对连接开启的
conn = DBUtil.getConnection();
//开启事务
DBUtil.beginTransaction(conn); double from_money = getMoneyByAct(conn,from_act); if(from_money >= money){//转出账户的金额 >= 转账金额
//转账
//转出账户 - 转账金额
updateMoneyByAct(conn,from_money-money,from_act);
//转入账户的金额
double to_money = getMoneyByAct(conn,to_act);
//模拟异常
// Integer.parseInt("abc");
//转入账户+ 转账金额
updateMoneyByAct(conn,to_money+money,to_act);
//提交事务
DBUtil.commit(conn);
System.out.println("转账成功!");
}else{//提示余额不足
System.out.println("余额不足!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("转账失败!");
//回滚事务
DBUtil.rollback(conn);
}finally{
DBUtil.close(null, null, conn);
} }
/**
* 通过账户修改账户金额
*
* @param money : 需要修改的金额
* @param act : 账户名称
*/
private static void updateMoneyByAct(Connection conn ,double money, String act) {
// TODO Auto-generated method stub
// Connection conn = null;
PreparedStatement pstm = null; try {
// conn = DBUtil.getConnection(); String sql = "update t_account set money = ? where act_no = ?";
pstm = conn.prepareStatement(sql); pstm.setDouble(1, money);
pstm.setString(2, act); pstm.executeUpdate(); } catch (Exception e) {
// TODO: handle exception throw new RuntimeException("修改金额失败",e);
}finally{
DBUtil.close(null, pstm, null);
}
}
/**
* 通过账户查询账户金额
* @param act
* @return
*/
private static double getMoneyByAct(Connection conn ,String act) {
// Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
double from_money = 0;
try {
//获得连接
// conn = DBUtil.getConnection();
String sql = "select money from t_account where act_no = ?";
//创建数据库操作对象
pstm = conn.prepareStatement(sql);
//为占位符号赋值
pstm.setString(1, act);
//执行sql
rs = pstm.executeQuery();
/*while(rs.next()){
from_money = rs.getDouble("money");
}
if(rs.next()){
from_money = rs.getDouble("money");
}
*/
from_money = rs.next()?rs.getDouble("money"):0; } catch (Exception e) {
throw new RuntimeException("查询账户余额失败!",e);
}finally{
DBUtil.close(rs, pstm, null);
}
return from_money;
}
}
DBConfig.properties //数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://127.0.0.1\:3366/bjpowernode
uname=root
pwd=root
java连接数据库——JDBC连接数据库的更多相关文章
- Java开发JDBC连接数据库
Java开发JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含6个步骤: JDBC五部曲1.加载驱动2.获得链接3.获取statement对象 4.执行SQL语句5.产生resultset对 ...
- java开发JDBC连接数据库详解
JDBC连接数据库 好文一定要让大家看见 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机) ...
- Java中JDBC连接数据库代码和步骤详解总结
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Jav ...
- java开发JDBC连接数据库代码
JDBC连接数据库,创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 这通过java.lang.Class类的静态方法forName(String className)实 ...
- java中JDBC连接数据库操作的基本步骤
JDBC基本步骤 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lan ...
- 【Java】JDBC连接数据库
JDBC介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...
- Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查
前言 java连接数据库完整流程为: 1,获得驱动(driver),数据库连接(url),用户名(username),密码(password)基本信息的三种方式. 2,通过获得的信息完成JDBC实现连 ...
- java的jdbc连接数据库,读取表中数据
连接数据库操作步骤如下 架包 jar 建表 源码解析 1:架包 jar根据自己本版本选择正确jar包,本例采用maven 管理局,在pom.xml 中添加如下代码,自动下载架包 <depende ...
- JAVA中JDBC连接数据库
这里列举了JDBC连接Oracle . SQLServer .MySQL 三种 数据库 1.Oracle连接(导入classes12.jar 包) public static Connection g ...
随机推荐
- 如何设置Java虚拟机内存以适应大程序的装载
Java虚拟机对于运行时的程序所占内存是有限制的,当我们的项目或者程序很大时,往往会照成内存溢出. 举个例子: public class SmallTest1 { public static void ...
- QNX 多线程 (线程1每隔20ms读取 number;线程2每隔10ms计算一次)
#include <pthread.h>#include <stdio.h>#include <sys/time.h>#include <string.h&g ...
- CRectTracker类的使用--橡皮筋窗口
CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类.你在Windows中经常看到这样的情况:它可以用做显示边界,你也可以扽它的八个角用来放大缩小,或做框选使用.如何通过编程来实现这种功能 ...
- Swift - 各种手势检测大全(UIGestureRecognizer及其子类)
UIGestureRecognizer有许多子类,用于监听一些常见的手势事件,这些子类主要有: 1,UISwipeGestureRecognizer:滑动(快速移动) 1 2 3 4 5 6 7 8 ...
- JSP/Servlet-----charset 、pageEncoding差别
一.JSP/Servlet中的几个编码的作用 在JSP/Servlet中有4个地方可设置编码(例如以下).当中前两个仅仅能用于JSP中,后两个可用于JSP和Servlet 中. ...
- [C#基础] 数据类型
预定义类型 C#提供了16种预定义类型,其中包括13种简单类型和3种非简单类型. 预定义的简单类型包括以下3种: 11种数值类型 不同长度有符号和无符号的整数类型(8种) 浮点数类型float和dou ...
- Mojo 分析日志接口
#!/usr/bin/perl #取文件行数 ##循环开始清空文件 use POSIX; use DBI; my $dir = '/data01/applog_backup'; my $file = ...
- iOS8指纹识别TouchID
苹果在2014年6月3日的WWDC2014开幕式上推出了新版iOS8系统,界面上iOS8与iOS7相比变化不大,只是在功能方面进行了完好.iOS8通知中心更加强大,支持消息直接回复操作,并支持Quic ...
- qt qml中PropertyAnimation的几种使用方法
qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...
- 18.如何自我Struts2它Struts2标签和综合汇总文章有点早
18.如何自我Struts2它Struts2标签和综合汇总文章有点早[视频] 之前写了一篇"打算做一个视频教程探讨怎样自学计算机相关的技术",优酷上传不了.仅仅好传到百度云上: h ...