JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。其优点是不论使用何种数据库,只需要更改配置文件即可。
前言
2016-07-10学校组织来大连东软实训,我选择的是 JavaWeb 方向,经过20天的学习收获还是蛮大的。第一个知识点是 jdbc 。为了留点纪念,所以想把老师讲的知识全部复述一下,可以说是详细版教程。
在东软,老师把 MySQL 和 Oracle 的使用方法都介绍了,但是由于 Oracle 过大,占内存,卸载不干净,所以在这里只介绍 MySQL 数据库的操作。
MySQL 的安装
首先到官网下载 MySQL 的数据库,和MySQL Workbench 的数据库操作界面。Windows 版的在安装时记得在填写密码时一定要记住,并且选择 utf-8
编码。mac 版的安装很简单,但是在创建数据库的时候记得填写密码,否则会生成临时密码,如果当时没有记住临时密码就惨了。
然后在 MySQL 上新建一个数据库,并在空白区域右键 create schema
。
创建一张表
当然 JDBC 是需要掌握 SQL 语句的一般语法。
使用 JDBC 的话一般只进行增加(insert)
,删除(delete)
,修改(update)
,查询(select)
等操作而很少进行 创建(create)
操作,所以现在需要手动创建一张表。
CREATE TABLE stu ( stu_no INT(20), stu_name VARCHAR(20) NOT NULL, stu_tel VARCHAR(15), CONSTRAINT pk_stu_no PRIMARY KEY (stu_no), CONSTRAINT uk_stu_tel UNIQUE KEY (stu_tel) );
|
这里以学生表为例。
eclipse的安装
在东软老师推荐用 MyEclipse ,因为将来的 JavaWeb 需要各种插件。但是 MyEclipse 需要花钱买,否则需要破解。破解网上教程太多,就不举例了。
而 eclipse 是开源免费的。如果只用 JDBC 的话 eclipse 完全足够。这里给出官网下载地址。
注意选择 Java EE
版本,并可以选择中国镜像,下载速度更快。
JDBC 的初步实现
用 eclipse 新建一个 java project 起名为 jdbc
在工程下新建文件夹,命名为 lib ,将MySQL 的驱动文件复制到该文件夹,并右键 Build Path -> Add to Build Path 。这时发现在工程里出现 Referenced Libraries ,里面有和刚才同名的 jar 文件。
在 src 中新建一个包。由于包的名字一般由公司域名倒置构成,所以我起名为 com.xunge.jdbc
在包中新建一个类,类名为 JDBCDemo
, 并录入以下代码。
package com.xunge.jdbc;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;
public class JDBCDemo { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8"; Connection con = null; Statement st = null; try { con = DriverManager.getConnection(url, "root", "root"); st = con.createStatement(); int result = st.executeUpdate("insert into stu values(2014201106,'jiangxunzhi','13654505793')"); System.out.println(result + "行数已更新"); } catch (SQLException e) { e.printStackTrace(); } finally { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
|
代码中的 try catch
和 导的包是用 eclipse 自动提示添加的。
上面的代码用 executeUpdate 方法,可以进行 增加(insert)
, 删除(delete)
, 修改(update)
操作,返回的是更新数据的行数。而 查询(select)
语句需要用 executeQuery 方法。
JDBC 的代码重构
然而这个代码如果多次执行的话重复的代码过多,需要进行代码复用。现在可以看到的是 连接数据库 和 删除数据库 代码是不变的,可以进行代码复用。
方法是:
1.在 src 新建一个包,包名为 com.xunge.jdbc.common
。
2.在该包下新建一个文件,文件名为 dbmysql.properties
。文件内容如下
driver = com.mysql.jdbc.Driver url = jdbc:mysql://localhost:3306/jbdc?useUnicode=true&characterEncoding=utf-8 username = root password = root
|
这个是 MySQL 数据库的配置文件。如果用的是 Oracle 数据库,则配置文件如下
driver = oracle.jdbc.driver.OracleDriver url = jdbc:oracle:thin:@localhost:1521:orcl username = scott password = tiger
|
properties 文件为配置文件。
2.在该包下新建一个类,类名为 JDBCUtil
,作为 JDBC 的工具类,内容如下。
package com.xunge.jdbc.common;
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;
public class JDBCUtil { private static String driverClass; private static String dbUrl; private static String userName; private static String passWord; static { Properties p = new Properties(); try { p.load(JDBCUtil.class.getResourceAsStream("db.properties")); } catch (IOException e1) { e1.printStackTrace(); } driverClass = p.getProperty("driver"); dbUrl = p.getProperty("url"); userName = p.getProperty("username"); passWord = p.getProperty("password"); try { Class.forName(driverClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() { Connection con = null; try { con = DriverManager.getConnection(dbUrl, userName, passWord); } catch (SQLException e) { e.printStackTrace(); } return con; } public static void closeResource(Statement st, Connection con) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void closeResource(ResultSet rs, Statement st, Connection con) { try { rs.close(); } catch (SQLException e1) { e1.printStackTrace(); } try { st.close(); } catch (SQLException e) { e.printStackTrace(); } try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }
|
之后就可以引用工具类里的函数将 JDBC 实现出来。
JDBC 的查询
由上文知 增加(insert)
, 删除(delete)
, 修改(update)
操作用 executeUpdate 方法,返回的是更新数据的行数。
而 查询(select)
操作需要用 executeQuery 方法,需要用 executeQuery 方法,用 ResultSet 接收数据并输出。
package com.xunge.jdbc;
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
import com.xunge.jdbc.common.JDBCUtil;
public class JDBCDemo_select {
public static void main(String[] args) { Connection con = null; Statement st = null; ResultSet rs = null; con = JDBCUtil.getConnection(); try { st = con.createStatement(); rs = st.executeQuery("select * from stu"); while (rs.next()) { int stu_no = rs.getInt("stu_no"); String stu_name = rs.getString("stu_name"); String stu_tel = rs.getString("stu_tel"); System.out.println(stu_no + "\t" + stu_name + "\t" + stu_tel); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.closeResource(rs, st, con); } } }
|
JDBC 的预编译语句实现
这里介绍一下 预编译语句。预编译语句 的优点是 如果遇到两条 SQL 语句除了几个参数不同,其他不变的话(尤其是插入语句!!),用 预编译语句 是再合适不过的啦。预编译不仅运行更快,而且写起来也方便很多。
package com.xunge.jdbc;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException;
import com.xunge.jdbc.common.JDBCUtil;
public class JDBCDemo_gai { public static void main(String[] args) { Connection con = null; PreparedStatement st = null; con = JDBCUtil.getConnection(); try { st = con.prepareStatement("insert into stu values (?, ?, ?)"); st.setInt(1, 2014201106); st.setString(2, "jiangxunzhi"); st.setString(3, "13654505797"); st.executeUpdate();
st.setInt(1, 2014201105); st.setString(2, "gongyuxin"); st.setString(3, "13654505796"); st.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.closeResource(st, con); } } }
|
最后一段
以上就是 JDBC 配置的全部过程及简单的应用,相信在将来的 JavaWeb 开发中一定会用到其中的知识。
说说东软学校吧
东软老师真的很不错,很负责,也很耐心,遇到的一些问题向老师提问都会很快得到详细的解释,这样的教学方式非常值得大学老师的学习。
如果你们学校也组织来东软实训的话,我作为过来人也给出几条建议吧
- 记得带网线!!!来这之前还一直担心没有网怎么熬过这个月,不过在贴吧里有很多卖账号的东软学生,比在外面办无线网卡合适多了。不过光用无线的话网速太慢,下载顶多200K,有网线的话轻松到1M。
- 如果是在东软A园区的话是没有独立卫浴的。