这里列举了使用JDBC操作数据库时我对各个语句理解的意思,如有错误请指正。
目录
碰到的null
Connection conn = null;
PreparedStatement ptst = null;
ResultSet rs = null;
if (rs != null) {rs.close();}
编码问题
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
驱动连接问题
Class.forName(driver);
conn = DriverManager.getConnection(url,user,password);
conn = new ConnectionMethod().ConnectionGet();
文本问题
e.printStackTrace();
PrintWriter out = response.getWriter();
异常
SQLException e
Statement对象的使用
Statement
st = conn.createStatement();
rs = st.executeQuery(selectUsername);
ptst = (PreparedStatement)
conn.prepareStatement(selectPassword);
ptst.setString(1, loginName);
rs = ptst.executeQuery();
passwordList.add(rs.getString(1));
强制刷新
flush();
碰到的null
Connection conn = null;
或
PreparedStatement ptst = null;
是使用懒加载减少内存浪费。就是等到它们没被使用时,java垃圾回收机制能将该部分内存释放
ResultSet rs = null;
- 这句话一般声明在try catch块外,然后再在try catch块里面初始化
- 声明在外边是为了可以在最后关闭rs,完成资源释放。
if (rs != null) {rs.close();}
这句话一般放在后面,是因为数据库资源允许的并发访问连接数量有限,因此,当数据库资源使用完毕后,一定要释放资源。每一次查询后要关闭rs,不然连接数据库时就会报错。
编码问题
request.setCharacterEncoding("UTF-8");
设置请求编码
response.setContentType("text/html;charset=UTF-8");
设置响应方式和编码
驱动连接问题
Class.forName(driver);
- 是使用纯java驱动连接mysql数据库,加载驱动程序到java解释器中。根本目的就是为了调用DriverManager.registerDriver,加载要连接数据库的驱动程序。
- 一般在后面会写一个ClassNotFoundException e的异常类,这个是在运行时找不到所需的类的异常,也就是如果Class.forName(driver);找不到相关驱动,该异常类就会报异常。
conn = DriverManager.getConnection(url,user,password);
- 是DriverManager类跟踪已注册的驱动程序,通过getConnection(URL)方法, 找到一个能够连接至URL中指定的数据库驱动程序。
conn = new ConnectionMethod().ConnectionGet();
- 即调用ConnectionMethod类的ConnectionGet()方法,从而获取与数据库的链接,一般写在一个Servlet里,这样就可以调用外面的连接类。
- ConnectionMethod类你也可以改名成其他的,只是我这里写成这个名字。
文本问题
e.printStackTrace();
经常出现在异常类中,是在命令行打印异常信息在程序中出错的位置及原因。
PrintWriter out = response.getWriter();
- out是一个PrintWriter对象,该对象可以将字符文本返回给客户端。
- 这个字符打印流使用返回的字符编码getCharacterEncoding()。如果响应的字符编码没被指定,也就是获取编写器会将编码格式确定为默认返回的ISO-8859-1编码格式。
- 如果发生输入或输出异常会被java.io.IOException捕获
异常
SQLException e
实例化SQLException类型的对象,当try块出现异常时就捕捉异常并做响应的处理。
Statement对象的使用
Statement
是 Java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。
st = conn.createStatement();
是用createStatement()创建一个 Statement 对象,为了将下面传入的 SQL 语句发送到数据库
rs = st.executeQuery(selectUsername);
这里的selectUsername是我写的一个String类型的sql语句,发送该sql语句到数据库后执行,后从数据库返回得到结果集rs。
ptst = (PreparedStatement)
conn.prepareStatement(selectPassword);
- 这里的selectPassword是我写的一个String类型的sql语句,prepareStatement()会将我的该条SQL语句发送给数据库预编译,PreparedStatement会引用着预编译后的结果,这个结果就是ptst
- 可以给PreparedStatement对象多次传入不同的参数并执行。
- 使用该方法可以减少SQL编译次数,提高效率。
- 使用该方法安全性更高,没有SQL注入的隐患。
ptst.setString(1, loginName);
设置ptst参数,即为第一个参数设置一个string 类型的值,设置的值为loginName。
rs = ptst.executeQuery();
使用java环境自带的执行查询的方法executeQuery()查询当前loginName下的内容,返回ResultSet 集合rs
passwordList.add(rs.getString(1));
是获取结果集中第一列的数据。如果你写成2就是获取第二列的数据。
强制刷新
flush();
- 英文名是刷新的意思,它可以提交PrintWriter的响应。
- IO流也有缓冲区这种东西,对于输出,较短的字符序列格式化之后并不马上输出,而是保存在缓冲区里,待累积到一定规模之后再传递到外部设备。而flush() 是要求立即将缓冲区的数据输出到接收方,从而清空缓冲区,也就是强制刷新。这样做可以防止没有调用flush();就直接调用close()方法关闭读写流而造成的数据丢失。
JDBC确实有很多需要学习的地方,需要不断钻研不断学习。