Swing 学习二 数据库篇

来源:互联网 发布:java图形界面开发插件 编辑:程序博客网 时间:2024/06/07 16:08

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

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;    }}