2.4、JDBC程序的代码模板
开发一个JDBC应用程序,基本需要以下步骤:
(1)、把JDBC驱动类装载入Java虚拟机中,为此,可使用Class.forName()方法,此方法将给定的类加载到Java虚拟机中。如果系统中不存在给定的类,则会引发异常,异常类型为ClassNotFoundException。
Class.forName(“JDBC驱动类的名称”);
(2)、加载驱动,并与数据库建立连接。DriverManager类跟踪已注册的驱动程序,当调用getConnection()方法时,它会搜索整个驱动程序列表,直到找到一个能够连接至数据连接字符串中指定的数据库的驱动程序。加载此驱动程序之后,将使用DriverManager类的getConnection()方法建立与数据库的连接。此方法接收三个参数,分别表示URL、用户名和密码。用户名和密码是可选的。
Connection conn = DriverManager.getConnection(数据库连接字符串,数据库用户名,密码);
(3)、发送SQL语句,并得到结果集。一旦连接建立,就使用该连接创建Statement接口的实例,并将SQL语句传递给它所连接的数据库,并返回类型为ResultSet的对象,它包含执行SQL查询的结果。
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(select a,b,c from table);
(4)、处理结果。使用ResultSet对象的next()方法将光标(cursor)指向下一行。最初光标位于第一行之前,因此第一次调用next()方法将光标置于第一行上。如果到达结果集的末尾,则ResultSet的next()方法会返回false。方法getXXX提供了获取当前行中某列值的途径,列名或列号可用于标识要从中获取数据的列。例如:如果数据表中第一列的列名为a,存储类型为整型,则可以使用两种方法获取存储在该列中的值,如:int x = rs.getInt(“a”);或者:int x = rs.getInt(1);
处理结果的代码示例:
while(rs.next()){
int x = rs.getInt(“a”);
String s = rs.getString(“b”);
float f = rs.getFloat(“c”);
}
JDBC程序的代码模板:
- //把JDBC驱动类装载入Java虚拟机中
- Class.forName(JDBC驱动类的名称);
- //加载驱动,并与数据库建立连接,其中数据库连接字符串用来标识数据库
- Connection conn = DriverManager.getConnection(数据库连接字符串,数据库用户名,密码);
- //执行SQL语句,并得到结果集
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery(“select a,b,c from table”);
- //处理结果
- while(rs.next()){
- int x = rs.getInt(“a”);
- String s = rs.getString(“b”);
- float f = rs.getFloat(“c”);
- }
//把JDBC驱动类装载入Java虚拟机中
Class.forName(JDBC驱动类的名称);
//加载驱动,并与数据库建立连接,其中数据库连接字符串用来标识数据库
Connection conn = DriverManager.getConnection(数据库连接字符串,数据库用户名,密码);
//执行SQL语句,并得到结果集
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(“select a,b,c from table”);
//处理结果
while(rs.next()){
int x = rs.getInt(“a”);
String s = rs.getString(“b”);
float f = rs.getFloat(“c”);
}
2.5、什么是JDBC URL
JDBC URL提供了一种标识数据库的方法,可以使相应的JDBC驱动程序能识别数据库并与之建立连接。
JDBC URL的标准语法由以下三个部分组成,各部分间用冒号分隔。
Jdbc:<子协议>:<子名称>
JDBC URL的三个部分可以分解如下:
其中jdbc-----代表协议。
<子协议>----驱动程序名或数据库连接机制的名称。
<子名称>----一种标识数据库的方法。
JDBC URL示例:
jdbc:odbc:news
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=news
3、 Statement接口和PreparedStatement接口中的方法
ResultSet executeQuery(String sql):可以执行SQL查询并获取到ResultSet对象。
int executeUpdate(String sql):可以执行插入、删除、更新等操作,返回值是执行该操作所影响的行数。
boolean execute(String sql):这是一个最为一般的执行方法,可以执行任意SQL语句,然后获得一个布尔值,表示是否返回ResultSet。
4、 为什么要关闭Statement对象以及数据库连接
如果不关闭Statement对象,它们会一直占用服务器资源,直到Java垃圾收集程序来回收它。作为一种好的编程风格,应在不需要Statement对象时显示地关闭它们,这将立即释放服务器资源,有助于避免潜在的内存问题。同样,使用完数据库连接后,就应关闭它,释放连接所占用的数据库资源。
5、 PreparedStatement语句
PreparedStatement接口继承自Statement接口,PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率。PreparedStatement实例包含已编译的SQL语句,SQL语句可具有一个或多个输入参数。这些输入参数的值在SQL语句创建时未被指定,而是为每个输入参数保留一个问号(“?”)作为占位符。
PreparedStatement pstmt = con.prepareStatement(“update table set a=? where b=?”);
在执行PreparedStatement对象之前,必须设置每个输入参数的值。可通过setXXX方法来完成,其中XXX是与该参数相应的类型。例如,如果参数具有Java类型long,则使用的方法就是设置给该参数的值。例如,以下代码将第一个参数设为长整型值123456789,第二个参数设为整型值10:
pstmt.setLong(1,123456789);
pstmt.setInt(2,10);
由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象,因此,多次执行的SQL语句应被创建为PreparedStatement对象,以提高效率。
6、 格式化时间
SimpleDateFormat hmFromat = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
hmFromat.format(new Date());
7、 步骤
1)调用Class类的forName()方法,加载并注册数据库驱动。
2)调用DriverManager类的getConnection()方法,建立到数据库的连接
3)调用Connection对象的createStatement()方法,访问数据库
4)调用Statement对象的executeQuery()方法得到ResultSet对象。
5) 调用ResultSet对象的getObject()方法,处理结果。
6)释放资源(连接应该尽可能晚建立,释放资源应尽可能早释放。)
8、 代码
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- /**
- *Jdbc工具类
- */
- public class JdbcUtils {
- private static String url = "jdbc:mysql://localhost:3306/test";
- private static String user = "root";
- private static String password = "123456";
- private JdbcUtils() { }
- static {
- try {
- Class.forName("com.mysql.jdbc.Driver");
- } catch (ClassNotFoundException ex) {
- throw new ExceptionInInitializerError(ex);
- }
- }
- public static Connection getConnection() throws SQLException{
- return DriverManager.getConnection(url, user, password);
- }
- public static void free(Connection conn, Statement st, ResultSet rs) {
- try {
- if (rs != null) {
- rs.close();
- }
- } catch (SQLException ex) {
- System.out.println(ex.toString());
- } finally {
- try {
- if(st!=null) {
- st.close();
- }
- } catch (SQLException ex) {
- System.out.println(ex.toString());
- } finally {
- try {
- if(conn!=null){
- conn.close();
- }
- } catch (SQLException ex) {
- System.out.println(ex.toString());
- }
- }
- }
- }
- }
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*Jdbc工具类
*/
public class JdbcUtils {
private static String url = "jdbc:mysql://localhost:3306/test";
private static String user = "root";
private static String password = "123456";
private JdbcUtils() { }
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}
public static void free(Connection conn, Statement st, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException ex) {
System.out.println(ex.toString());
} finally {
try {
if(st!=null) {
st.close();
}
} catch (SQLException ex) {
System.out.println(ex.toString());
} finally {
try {
if(conn!=null){
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.toString());
}
}
}
}
}
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class Test {
- public static void main(String[] args) {
- optimize();
- }
- public static void optimize() {
- Connection conn = null;
- Statement st = null;
- ResultSet rs = null;
- try {
- conn = JdbcUtils.getConnection();
- st = conn.createStatement();
- rs = st.executeQuery("Select * from Students;");
- while (rs.next()) {
- System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t" + rs.getObject(4));
- }
- } catch (SQLException ex) {
- System.out.println(ex.toString());
- } finally {
- JdbcUtils.free(conn, st, rs);
- }
- }
- }