编写一个简单的 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 的窗口中按如下图中指引操作即可。

 

代码实现如下:

  1 package com.fhcq.jdbc;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.ResultSet;
  6 import java.sql.SQLException;
  7 import java.sql.Statement;
  8 
  9 public class JDBCTest {
 10 
 11     public static void main(String[] args) throws Exception{
 12     	// TODO Auto-generated method stub
 13          test();
 14     }
 15 
 16     static void test() throws SQLException, ClassNotFoundException {
 17 
 18         // 1.注册驱动
 19         //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
 20         //System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
 21         Class.forName("com.mysql.jdbc.Driver");//推荐方式
 22 
 23         // 2.建立连接
 24         String url = "jdbc:mysql://localhost:3306/jdbc";
 25         String user = "root";
 26         String password = "123456";
 27         Connection conn = DriverManager.getConnection(url, user, password);
 28 
 29         // 3.创建语句
 30         Statement st = conn.createStatement();
 31 
 32         // 4.执行语句
 33         ResultSet rs = st.executeQuery("select * from user");
 34 
 35         // 5.处理结果(依次打印出 user 表中的4列基本数据项的值)
 36         while (rs.next()) {
 37             System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t"
 38                     + rs.getObject(3)+"\t" + rs.getObject(4));
 39         }
 40 
 41         // 6.释放资源
 42         rs.close();
 43         st.close();
 44         conn.close();
 45     }
 46 
 47 }

 

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

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

  1 package com.fhcq.jdbc;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.ResultSet;
  6 import java.sql.SQLException;
  7 import java.sql.Statement;
  8 
  9 public final class JDBCUtils {
 10 
 11 	private static String url = "jdbc:mysql://localhost:3306/jdbc";
 12 	private static String user = "root";
 13 	private static String password = "123456";
 14 
 15 	private JDBCUtils(){
 16 
 17 	}
 18 
 19 	static{
 20 
 21 		// 1.注册驱动
 22 		try {
 23 			Class.forName("com.mysql.jdbc.Driver");
 24 		} catch (ClassNotFoundException e) {
 25 			throw new ExceptionInInitializerError(e);
 26 		}
 27 	}
 28 
 29 	public static Connection getConnection() throws SQLException{
 30 		return DriverManager.getConnection(url, user, password);
 31 	}
 32 
 33 	public static void free(ResultSet rs,Statement st,Connection conn){
 34 
 35 		try{
 36 			if(rs!=null){
 37 				rs.close();
 38 			}
 39 		}catch(SQLException e){
 40 			e.printStackTrace();
 41 		}finally{
 42 			try{
 43 				if(st != null){
 44 					st.close();
 45 				}
 46 			}catch(SQLException e){
 47 				e.printStackTrace();
 48 			}finally{
 49 				if(conn!=null){
 50 					try {
 51 						conn.close();
 52 					} catch (SQLException e) {
 53 						e.printStackTrace();
 54 					}
 55 				}
 56 			}
 57 		}
 58 	}
 59 }

 

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

  1 package com.fhcq.jdbc;
  2 
  3 import java.sql.Connection;
  4 import java.sql.ResultSet;
  5 import java.sql.Statement;
  6 
  7 public class JDBCTest {
  8 
  9 	public static void main(String[] args) throws Exception {
 10 		// TODO Auto-generated method stub
 11 		template();
 12 	}
 13 
 14 	static void template() throws Exception{
 15 
 16 		Connection conn = null;
 17 		Statement st = null;
 18 		ResultSet rs = null;
 19 
 20 		try {
 21 
 22 			// 2.建立连接
 23 			conn = JDBCUtils.getConnection();
 24 
 25 			// 3.创建语句
 26 			st = conn.createStatement();
 27 
 28 			// 4.执行语句
 29 			rs = st.executeQuery("select * from user");
 30 
 31 			// 5.处理结果
 32 			while(rs.next()){
 33 				System.out.println(rs.getObject(1) + "\t" + rs.getObject(2)
 34 				     + "\t"+ rs.getObject(3)+"\t" + rs.getObject(4));
 35 			}
 36 
 37 		}finally{
 38 			JDBCUtils.free(rs, st, conn);
 39 		}
 40 
 41 	}
 42 
 43 }
posted @ 2017-06-05 17:18  长情白月光  阅读(5483)  评论(0编辑  收藏  举报