`
jgnan
  • 浏览: 87507 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA简单教程:数据库操作(二)

阅读更多
今天来分析一下上次的程序和数据库的增删查改操作。

首先,我们用Class.forName方法去初始化字符串相应的类,即
Class.forName("com.mysql.jdbc.Driver");

等于
new com.mysql.jdbc.Driver();

不过前者即使要引入的类没有都可以编译通过,而后者则不能,所以如果想要实现动态加载的话,前者是其中一种可行的方法。

然后,我们使用DriverManager这个工具方法获取一个链接实例:
java.sql.Connection conn  = DriverManager.getConnection(url,username,password);


参数说明:
参数名作用
url数据库链接地址,通常是按照jdbc:数据库链接类型:主机地址(:端口)/实例名的格式,例如jdbc:mysql://localhost/test
username登录用户名
password登录密码


获取Connection对象之后,程序就会打开一个链接和数据库进行交互。Connection对象是我们与数据库交互的入口,它通关与数据库打交道的所有资源及操作环境配置。我们可以通过它创建SQL运行环境,进行事务相关操作等。这个在日后介绍。

然后,我们为了执行SQL命令,需要创建一个java.sql.Statement对象:
java.sql.Statement stmt = conn.createStatement();

Statement对象允许我们去执行查询及修改数据库记录的SQL,通过以下方法:
//查询
java.sql.ResultSet rs = stmt.executeQuery("select * from test");
//增删改
int affectedNumber = stmt.execute("delete from test");


如果要获取一条记录内容,只能够通过executeQuery方法,它会返回一个ResultSet对象,其实这个对象就是一个数据库指针操作方法的封装集合。我们可以通过它的next()方法移动指针,然后通过getXXX([columnName|columnIndex])方法获取各个字段的值,其中XXX为Java数据类型。

以下是一种常用的轮训记录操作代码,这段代码只使用于轮训非大对象类型记录:
java.util.Array<java.util.Map<String,Object>> results = new java.util.Array<java.util.Map<String,Object>>();
while(rs.next())//查看是否还有下一条记录,如果有把指针移到下一记录处
{
    java.util.Map<String,Object> row = new java.util.HashMap<String,Object>();
    row.put("id",rs.getInt(1));    //获取当行第一列的数据
    row.put("name",rs.getString("username"));    //获取当行username列的值
    row.put("birthday",rs.getDate("birth"));    //获取出生日期(没有时间)
    row.put("registerDate",rs.getTimestamp("created_by"));  //获取日期加时间类型数据
}


如果执行execute()方法,则只会返回该SQL执行后影响到的记录行数。

最后,我们需要强调一下,如果我们运行完数据库操作程序,我们必须执行java.sql.Connection对象的close();方法,以释放当前链接,否则,就会导致该链接一直被占用而无法释放的问题出现,也就是我们著名的数据库链接泄漏问题。

如果你只是当前的操作完成了,但是不想关闭数据库链接,则可运行java.sql.Statement.close()方法来释放当前操作环境资源。

同理,如果不再操作指针对象了,应该调用java.sql.ResultSet.close()方法。

必须记住要在操作完以后操作相应资源。当然,如果Connection.close()被调用之后,其实所有该Connection派生出来的资源都会被释放。

当然时至今日,直接进行JDBC操作的人已经很少了,但是了解清楚实现底层接口对于了解ORM工具还是很有帮助的。

下次我们会来介绍一下java.sql.PreparedStatement类。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics