JDBC 基本使用方法 2016-07-15 | jdbc | 知识点 文章目录 前言MySQL 的安装创建一张表eclipse的安装JDBC 的初步实现JDBC 的代码重构JDBC 的查询JDBC 的预编译语句实现最后一段 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(); } // 定义数据库URL 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"); // 创建 Statement 语句 st = con.createStatement(); // 执行 SQL 语句 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。文件内容如下 # MySQLdriver = com.mysql.jdbc.Driverurl = jdbc:mysql://localhost:3306/jbdc?useUnicode=true&characterEncoding=utf-8username = rootpassword = root 这个是 MySQL 数据库的配置文件。如果用的是 Oracle 数据库,则配置文件如下 #Oracledriver = oracle.jdbc.driver.OracleDriverurl = jdbc:oracle:thin:@localhost:1521:orclusername = scottpassword = 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(); // executeQuery 有一个返回值 ResultSet rs = st.executeQuery("select * from stu"); // 处理结果集,取出数据 // 先判断有没有数据,如果有再去数据 while (rs.next()) { // 按列取,用 get XXX方法,同事需要指定列名(有别名,按别名取) 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 (?, ?, ?)"); // 执行之前需要将 ? 设值, 有几个 ? 就需要设值几个值 // 使用 setXXX 设值, setXXX 方法需要两个参数,一个是需要代表第几个 ? ,从1开始,第二个是代表值 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(); // 以后建议使用 PreparedStatement 执行 SQL 语句 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { JDBCUtil.closeResource(st, con); } }} 最后一段 以上就是 JDBC 配置的全部过程及简单的应用,相信在将来的 JavaWeb 开发中一定会用到其中的知识。 说说东软学校吧 东软老师真的很不错,很负责,也很耐心,遇到的一些问题向老师提问都会很快得到详细的解释,这样的教学方式非常值得大学老师的学习。 如果你们学校也组织来东软实训的话,我作为过来人也给出几条建议吧 记得带网线!!!来这之前还一直担心没有网怎么熬过这个月,不过在贴吧里有很多卖账号的东软学生,比在外面办无线网卡合适多了。不过光用无线的话网速太慢,下载顶多200K,有网线的话轻松到1M。 如果是在东软A园区的话是没有独立卫浴的。