您的位置:首页 > 职场人生

黑马程序员——JAVA基础---操作数据库

2015-07-12 15:29 381 查看

一 加载JDBC驱动程序

要访问数据库,首先要加载数据库驱动程序,不过只需要在第一次访问数据库时加载一次。然后,在每次访问数据库时,创建一个Connection实例,获取数据库连接,之后就可以向数据库发送SQL语句来操作数据。最后,在完成数据库操作时,释放与数据库的连接。


加载数据库驱动,可以使用Class类的静态方法forName(),语法如下:

Class.forName(String driverManager)

参数说明:

driverManager:要加载的数据库驱动,加载成功,会将加载的驱动类注册给DriverManager。如果加载失败,则会抛出ClassNotFoundException异常。

下面加载数据库驱动,代码如下。

try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}


上面的代码加载连接SQL Server 2008数据库驱动jtds。

技巧:

通常将负责加载驱动的代码放在static块中,好处是static块所在的类第一次被加载时加载数据库驱动,即第一次访问数据库时,可以避免重复加载驱动程序,浪费计算机资源。

创建数据库连接

在前面的章节中,已经向大家介绍了数据库管理类DriverManager,该类负责建立与管理数据库连接。通过DriverManager类的静态方法getConnection(String url, String user, String password),可以建立数据库连接。

语法如下:

Connection conn = DriverManager.getConnection(String url,String user,String passWord);

参数说明:

url:指定连接数据库的url。

user:指定连接数据库的用户。

passWord:指定连接数据库的密码。

在项目中创建类CreateConnection,在该类中定义连接数据库方法getConn()。



说明:本书采用的是使用数据库驱动包jtds连接数据库,当然还可以使用其他的驱动包,如sqljdbc4.jar驱动包,只需要替换Class类forName()方法的参数,替换为com.microsoft.sqlserver.jdbc.SQLServerDriver,将DriverManager类的getConnection()方法指定连接数据库的URL替换为“jdbc:sqlserver://localhost: 1433;DatabaseName= db_database15”,就可以完成与数据库的连接。

本实例运行的结果如图所示。



图 实例的运行结果

注意:

本实例将连接数据库作为单独的一个方法,并以Connection对象作为返回值。这样写的好处是遇到对数据库执行操作的程序时,可直接调用Conn类getConnection()方法获取连接,增加了代码的重用性。

说明:

如果在确定正确地添加了数据库驱动、代码又书写正确后,还是提示无法连接,则可以检查防火墙是否屏蔽了SQL Server或Java IDE的网络访问端口,如果是,关闭防火墙,重启SQL Server和Java IDE,进行测试。

二 执行SQL语句

建立数据库连接的目的是与数据库进行通信,实现方式为执行SQL语句,但是通过Connection实例并不能执行SQL语句,还需要利用Connection接口的createStatement()方法获取Statement对象。


例如,创建Statement对象state的代码如下:

Statement statement = con.createStatement();

上面代码中的con为Connection实例。

Statement实例只能执行静态的SQL语句,若要执行动态的SQL语句,还需要使用PreparedStatement实例。

要实现数据的修改、插入、删除等操作,可以通过Statement接口的executeUpdate()方法,要实现从数据库中查询数据,可以通过Statement接口的executeQuery()方法。

三 获得查询结果

通过Statement接口的executeUpdate()方法可以实现向数据库中添加、删除或修改数据的操作,该方法的返回值为int型数值,代表影响数据库记录的条数,而使用executeQuery()方法实行查询操作,将返回一个   ResultSet型的结果集,其中不仅包含所有满足查询条件的记录,还包含相应数据表的相关信息,如每一列的名称、类型和列的数量等。


例如,从tb_teacher表中查询所有记录总数,代码如下:

ResultSet res = statement.executeQuery(“select * from tb_teacher”);

ResultSet类似于一张数据表,要获取数据表中指定的列值,可以通过ResultSet实例的getXXX()方法。通过getXXX()方法,可以通过指定列的序号和名称来获取数据。

循环遍历查询结果集,代码如下。

while(res.next()){ //循环遍历查询结果集

int id = res.getInt(1); //获取结果集中第一列数据

String name = res.getString(“name”); //获取名称为“name”的列值

int age = res.getInt(4);

String sex = res.getString(“sex”);

String salary = res.getString(5);

}

上段代码中的语句“res.getString("name")”中的name就是数据表中的列名,此时如果该列是数据表中的第2列,则可以将该语句修改为“res.getString(2)”,如图所示。




图 结果集中的数据结构

四 关闭连接

在建立Connection、Statement和ResultSet实例时,均须占用一定的数据库和JDBC资源,所以每次访问数据库结束后,应该及时销毁这些实例,释放它们占用的所有资源,方法是通过各个实例的close()方法,并且在关闭时建议按照如下的顺序:


resultSet.close();

statement.close();

connection.close();

建议按上面的顺序关闭的原因在于,Connection是一个接口,close()方法的实现方式可能多种多样。如果是通过DriverManager类的getConnection()方法得到的Connection实例,在调用close()方法关闭Connection实例时,会同时关闭Statement实例和ResultSet实例。但是,通常情况下,会采用数据库连接池,在调用通过连接池得到的Connection实例的close()方法时,Connection实例可能并没有被释放,而是被放回到了连接池中,又被其他连接调用,在这种情况下,如果不手动关闭Statement实例和ResultSet实例,它们在Connection中可能会越来越多,虽然JVM的垃圾回收机制会定时清理缓存,但是如果清理得不及时,当数据库连接达到一定数量时,将严重影响数据库和计算机的运行速度,甚至导致软件或系统瘫痪。总之,应尽可能多地使用const关键字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA学习笔记