Swing 学习二 数据库篇

对于数据库的创建、连接、关闭的数据库处理

derby数据库

驱动:org.apache.derby.jdbc.EmbeddedDriver

URL:jdbc:derby:<数据库名称>[;create=true/false];


数据库操作

先通过DriverManager的getConnection获得Connection

再通过Connection的createStatement()获得Statement

再通过Statement的excuteQuery()获得ResultSet

再操作ResultSet


ThreadLocal类

jdk1.2时Java就为多线程提供了一个ThreadLocal类

全称:Thread Local Variable(线程局部量)

作用:为每一个使用该变量的线程都提供一个变量值副本,就好像一个线程完全拥有该变量一样。


import java.io.File;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class JDBC {

    private static final String DRIVERCLASS = "org.apache.derby.jdbc.EmbeddedDriver";// 数据库驱动
    private static final String URL = "jdbc:derby:db_album";// 数据库URL
    private static final ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();// 用来保存数据库连接
    private static Connection conn = null;// 数据库连接
    

    static { // 通过静态方法加载数据库驱动,并且在数据库不存在的情况下创建数据库

        try {
            Class.forName(DRIVERCLASS); // 加载数据库驱动

            File db_album = new File("db_album");// 创建数据库文件对象

            if (!db_album.exists()) {// 数据库文件不存在

                createDatabase();// 创建数据库

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void createDatabase() throws Exception {

        String[] sqls = new String[2];// 定义创建数据库的SQL语句

        sqls[0] = "create table tb_album (id int not null,father_id int not null,name varchar(20) not null,primary key (id))";
        sqls[1] = "create table tb_photo (num varchar(28) not null,album_id int not null,date date not null,title varchar(20) not null,note varchar(200),primary key (num))";
        conn = DriverManager.getConnection(URL + ";create=true");// 创建数据库连接

        threadLocal.set(conn);// 保存数据库连接

        Statement stmt = conn.createStatement();// 创建数据库连接状态对象

        for (int i = 0; i < sqls.length; i++) {// 遍历SQL数组创建数据库

            stmt.execute(sqls[i]);// 执行SQL语句

        }
        stmt.close();// 关闭数据库连接状态对象

    }

    protected static Connection getConnection() { // 创建数据库连接的方法

        conn = (Connection) threadLocal.get(); // 从线程中获得数据库连接

        if (conn == null) { // 没有可用的数据库连接

            try {
                conn = DriverManager.getConnection(URL);// 创建新的数据库连接

                threadLocal.set(conn); // 将数据库连接保存到线程中

            } catch (Exception e) {
                String[] infos = {"未能成功连接数据库!", "请确认本软件是否已经运行!"};
                JOptionPane.showMessageDialog(null, infos);// 弹出连接数据库失败的提示

                System.exit(0);// 关闭系统

                e.printStackTrace();
            }
        }
        return conn;
    }

    protected static boolean closeConnection() { // 关闭数据库连接的方法

        boolean isClosed = true; // 默认关闭成功

        conn = (Connection) threadLocal.get(); // 从线程中获得数据库连接

        threadLocal.set(null); // 清空线程中的数据库连接

        if (conn != null) { // 数据库连接可用

            try {
                conn.close(); // 关闭数据库连接

            } catch (SQLException e) {
                isClosed = false; // 关闭失败

                e.printStackTrace();
            }
        }
        return isClosed;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值