在 Java 中,我们可以使用 JDBC(Java Database Connectivity)来连接、查询和操作关系型数据库。以下是一个详细的指南,展示如何进行基本的数据库操作,包括连接到 MySQL 服务器、执行 SQL 语句以及预处理数据。
数据库操作的基本步骤: 1. 导入必要的包
2. 定义一个主类来初始化和测试数据库操作 基本的数据库连接与查询: 首先,我们定义一些基本的变量用于存储数据库的信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 public class DataBasePractice { public static void main (String[] args) { Connection con = null ; String driver = "com.mysql.jdbc.Driver" ; String url = "jdbc:mysql://localhost:3306/mydata" ; String user = "root" ; String password = "root" ; try { Class.forName(driver); con = DriverManager.getConnection(url, user, password); if (!con.isClosed()) System.out.println("Succeeded connecting to the Database!" ); Statement statement = con.createStatement(); ResultSet rs = statement.executeQuery("select * from student" ); String name, id; while (rs.next()){ name = rs.getString("stuname" ).trim(); id = rs.getString("stuid" ).trim(); name = new String (name.getBytes("ISO-8859-1" ), "gb2312" ); System.out.println(id + "\t" + name); } } catch (ClassNotFoundException e) { System.out.println("Sorry, can't find the Driver!" ); e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (con != null ) con.close(); }catch (SQLException se){ se.printStackTrace(); } System.out.println("数据库数据成功获取!!" ); } } }
3. 使用PreparedStatement
进行预处理操作 插入、更新和删除数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 try { PreparedStatement psql = con.prepareStatement("insert into student values(?,?)" ); psql.setInt(1 , 8 ); psql.setString(2 , "xiaogang" ); psql.executeUpdate(); psql = con.prepareStatement("update student set stuname = ? where stuid = ?" ); psql.setString(1 ,"xiaowang" ); psql.setInt(2 , 10 ); psql.executeUpdate(); psql = con.prepareStatement("delete from student where stuid = ?" ); psql.setInt(1 , 5 ); psql.executeUpdate(); System.out.println("执行增加、修改、删除后的数据" ); res = psql.executeQuery(); while (res.next()){ name = res.getString("stuname" ).trim(); id = res.getString("stuid" ).trim(); name = new String (name.getBytes("ISO-8859-1" ), "gb2312" ); System.out.println(id + "\t" + name); } } catch (SQLException e) { e.printStackTrace(); }
环境准备 数据库配置属性文件db.properties
该配置文件中包含必要的数据库连接参数,如驱动名称、URL 地址等。
1 2 3 4 5 6 7 8 9 10 11 driver =oracle.jdbc.driver.OracleDriver url =jdbc:oracle:thin:@localhost:1521:vill username =vill password =villvill
实用工具类DBUtil.java
该类提供了一个静态的数据库连接获取方法,并在程序结束时关闭所有数据库相关资源(如连接、语句等)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.Properties;public class DBUtil { private static String driver, url, user, pwd; static { try { Properties properties = new Properties (); properties.load(DBUtil.class.getClassLoader().getResourceAsStream("vill/util/db.properties" )); driver = properties.getProperty("driver" ); url = properties.getProperty("url" ); user = properties.getProperty("username" ); pwd = properties.getProperty("password" ); } catch (IOException e) { e.printStackTrace(); } } public static Connection getConnection () throws Exception{ Class.forName(driver); return DriverManager.getConnection(url, user, pwd); } public static void closeConnection (Connection conn, Statement stm, ResultSet rs) { try { if (conn != null ) conn.close(); if (stm != null ) stm.close(); if (rs != null ) rs.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main (String[] args) { try { System.out.println(new DBUtil ().getConnection().getClass().getName()); } catch (Exception e) { e.printStackTrace(); } } }
实现解析
配置文件读取
利用Properties
类从资源路径中加载并解析.properties
格式的属性文件,从而得到数据库连接所需的驱动和 URL 等参数。
数据库连接获取方法
getConnection()
:首先通过反射机制动态地注册数据库驱动(如 Oracle 或 MySQL),然后使用这些配置信息建立与数据库的实际连接。
资源管理
为了防止内存泄漏,closeConnection()
提供了关闭数据库操作过程中可能打开的多种类型对象的功能。这包括但不限于ResultSet
, Statement
以及最后是Connection
本身。
异常处理
在getConnection()
和closeConnection()
方法中均存在捕获并打印错误信息的机制。这样可以确保即使在资源释放失败的情况下,程序也能继续执行,并且开发者能明确看到问题发生的位置。
注意事项
确保你的项目包含了所使用的 JDBC 驱动库(例如 Oracle 或 MySQL 的 JDBC jar 文件)。
配置文件db.properties
应放置于项目的类路径中,以便通过ClassLoader.getResourceAsStream()
正确加载。
建议使用 try-with-resources 语句来简化资源管理和异常处理逻辑。