zoukankan      html  css  js  c++  java
  • 编写一个简单的 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) + "	" + rs.getObject(2) + "	"
     38                     + rs.getObject(3)+"	" + 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) + "	" + rs.getObject(2)
     34 				     + "	"+ rs.getObject(3)+"	" + rs.getObject(4));
     35 			}
     36 
     37 		}finally{
     38 			JDBCUtils.free(rs, st, conn);
     39 		}
     40 
     41 	}
     42 
     43 }
  • 相关阅读:
    [BZOJ1584] [Usaco2009 Mar]Cleaning Up 打扫卫生(DP)
    [BZOJ1583] [Usaco2009 Mar]Moon Mooing 哞哞叫(队列)
    [BZOJ1582] [Usaco2009 Hol]Holiday Painting 节日画画(线段树)
    [BZOJ1579] [Usaco2009 Feb]Revamping Trails 道路升级(分层图最短路 + 堆优化dijk)
    [ZPG TEST 115] 字符串【归类思想】
    [ZPG TEST 114] 阿狸的英文名【水题】
    [USACO 2012 Open Gold] Bookshelf【优化dp】
    [USACO 2012 Mar Silver] Landscaping【Edit Distance】
    [USACO 2012 Mar Gold] Large Banner
    [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】
  • 原文地址:https://www.cnblogs.com/justlove/p/6946032.html
Copyright © 2011-2022 走看看