今天的状态不怎么好,但是还是依旧来复习一下用java怎么来连接数据库
首先 原理比较简单 -- 就是java APP 通过驱动程序去连接数据库,当然数据库也分成oracle,microsoft的sqlserver以及mysql,这个驱动程序其实就是java代码,但是不得不考虑一个问题,怎么来实现这个驱动程序就可以连上数据库了呢?一般来说,登入数据库的应用,开始的界面都会填写连接的ip地址,user信息,以及password,有些还可以直接填到相应的某个具体的数据库,所以这些信息也是我们要在驱动程序里面写到的。
其次,来聊聊一下具体怎样实现
有了上面的信息后,其实就可以写驱动程序了,但是程序员的维护部分就会很多了,既有java APP部分和java连接各种不同的数据库的代码,要是数据库底层变了,我们还得跟着你们变,简直不是人啊。。。所以,一流的sun公司就不干了,他们想着我是老大,凭什么要根据你们数据库的不同来维护不同的实现类代码,所以就自己定义了一套通用的java语言实现的连接不同数据库的接口规范--JDBC
这样就让他们这些数据库厂家自己用java来接一套实现驱动程序的类,来实现我们的sql的接口,这样就很棒了,我们要维护的代码就只有我们自己的javaAPP和这套规范,你们数据库自己要改变,那也请你们自己改好驱动程序,跟我们没有关系。。。
下面就是代码的实现
package util; import java.sql.*; import java.util.Properties; /* * 这个是jdbc工具类 * */ import org.junit.Test; public class jdbcUtil { private static String url = null; private static String driverClass = null; private static String user = "sa"; private static String password = "wangpass"; private Properties proper = new Properties(); /** * 静态代码块中(只加载一次) */ static{ try { url = "jdbc:sqlserver://localhost:1433;DatabaseName=团队网站"; driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //注册驱动程序 -- 加载类的时候,注册的静态代码块就是在执行了 /* class sqlser.jdbc.Driver implements Driver{ static try{ java.sql.DriverManager.registerDriver(new Driver()); }catch(Exception e){ throw new RuntimeExceptio("can't register driver"); } }*/ Class.forName(driverClass); } catch (Exception e) { e.printStackTrace(); System.out.println("驱程程序注册出错"); } } /** * 抽取获取连接对象的方法 */ public static Connection getConnection(){ try { Connection conn = DriverManager.getConnection(url,user,password); return conn; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 释放资源的方法 */ public static void close(Connection conn,Statement stmt){ if(stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } } public static void close(Connection conn,Statement stmt,ResultSet rs){ if(rs!=null) try { rs.close(); } catch (SQLException e1) { e1.printStackTrace(); throw new RuntimeException(e1); } if(stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } } @Test public void test(){ Connection conn = getConnection(); PreparedStatement stmt = null; ResultSet rs = null; String sql = "select * from 成员表"; try { stmt = conn.prepareStatement(sql); rs = stmt.executeQuery(); while(rs.next()){ System.out.println(rs.getString("学号")); } } catch (SQLException e) { e.printStackTrace(); }finally{ try { rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
上述的代码中我稍微解释一下 ;首先准备工作你的要做吧,写好相应的连接哪个数据库的ip,userName,password(后面两个也可以写入Properties里面),然后对于url,有统一的规范 url = "jdbc:数据库子协议://主机端口/具体数据库"
其次就是你得去注册一个驱动,在我们java里面是没有java实现数据库连接的实现类的,这个前面讲过了,没必要,而且维护太烦,我们只有接口,所以我们是要去注册一个驱动的,你们是哪个数据库要链接我,我就注册相应的driver(驱动),当然注册方法也有很多,但是由于很多数据库的java驱动程序中的实现类driver,都有一个静态的实现就是一旦new了一个新的driver就直接注册了,上面我也有写出来,所以我们就没必要在写一次注册的语句了,真正要我们写得就是new 出来一个新的drver,但其实也没必要new,直接用反射机制。这样就注册好了。然后我们java有一个driverManager的类来管理这些驱动,就用他来连接,这样就会得到一个Connection的对象,这样就已经连接好了你要连的数据库。
注解一下上面我主要是用的sqlserver的数据库,然后还写了一些关掉链接,释放资源的方法,完全可以当作一个工具类来使用了。。。
今天就这样吧~下次继续看看数据库连好后的操作