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"));

            //把字节流加载到集合类中,在内存中以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
时间: 2024-12-07 11:37:40

java连接数据库——JDBC连接数据库的相关文章

Java 用jdbc连接数据库

Java 用jdbc连接数据库 准备 安装mysql 下载 mysql-connector-java-5.1.40-bin.jar驱动包 步骤 创建jdbc项目 导入mysql-connector-java-5.1.40-bin.ja包 创建配置文件 jdbc.properties user=root password=1230 driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql:///atguigu 代码 import java.io.IO

Java中JDBC连接数据库(MySQL)

 JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十一个功能都放在一起. 安装下载的数据库驱动程序jar包,不同的数据库需要不同的驱动程序(这本该是第一步,但是由于属于安装类,所以我们放在最后) 一.JDBC连接数据库(编辑)步骤(主要有六个步骤).  1.注册驱动: Class.forName("com.mysql.jdbc.Driver");显示的

java开发JDBC连接数据库

JDBC连接数据库 ?创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ Sy

Java中JDBC连接数据库代码和步骤详解总结

JDBC连接数据库 ?创建一个以JDBC连接数据库的程序,包含7个步骤:         1.加载JDBC驱动程序:         在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现.    例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoun

java使用JDBC连接数据库

1.下载connectors/j: 地址:http://www.mysql.com/downloads/connector/j/ 选择 到此页面点击“No,thanks……" 若使用Java程序访问并操作数据库,就必须先要同所要访问的数据库建立连接.通过连接,才能执行SQL语句,并返回数据库操作的结果.但在建立连接之前,必须找到所要连接的数据库,及其对应的JDBC驱动程序的名字.同时每一种数据库.或是同一种数据库的不同版本所对应的驱动程序都可能不同.找到了数据库对应的JDBC驱动程序名之后,还必

Java实现JDBC连接数据库实例

1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 7 public class JDBCTest { 8 9 private static final String URL="jdbc:mysql://127.0.0.1:3306/stud

Java 使用 JDBC 连接数据库的代码整合[MySql、SqlServer、Oracle]-[经过设计模式改造](2020年寒假小目标01)

2020.01.08 博客期:121 星期三 今天对过去整个大二和大三用到的数据库的方法进行汇总,可以有效的使用.套用,每一个部分都有<软件设计模式>知识,上述代码满足了开闭原则,如果要使用此代码,只需添加数据类继承已经写好的类就可以了,无需修改. 开发项目中,项目整体结构:    [小编网不好,图传不上去,到时候,补上] 类图: [小编网不好,图传不上去,到时候,补上] 源码: com.dblink.basic.sqlkind 包: 1 package com.dblink.basic.sq

java使用JDBC连接数据库的几种方式

/** * 1 在方法中固化连接参数 * * @return 数据库连接 */ public Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root",

java使用jdbc连接数据库步骤

确定连接的数据库类型<mysql,oracle,db2,moangdb,sqlservlet> 下载数据库的驱动(http://mvnrepository.org),并把jar包添加到项目中 把数据库连接的驱动类加载到java虚拟机中 通过DriverManager类中getConnection方法获取到对应数据库连接对象 通过连接对象创建编译对象 通过编译对象想sql发出指令 接受并处理返回的结果 释放相关操作资源 原文地址:https://www.cnblogs.com/ysource/p