JSP复习笔记——第10章 连接数据库之JDBC简介与基本使用
动态web的最大特点--> 可以操作数据库
JSP属于动态web程序—> JDBC去操作数据库
JDBC本身是Java连接数据库的一个标准
使用数据库之中,可以发现,对数据库的处理由数据库管理系统去操作
JDBC:是JAVA操作数据库的方法
ODBC:是微软的数据库操作
JDBC-ODBC桥接方式:JDBC-ODBC是在JDK中由SUN本身开发出来的一套数据库访问操作,在JDBC-ODBC桥接中,它的各种操作API都是最新的,但性能较低,使用ODBC提供的数据库连接技术访问数据库,在开发中此方式肯定不用,因为性能低
JDBC驱动程序:有各个厂商按JDBC标准提供
建立好数据库和表后,要配置数据源
数据源名称为程序中真正要使用到的名称:
ODBC的基本原理:
通过一个数据源名称-->找到数据库
为数据库起了一个别名—>程序通过别名访问数据库
即:程序只任名称,不任数据库
JDBC-ODBC数据库连接驱动程序是由SUN提供的,为:sun.jdbc.odbc.JdbcOdbcDriver
操作数据库使用以下两个主要接口:
? statement
? preparedStatement
使用statement可以向数据库中执行SQL语句
SQL两大操作
? 更新数据:executeUpdate()
? 查询数据:executeQuery()
更新数据库的主要步骤:
加载驱动程序-->打开连接Connection-->操作statement-->关闭
Java代码
1.<%@ page contentType="text/html;charset=gb2312"%>
2.<%@ page import="java.sql.*"%>
3.<%!
4. // 定义数据库驱动程序
5. String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
6. // 定义数据库连接地址
7. String DBURL = "jdbc:odbc:sky" ;
8.
9. // 定义数据库连接对象,属于java.sql包中的接口
10. Connection conn = null ;
11.
12. // 定义Statement对象,用于操作数据库
13. Statement stmt = null ;
14.
15. // 定义一字符串变量,用于保存SQL语句
16. String sql = null ;
17.%>
18.<%
19. // 1、加载驱动程序
20. try {
21. Class.forName(DBDRIVER) ;
22. } catch(Exception e) {
23. // 此处使用out.print是处于演示目的,在实际开发中所有的错误消息,绝对不能够通过out.print打印,否则会存在安全问题
24. out.println("数据库驱动程序加载失败!!!") ;
25. }
26.
27. // 2、连接数据库
28. try {
29. conn = DriverManager.getConnection(DBURL) ;
30. } catch(Exception e) {
31. out.println("数据库连接失败!!!") ;
32. }
33.
34. // 3、操作数据库
35. // 通过Connection对象实例化Statement对象
36. try {
37. stmt = conn.createStatement() ;
38. // 为sql变量赋值
39. // 插入语句
40. sql = "INSERT INTO person (name,password,age) VALUES (darkness,'wind',22)" ;
41. // 更新语句
42. // sql = "UPDATE person SET name='wind',password='darkness' WHERE id=3" ;
43. // 按ID删除记录
44. // sql = "DELETE FROM person WHERE id=4" ;
45. // 通过Statement对象执行此SQL语句
46. stmt.executeUpdate(sql) ;
47. } catch(Exception e) {
48. out.println("操作数据库失败!!!") ;
49. }
50. // 4、关闭数据库
51. try {
52. // 关闭操作
53. stmt.close() ;
54. // 关闭连接
55. conn.close() ;
56. } catch(Exception e) {
57. out.println("数据库关闭失败!!!") ;
58. }
59.%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%!
// 定义数据库驱动程序
String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
// 定义数据库连接地址
String DBURL = "jdbc:odbc:sky" ;
// 定义数据库连接对象,属于java.sql包中的接口
Connection conn = null ;
// 定义Statement对象,用于操作数据库
Statement stmt = null ;
// 定义一字符串变量,用于保存SQL语句
String sql = null ;
%>
<%
// 1、加载驱动程序
try {
Class.forName(DBDRIVER) ;
} catch(Exception e) {
// 此处使用out.print是处于演示目的,在实际开发中所有的错误消息,绝对不能够通过out.print打印,否则会存在安全问题
out.println("数据库驱动程序加载失败!!!") ;
}
// 2、连接数据库
try {
conn = DriverManager.getConnection(DBURL) ;
} catch(Exception e) {
out.println("数据库连接失败!!!") ;
}
// 3、操作数据库
// 通过Connection对象实例化Statement对象
try {
stmt = conn.createStatement() ;
// 为sql变量赋值
// 插入语句
sql = "INSERT INTO person (name,password,age) VALUES (darkness,'wind',22)" ;
// 更新语句
// sql = "UPDATE person SET name='wind',password='darkness' WHERE id=3" ;
// 按ID删除记录
// sql = "DELETE FROM person WHERE id=4" ;
// 通过Statement对象执行此SQL语句
stmt.executeUpdate(sql) ;
} catch(Exception e) {
out.println("操作数据库失败!!!") ;
}
// 4、关闭数据库
try {
// 关闭操作
stmt.close() ;
// 关闭连接
conn.close() ;
} catch(Exception e) {
out.println("数据库关闭失败!!!") ;
}
%>
查询数据库的主要步骤:
Java代码
1.<%@ page contentType="text/html;charset=gb2312"%>
2.<%@ page import="java.sql.*"%>
3.<%--
4. 此代码主要进行查询操作
5.--%>
6.<%!
7. // 定义数据库驱动程序
8. String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
9. // 定义数据库连接地址
10. String DBURL = "jdbc:odbc:sky" ;
11.
12. // 定义数据库连接对象,属于java.sql包中的接口
13. Connection conn = null ;
14.
15. // 定义Statement对象,用于操作数据库
16. Statement stmt = null ;
17.
18. // 定义一字符串变量,用于保存SQL语句
19. String sql = null ;
20.
21. // 查询返回的结果集对象
22. ResultSet rs = null ;
23.%>
24.<%
25. // 1、加载驱动程序
26. try {
27. Class.forName(DBDRIVER) ;
28. } catch(Exception e) {
29. // 此处使用out.print是处于演示目的,在实际开发中所有的错误消息,绝对不能够通过out.print打印,否则会存在安全问题
30. out.println("数据库驱动程序加载失败!!!") ;
31. }
32.
33. // 2、连接数据库
34. try {
35. conn = DriverManager.getConnection(DBURL) ;
36. } catch(Exception e) {
37. out.println("数据库连接失败!!!") ;
38. }
39.
40. // 3、操作数据库
41. // 通过Connection对象实例化Statement对象
42. try {
43. stmt = conn.createStatement() ;
44. // 编写查询的SQL语句
45. sql = "SELECT id,name,password,age FROM person" ;
46. // 查询数据库,此方法返回ResultSet对象
47. rs = stmt.executeQuery(sql) ;
48.%>
49. <table border="1" width="80%">
50. <tr>
51. <td>ID</td>
52. <td>姓名</td>
53. <td>密码</td>
54. <td>年龄</td>
55. </tr>
56.<%
57. while(rs.next()) {
58. int id = rs.getInt(1) ;
59. String name = rs.getString(2) ;
60. String password = rs.getString(3) ;
61. int age = rs.getInt(4) ;
62.%>
63. <tr>
64. <td><%=id%></td>
65. <td><%=name%></td>
66. <td><%=password%></td>
67. <td><%=age%></td>
68. </tr>
69.<%
70. }
71.%>
72. </table>
73.<%
74. } catch(Exception e) {
75. out.println("操作数据库失败!!!") ;
76. }
77. // 4、关闭数据库
78. try {
79. // 关闭结果集
80. rs.close() ;
81. // 关闭操作
82. stmt.close() ;
83. // 关闭连接
84. conn.close() ;
85. } catch(Exception e) {
86. out.println("数据库关闭失败!!!") ;
87. }
88.%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%--
此代码主要进行查询操作
--%>
<%!
// 定义数据库驱动程序
String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
// 定义数据库连接地址
String DBURL = "jdbc:odbc:sky" ;
// 定义数据库连接对象,属于java.sql包中的接口
Connection conn = null ;
// 定义Statement对象,用于操作数据库
Statement stmt = null ;
// 定义一字符串变量,用于保存SQL语句
String sql = null ;
// 查询返回的结果集对象
ResultSet rs = null ;
%>
<%
// 1、加载驱动程序
try {
Class.forName(DBDRIVER) ;
} catch(Exception e) {
// 此处使用out.print是处于演示目的,在实际开发中所有的错误消息,绝对不能够通过out.print打印,否则会存在安全问题
out.println("数据库驱动程序加载失败!!!") ;
}
// 2、连接数据库
try {
conn = DriverManager.getConnection(DBURL) ;
} catch(Exception e) {
out.println("数据库连接失败!!!") ;
}
// 3、操作数据库
// 通过Connection对象实例化Statement对象
try {
stmt = conn.createStatement() ;
// 编写查询的SQL语句
sql = "SELECT id,name,password,age FROM person" ;
// 查询数据库,此方法返回ResultSet对象
rs = stmt.executeQuery(sql) ;
%>
<table border="1" width="80%">
<tr>
<td>ID</td>
<td>姓名</td>
<td>密码</td>
<td>年龄</td>
</tr>
<%
while(rs.next()) {
int id = rs.getInt(1) ;
String name = rs.getString(2) ;
String password = rs.getString(3) ;
int age = rs.getInt(4) ;
%>
<tr>
<td><%=id%></td>
<td><%=name%></td>
<td><%=password%></td>
<td><%=age%></td>
</tr>
<%
}
%>
</table>
<%
} catch(Exception e) {
out.println("操作数据库失败!!!") ;
}
// 4、关闭数据库
try {
// 关闭结果集
rs.close() ;
// 关闭操作
stmt.close() ;
// 关闭连接
conn.close() ;
} catch(Exception e) {
out.println("数据库关闭失败!!!") ;
}
%>
问题:使用Statement需要一个完整的SQL语句,但如果输入的内容包含“”,会造成SQL语句不正确。
解决:使用Statement的子接口:PreparedStatement
建议:在开发中不要去使用Statenent对象,
Java代码
1.---------------------add.html----------
2.<form action="jdbcDemo05.jsp" method="post">
3.姓名:<input type="text" name="uname"><br>
4.密码:<input type="password" name="upass"><br>
5.年龄:<input type="text" name="age"><br>
6.<input type="submit" value="增加">
7.</form>
8.---------------------add.jsp---------
9.<%@ page contentType="text/html;charset=gb2312"%>
10.<%@ page import="java.sql.*"%>
11.<%!
12. // 定义数据库驱动程序
13. String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
14. // 定义数据库连接地址
15. String DBURL = "jdbc:odbc:sky" ;
16.
17. // 定义数据库连接对象,属于java.sql包中的接口
18. Connection conn = null ;
19.
20. // 定义PreapredStatement对象,用于操作数据库
21. PreparedStatement pstmt = null ;
22.
23. // 定义一字符串变量,用于保存SQL语句
24. String sql = null ;
25.%>
26.<%
27. // 接收表单参数
28. // 处理乱码
29. request.setCharacterEncoding("GB2312") ;
30. String name = request.getParameter("uname") ;
31. String password = request.getParameter("upass") ;
32. int age = 0 ;
33. try {
34. age = Integer.parseInt(request.getParameter("age")) ;
35. } catch(Exception e) {
36. }
37.
38. // 需要重新组合新的SQL语句
39. sql = "INSERT INTO person (name,password,age) VALUES (?,?,?)" ;
40.
41. // out.println(sql) ;
42.
43. // 1、加载驱动程序
44. try {
45. Class.forName(DBDRIVER) ;
46. } catch(Exception e) {
47. // 此处使用out.print是处于演示目的,在实际开发中所有的错误消息,绝对不能够通过out.print打印,否则会存在安全问题
48. out.println("数据库驱动程序加载失败!!!") ;
49. }
50.
51. // 2、连接数据库
52. try {
53. conn = DriverManager.getConnection(DBURL) ;
54. } catch(Exception e) {
55. out.println("数据库连接失败!!!") ;
56. }
57.
58. // 3、操作数据库
59. // 通过Connection对象实例化Statement对象
60. try {
61. pstmt = conn.prepareStatement(sql) ;
62. // 通过Statement对象执行此SQL语句
63. // 向变量中设置内容
64. pstmt.setString(1,name) ;
65. pstmt.setString(2,password) ;
66. pstmt.setInt(3,age) ;
67. pstmt.executeUpdate() ;
68. } catch(Exception e) {
69. out.println("操作数据库失败!!!") ;
70. }
71. // 4、关闭数据库
72. try {
73. // 关闭操作
74. pstmt.close() ;
75. // 关闭连接
76. conn.close() ;
77. } catch(Exception e) {
78. out.println("数据库关闭失败!!!") ;
79. }
80.%>