JDBC入门案列

2 篇文章 0 订阅

第一次写博客记录下今天终于把Java基础告一段落

自己由于(大学)学校资源有限,大不了自己靠自己学了下java,过程中随着学习的深入也觉得java的魅力所在。上学期也学JAVA,这学期又自己重温了一下知识,也算是复习吧!

(自己萌新一个,要是有什么好的建议请多多指教 // 手动谢谢)

数据库:MYSQL
JDK:1.8
IDE工具:IDEA
四个文件:
  1. 主文件 ——demo1
  2. 自己创建的连接对象类:连接类_JDBCutils
    3. 配置单:yinhang.properties(新手可以Ctrl+c嫖走,注意是.properties文件
  3. 数据库文件:yinhang

文件1(里面有附带解释)

package day40_JDBC银行转账案例;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class demo1 {
    public static void main(String[] args) {
        Connection connection = null;//定义一个Connection类的连接对象
        PreparedStatement ps = null;//定义一个PreparedStatement继承Statement类的连接对象
        /**PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。
         * 包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。
         * IN参数的值在 SQL 语句创建时未被指定。
         * 相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。
         * 每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。
         *
         *
         * 使用占位符,一次解析多次执行,可提高性能
         * 可防止SQL注入
         * 可缓存的PS,可提高性能
         * 需要数据库服务端支持
         */
        try {
            connection = 连接类_JDBCutils.getconnection();
            //使用已经创建好的连接类和连接配置创建一个对象赋
            connection.setAutoCommit(false);
            /**
             * Connection  接口中与事务有关的方法  说明
             *
             * void setAutoCommit(boolean autoCommit)  参数是 true 或 false
             * 如果设置为 false,表示关闭自动提交,相当于开启事务
             * void commit() 提交事务
             * void rollback()  回滚事务
             */

            ps = connection.prepareStatement
                    ("update account set balance = balance - ? where name=?");
//            连接对象使用prepareStatement方法执行SQL语句(将name的钱减少?)
            ps.setInt(1, 500);//第一个?赋值500
            ps.setString(2, "wlw");//第二个?赋值wlw(人名)
            ps.executeUpdate();//连接对象执行语句

//            System.out.println(100 / 0);
            // 这一行极为重要,若错误则不能执行下面的语句,抛出异常

//            同上
            ps = connection.prepareStatement
                    ("update account set balance = balance + ? where name=?");
            ps.setInt(1, 500);
            ps.setString(2, "yjj");
            ps.executeUpdate();


            connection.commit();//void commit() 提交连接的对象的执行事务
            System.out.println("转账成功");


        } catch (Exception e) {
            e.printStackTrace();
            try {
                connection.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            System.out.println("转账失败");
        }
        finally {
            连接类_JDBCutils.close(connection,ps);
            //无论是否抛出异常都要执行这句话,避免不要的内存空间浪费
        }
    }
}

文件2

package day40_JDBC银行转账案例;

import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

public class 连接类_JDBCutils {
    private static String user = null;
    private static String passwd = null;
    private static String driver = null;
    private static String url = null;
    static {

        Properties properties = new Properties();
        try {
            properties.load(new FileReader("src/yinhang.properties"));

            user = properties.getProperty("user");
            url = properties.getProperty("url");
            passwd = properties.getProperty("passwd");
            driver = properties.getProperty("driver");

            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }

    }

    public static Connection getconnection() throws SQLException {
        return DriverManager.getConnection(url, user, passwd);
    }

    public static void close(Connection connection, Statement statement) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}


文件3

user=root
passwd=123456
url=jdbc:mysql://localhost:3306/yinhang
driver=com.mysql.cj.jdbc.Driver

文件4

create database  yinhang;
use yinhang;
CREATE TABLE account (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
balance int
);
INSERT INTO account (NAME, balance) VALUES ('wlw', 1000), ('yjj', 1000);
select * from  account;

(自己萌新一个,要是有什么好的建议请多多指教 // 手动谢谢)

种一棵树的最好时间是十年前和现在!

剩下的就每天多学习,多看书,提升自己,Enjoy Typing Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值