Java的数据库编程之入门案例

通过上一篇博客Java的数据库编程之背景概述,可以得出:

1、JDBC API与驱动器管理器是有SUN公司制定并退出的;

2、每个数据库的驱动器程序是由每个数据库开发商以及数据库工具开发商在遵循SUN公司提出的标准的基础上实现并提出的;

3、由于JDBC API与驱动器管理器沟通,驱动器管理器通过各种数据库驱动与数据库通信,所以对于开发人员来说只要使用好JDBC API就可以;

=>我们需要学习JDBC API以及去找对应的数据库开发商搞一个数据库驱动器程序,一般来说使用JDBC有如下几个关键步骤(数据库对象创建及SQL使用不在此讲解范围内):

  1. 获取驱动程序Jar文件,并放置到项目的类路径中;
  2. 注册驱动器类;
  3. 获取数据库连接;
  4. 获取Statement对象来执行相关SQL操作;
  5. 关闭各种资源;
那么接下来,通过一个简单的例子来认识下这个过程:
a)首先看一下项目结构,需要建一个TestDB.java文件(用来编写程序)和一个database.properties文件(用来配置数据库连接信息):
b)上TestDB.java代码,该类的主要功能是将database.properties文件中配置的数据库连接信息加载到Properties对象中,然后利用这些配置信息,获取数据库连接,然后利用该连接做创建一个表、插入数据、展示插入的数据和最后删除表的操作!代码如下:
package test.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import com.mysql.jdbc.Driver;

/*
 * 这个程序用来测试数据库和JDBC驱动器是否被正确配置和使用;
 */
public class TestDB {

	public static void main(String[] args) throws IOException {
		try {
			runTest();
		} catch (SQLException e) {
			for (Throwable t : e) {
				t.printStackTrace();
			}
		}
	}

	/*
	 * 运行一个测试程序,用来创建一个表、插入一个值、展示表中的内容、移除表
	 */
	public static void runTest() throws SQLException, IOException {
		try (Connection conn = getConnection()) {
			Statement stat = conn.createStatement();
			stat.executeUpdate("CREATE TABLE Greetings(Message CHAR(20))");
			stat.executeUpdate("INSERT INTO Greetings VALUES('Hello, World!')");
			try (ResultSet rs = stat.executeQuery("SELECT * FROM Greetings")) {
				while (rs.next()) {
					System.out.println(rs.getString(1));
				}
			}
			stat.executeUpdate("DROP TABLE Greetings");
		}
	}

	/*
	 * 从指定的database.properties文件中获取数据库连接
	 * 
	 * @return 对应的数据库连接
	 */
	public static Connection getConnection() throws IOException, SQLException {

		Properties props = new Properties();
		// 从database.properties文件中加载数据库连接信息
		try (InputStream in = Files.newInputStream(Paths.get("src/database.properties"))) {
			props.load(in);
		}

		String driver = props.getProperty("jdbc.driver");
		String url = props.getProperty("jdbc.url");
		String username = props.getProperty("jdbc.username");
		String password = props.getProperty("jdbc.password");

		// 注册MySql驱动器程序
		if (driver != null) {
			System.setProperty("jdbc.drivers", driver);
		} else {
			DriverManager.registerDriver(new Driver());
		}

		// 获取数据库连接
		return DriverManager.getConnection(url, username, password);
	}
}
右键运行后,结果如下:

下面就几个要点说一下:
1、在执行SQL命令之前,首先需要创建一个Statement对象,该对象通过Connection对象(该对象通过DriverManager.getConnection()方法获得)获取,Statement对象相当于一个在当前连接上的SQL执行器可以通过调用executeUpdate()方法来执行DML和DDL操作,通过调用executeQuery()方法来执行DQL操作;
2、当调用executeQuery()方法返回的查询结果封装到一个ResultSet类型的对象中,可以通过它来遍历所有查询结果,需要注意的是ResultSet接口的迭代协议与java.util.Iterator接口稍有不同,ResultSet接口的迭代器初始化时被设定在第一行之前的位置,必须调用next方法将它地洞到第一行,另外它没有hasNext方法;当迭代器处于结果集的某行时才可以调用访问器来获取信息;
3、当ResultSet接口的迭代器处于结果集的某行时,我们就可以针对不同的类型使用不同的访问器,比如获取的结果集中某字段是varchar类型,那么在Java中可以采用getString访问器去获取当前行的列信息,比如
SELECT employee_name,salary FROM sl_employee; 用获取employee_name信息,我们既可以通过getString("employee_name")也可以通过getString(1)的方式去获取,前者直接通过字段名,后者根据要获取的列在当前结果集中属于第几列来获取,这两种方式的区别是使用数字型参数效率更高一些,但是使用字符串参数可以使代码易于阅读和维护。最后需要注意的是当get方法的类型和列的数据类型不一致时,每个get方法都会进行合理的类型转换;
好了,就说这么多吧,后续会讲解更多的关于JDBC的内容!

猜你喜欢

转载自blog.csdn.net/yu102655/article/details/55189923