jdbc-Java数据库连接

今天要做异构系统的数据集成。之前做过webservice的。以及调用webapi。具体情况具体分析。之后把webservice和webapi单独整理一下。
此次场景是对方系统直接提供数据库视图,地址,用户名和密码。我们系统去直接读取数据。相关api都有点生疏了,通过此次,整理一下jdbc相关知识。

JDBC介绍

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

jdbc步骤

//1.加载驱动程序
//Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库的连接
//String url = "jdbc:sqlserver://ip地址:端口;databaseName=数据库名;user=用户名;password=密码";
//String mysqlurl="jdbc:mysql://ip地址:端口/数据库名?user=用户名&password=密码&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false";
//Connection conn = DriverManager.getConnection(mysqlurl);
Connection conn = DriverManager.getConnection(URL,USER,PASSWORD);
//3.操作数据库
//获取Statement对象
Statement stmt = conn.createStatement();
//4.执行sql语句,获取结果集
ResultSet rs = stmt.executeQuery("SELECT user_name,age FROM T_test");
//5.获取返回的数据
while(rs.next()){
    System.out.println("用户名:" + rs.getString("user_name") + "  年龄:" + rs.getInt("age"));
}
//6.释放资源
rs.close();
stme.close();
conn.close();

主要类说明(api中文文档原文)

DriverManager
  • 用于管理一组JDBC驱动程序的基本服务。
    注意: JDBC 2.0 API中新增的DataSource接口提供了另一种连接到数据源的方法。 使用DataSource对象是连接到数据源的首选方法。
    作为其初始化的一部分, DriverManager类将尝试加载在“jdbc.drivers”系统属性中引用的驱动程序类。 这允许用户自定义应用程序使用的JDBC驱动程序。 例如在〜/ .hotjava / properties文件中,您可以指定:
    jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver
    DriverManager方法getConnectiongetDrivers已得到增强,以支持Java Standard Edition Service Provider机制。 JDBC 4.0驱动程序必须包含文件META-INF/services/java.sql.Driver 。 该文件包含java.sql.Driver的JDBC驱动程序实现的java.sql.Driver 。 例如,要加载my.sql.Driver类, META-INF/services/java.sql.Driver文件将包含条目:
    my.sql.Driver
    应用程序不再需要使用Class.forName()显式加载JDBC驱动程序。 目前使用加载JDBC驱动程序的现有程序Class.forName()将继续无需修改工作
    当调用方法getConnection时, DriverManager将尝试从初始化中加载的驱动程序中找到合适的驱动程序,并使用与当前小程序或应用程序相同的类加载器显式加载驱动程序。
    从Java 2 SDK,Standard Edition,1.3版开始,只有在授予了适当的权限后才能设置记录流。 通常这将通过ToolTool工具来完成,该工具可用于授予permission java.sql.SQLPermission "setLog"
Statement

public interface Statement
extends Wrapper, AutoCloseable

  • 用于执行静态SQL语句并返回其生成的结果的对象。
    默认情况下,每个Statement对象只能有一个ResultSet对象同时打开。 因此,如果一个ResultSet对象的读取与另一个对象的读取交错,则ResultSet对象必须由不同的Statement对象生成。 在所有执行方法Statement接口隐式关闭当前ResultSet声明的对象,如果一个开放的存在。
ResultSet

public interface ResultSet
extends Wrapper, AutoCloseable

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

  • ResultSet对象保持一个光标指向其当前的数据行。 最初,光标位于第一行之前。 next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false ,因此可以在while循环中使用循环来遍历结果集。
  • 默认的ResultSet对象不可更新,并且只有一个向前移动的光标。 因此,您只能从第一行到最后一行迭代一次。 可以生成可滚动和/或可更新的ResultSet对象。 以下代码片段(其中con是有效的Connection对象)说明了如何使可滚动且对其他人更新不敏感的结果集,这是可更新的。 有关其他选项,请参阅ResultSet字段。
    Statement stmt = con.createStatement(
                                          ResultSet.TYPE_SCROLL_INSENSITIVE,
                                          ResultSet.CONCUR_UPDATABLE);
           ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
           // rs will be scrollable, will not show changes made by others,
           // and will be updatable 
  • 所述ResultSet接口提供getter方法( getBooleangetLong ,用于从当前行检索列值,等等)。 可以使用列的索引号或列的名称来检索值。 一般来说,使用列索引将更有效率。 列从1编号。为了最大可移植性,每行中的结果集列应以从左到右的顺序读取,每列应只读一次。
  • 对于getter方法,JDBC驱动程序尝试将底层数据转换为getter方法中指定的Java类型,并返回合适的Java值。 JDBC规范具有一个表格,该表格显示了可由ResultSet getter方法使用的SQL类型到Java类型的允许映射。
  • 用作getter方法输入的列名不区分大小写。 当使用列名称调用getter方法时,多个列具有相同的名称,将返回第一个匹配列的值。 列名称选项用于在生成结果集的SQL查询中使用列名时使用。 对于在查询中未明确命名的列,最好使用列号。 如果使用列名称,程序员应该小心保证它们唯一地引用预期的列,这可以通过SQL AS子句来确保。
  • JDBC 2.0 API(Java¢2 SDK,Standard Edition,1.2版)中的此接口添加了一组更新方法。 关于getter方法参数的注释也适用于updater方法的参数。
  • 更新方法可以以两种方式使用:
  1. 更新当前行中的列值。 在可滚动的ResultSet对象中,光标可以向前和向后移动到绝对位置或相对于当前行的位置。 下面的代码段更新NAME所述的第五行中列ResultSet对象rs ,然后使用方法updateRow来更新该数据的源表rs推导。
  rs.absolute(5); // moves the cursor to the fifth row of rs
  rs.updateString("NAME", "AINSWORTH"); // updates the
  // `NAME` column of row 5 to be `AINSWORTH`
 rs.updateRow(); // updates the row in the data source 
  1. 将列值插入到插入行中。 可更新的ResultSet对象具有与其相关ResultSet的特殊行,用作构建要插入的行的暂存区域。 以下代码片段将光标移动到插入行,构建一个三列行,并将其插入到rs ,并使用方法insertRow进入数据源表。
 rs.moveToInsertRow(); // moves cursor to the insert row
 rs.updateString(1, "AINSWORTH"); // updates the
 // first column of the insert row to be `AINSWORTH`
 rs.updateInt(2,35); // updates the second column to be `35`
 rs.updateBoolean(3, true); // updates the third column to `true`
 rs.insertRow();
 rs.moveToCurrentRow(); 

ResultSet当对象将自动关闭Statement生成它对象被关闭时,重新执行,或用于检索从多个结果的序列中的下一结果。
ResultSet对象的列的数量,类型和属性由ResultSet.getMetaData方法返回的ResultSetMetaData对象提供。

你可能感兴趣的:(jdbc-Java数据库连接)