编写一个简单的 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 }