JSP Connect Database

Posted lijianming180

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP Connect Database相关的知识,希望对你有一定的参考价值。

JDBC简介

在Java技术中,访问数据库的技术叫做JDBC,它提供了一系列的API,让Java语言编写的代码连接数据库,对数据库进行添加、删除、修改和查询。
JDBC相关的API存在java.sql包中。主要包括以下类或者接口:

  • java.sql.Connection: 负责数据库的连接
  • java.sql.Statement, 负责执行SQL语句
  • java.sql.ResultSet, 负责存放查询结果

由于JSP不知道具体连接的是哪一种数据库,而各种数据库产品,由于厂商不一样,连接的方式也不一样。所以这里给出了解决方案:
JDBC提供了“驱动程序”的概念,即对于不同的数据库,使用不同的驱动即可。

JDBC操作

  1. 指定驱动(以SQL Server数据库为例)
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

  2. 获取连接:

1
2
Connection conn=DriverManager.getConnection(
"url=?;databaseName=?;user=?;password=?");
  1. 使用statement接口运行SQL语句
1
2
3
4
5
Statement stat=conn.createStatement();

stat.execute(sql);
//SQL查询
stat.executeQuery(sql);
  1. 执行SQL语句
  2. 关闭数据库
1
2
stat.close();
conn.close();

SQL查询

这里之所以需要单独讲解SQL查询,是因为它和其他SQL操作不同。
首先它返回的是一个查询的结果ResultSet

1
ResultSet rs = stat.executeQuery(sql)

这个时候结果就已经放在了rs变量中了。
其次我们可以把rs理解成一个指针,通过rs.next()来移动指针。
rs初始指向第一行的前一行,所以如果要访问第一行,需要先执行rs.next(),然后再通过rs.getString()来获取第一行的值。
如果有多行,可以通过while循环来获取

1
2
大专栏  JSP Connect Database/>3
4
5
while(rs.next()){
String stuno = rs.getString("STUNO");
String stuname=rs.getString("STUNAME");
out.println(stuno+" "+stuname+"<br>");
}

注意: getString()也可以来获取第i列的值:getString(i)

使用PreparedStatement

PreparedStatement是Statement的子接口,功能和Statement类似,只是使用?来代替了需要插入的参数。

1
2
3
4
5
String sql="INSERT INTO STUDENT VALUES(STUNO,STUNAME,STUSEX) VALUES(?,?,?)";
PrepareStatement ps = conn.prepareStatement(sql);
ps.setString(1,studno);
ps.setString(2,stuname);
ps.setString(3.stusex);

事务

在银行转账时,要对数据库进行两个操作,即一个账户的前减少,将另一个账户的钱增多。但是由于操作的先后顺序,如果在两个操作之间发生故障,则会导致数据不一致,因为我们需要一个事务,是在两条语句都被执行成功后,数据才真正的被放入数据库,否则操作回滚(rollback)

1
2
3
4
5
6
7
8
9
10
11
12
try{
//设置不要自动提交
conn.setAutuCommit(false);
stat.execute(sql1);
stat.execute(sql2);
//提交以上操作
conn.commit();
}catch(Exception e){
conn.rollback();
}finally{
conn.close();
}

以上是关于JSP Connect Database的主要内容,如果未能解决你的问题,请参考以下文章

在 JSP 中的 <% %> 代码片段中添加链接

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段

JSP基础

day06-jsp

jsp