网站首页> 博客> 编写一个简单的 JDBC 程序,以mysql为例

编写一个简单的 JDBC 程序,以mysql为例

好文 2313
格式化记忆
收藏


由于现在开发中用的都是框架,估计很多人连最基本的jdbc的连接方式都不记得了,现在带大家温故而知新。

连接数据库的步骤:

1、注册驱动(只做一次)

2、建立连接(Connection)

3、创建执行SQL的语句(Statement)

4、执行语句

5、处理执行结果(ResultSet)

6、释放资源

 

在写代码之前,我们需要导入数据库驱动,即 mysql-connector-java-5.0.8-bin.jar

导入 jar 包步骤:在项目名(JDBCDemo)上鼠标右键,然后左键点击 Properties,在弹出的 Properties for JDBCDemo 的窗口中按如下图中指引操作即可。

 

代码实现如下:

package com.fhcq.jdbc;

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

public class JDBCTest {

    public static void main(String[] args) throws Exception{
    	// TODO Auto-generated method stub
         test();
    }

    static void test() throws SQLException, ClassNotFoundException {

        // 1.注册驱动
        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        //System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
        Class.forName("com.mysql.jdbc.Driver");//推荐方式

        // 2.建立连接
        String url = "jdbc:mysql://localhost:3306/jdbc";
        String user = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, user, password);

        // 3.创建语句
        Statement st = conn.createStatement();

        // 4.执行语句
        ResultSet rs = st.executeQuery("select * from user");

        // 5.处理结果(依次打印出 user 表中的4列基本数据项的值)
        while (rs.next()) {
            System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t"
                    + rs.getObject(3)+"\t" + rs.getObject(4));
        }

        // 6.释放资源
        rs.close();
        st.close();
        conn.close();
    }

}

 

上述代码的实现其实是一个很不规范的例子,下面就来对其进行简单的优化:

我们首先写一个 JDBCUtils 工具类。首先来保证这个驱动只注册一次,然后再把【建立连接】 和 【释放资源】 的部分也都添加进来,这样在我们每次获取连接的时候都通过这个工具类来拿,还有就是不会每写一次都要把【释放资源】那么一大段代码都给带上了。

package com.fhcq.jdbc;

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

public final class JDBCUtils {

	private static String url = "jdbc:mysql://localhost:3306/jdbc";
	private static String user = "root";
	private static String password = "123456";

	private JDBCUtils(){

	}

	static{

		// 1.注册驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			throw new ExceptionInInitializerError(e);
		}
	}

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

	public static void free(ResultSet rs,Statement st,Connection conn){

		try{
			if(rs!=null){
				rs.close();
			}
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			try{
				if(st != null){
					st.close();
				}
			}catch(SQLException e){
				e.printStackTrace();
			}finally{
				if(conn!=null){
					try {
						conn.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
}

 

剩下的我们就来简化一下原有的代码,这样处理后的代码就可以作为我们的一个模板来使用了。

package com.fhcq.jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCTest {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		template();
	}

	static void template() throws Exception{

		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {

			// 2.建立连接
			conn = JDBCUtils.getConnection();

			// 3.创建语句
			st = conn.createStatement();

			// 4.执行语句
			rs = st.executeQuery("select * from user");

			// 5.处理结果
			while(rs.next()){
				System.out.println(rs.getObject(1) + "\t" + rs.getObject(2)
				     + "\t"+ rs.getObject(3)+"\t" + rs.getObject(4));
			}

		}finally{
			JDBCUtils.free(rs, st, conn);
		}

	}

}


  • 没有任何评论
个评论
格式化记忆

格式化记忆 (铂金)

95178金币 (272)粉丝 (31)源码

一切皆有可能!!!

 

加入微信群,不定期分享源码和经验
签到活跃榜 连续签到送额外金币
最新博客
校园跑腿系统外卖系统软件平台大学生创业平台搭建 421
壹脉销客智能名片CRM系统小程序可二开源码交付部署 412
为啥没搞了 609
Nginx 的 5 大应用场景,太实用了! 886
CentOS 8-stream 安装Postgresql 详细教程 1039
JAVA智慧校园管理系统小程序源码 电子班牌 Sass 模式 1023
Java智慧校园系统源码 智慧校园源码 智慧学校源码 智慧校园管理系统源码 小程序+电子班牌 771
Java智慧校园系统源码 智慧校园源码 智慧学校源码 智慧校园管理系统源码 小程序+电子班牌 755
致远OA权限 1213
发博客会有金币吗 785