Java 学习之路 之 执行SQL语句的方式(五十三)

前面介绍了 JDBC 执行查询等示例程序,实际上,JDBC 不仅可以执行查询,也可以执行 DDL、DML 等 SQL 语句,从而允许通过 JDBC 最大限度地控制数据库。

1,使用 executeUpdate 方法执行 DDL 和 DML 语句

Statement 提供了 3 个方法来执行 SQL 语句,前面已经介绍了使用 executeQuery() 来执行查询语句,下面将介绍使用 executeUpdate() 来执行 DDL 和 DML 语句。使用 Statement 执行 DDL 和 DML 语句的步骤与执行普通查询语句的步骤基本相似,区别在于执行了 DDL 语句后返回值为 0,执行了 DML 语句后返回值为受影响的记录条数。

下面程序示范了使用 executeUpdate() 方法创建数据表。我们并没有直接把数据库连接信息写在程序里,而是使用一个 mysql.ini 文件(就是一个 properties 文件)来保存数据库连接信息,这是比较成熟的做法——当需要把应用程序从开发环境移植到生产环境时,无须修改源代码,只需要修改 mysql.ini 配置文件即可。

public class ExecuteDDL
{
	private String driver;
	private String url;
	private String user;
	private String pass;
	public void initParam(String paramFile)
		throws Exception
	{
		// 使用Properties类来加载属性文件
		Properties props = new Properties();
		props.load(new FileInputStream(paramFile));
		driver = props.getProperty("driver");
		url = props.getProperty("url");
		user = props.getProperty("user");
		pass = props.getProperty("pass");
	}
	public void createTable(String sql)throws Exception
	{
		// 加载驱动
		Class.forName(driver);
		try(
		// 获取数据库连接
		Connection conn = DriverManager.getConnection(url , user , pass);
		// 使用Connection来创建一个Statment对象
		Statement stmt = conn.createStatement())
		{
			// 执行DDL,创建数据表
			stmt.executeUpdate(sql);
		}
	}
	public static void main(String[] args) throws Exception
	{
		ExecuteDDL ed = new ExecuteDDL();
		ed.initParam("mysql.ini");
		ed.createTable("create table jdbc_test "
			+ "( jdbc_id int auto_increment primary key, " 
			+ "jdbc_name varchar(255), "
			+ "jdbc_desc text);");
		System.out.println("-----建表成功-----");
	}
}

mysql.ini 文件内容如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/select_test
user=root
pass=32147

运行上面程序,执行成功后会看到 select_test 数据库中添加了一个 jdbc_test 数据表,这表明 JDBC 执行 DDL 语句成功。

使用 executeUpdate() 执行 DML 语句与执行 DDL 语句基本相似,区别是 executeUpdate() 执行 DDL 语句后返回 0,而执行 DML 语句后返回受影响的记录条数。下面程序将会执行一条 insert 语句,这条 insert 语句会向刚刚建立的 jdbc_test 数据表中插入几条记录。因为使用了带子查询的 insert 语句,所以可以一次插入多条语句。

public class ExecuteDML
{
	private String driver;
	private String url;
	private String user;
	private String pass;

	public void initParam(String paramFile)
		throws Exception
	{
		// 使用Properties类来加载属性文件
		Properties props = new Properties();
		props.load(new FileInputStream(paramFile));
		driver = props.getProperty("driver");
		url = props.getProperty("url");
		user = props.getProperty("user");
		pass = props.getProperty("pass");
	}
	public int insertData(String sql)throws Exception
	{
		// 加载驱动
		Class.forName(driver);
		try(
			// 获取数据库连接
			Connection conn = DriverManager.getConnection(url
				, user , pass);
			// 使用Connection来创建一个Statment对象
			Statement stmt = conn.createStatement())
		{
			// 执行DML,返回受影响的记录条数
			return stmt.executeUpdate(sql);
		}
	}
	public static void main(String[] args)throws Exception
	{
		ExecuteDML ed = new ExecuteDML();
		ed.initParam("mysql.ini");
		int result = ed.insertData("insert into jdbc_test(jdbc_name,jdbc_desc)" 
			+ "select s.student_name , t.teacher_name "
			+ "from student_table s , teacher_table t "
			+ "where s.java_teacher = t.teacher_id;");
		System.out.println("--系统中共有" + result + "条记录受影响--");
	}
}

运行上面程序,执行成功将会看到 jdbc_test 数据表

Java中,我们可以使用Statement或PreparedStatement执行SQL语句。对于Statement,我们可以使用其execute()方法来执行任意的SQL语句。这个方法几乎可以执行任何类型的SQL语句,并且执行不同的SQL语句会产生不同的输出结果。 然而,通常情况下我们更倾向于使用executeQuery()方法或executeUpdate()方法来执行SQL语句,这两个方法更为简单。executeQuery()方法用于执行查询语句,并返回一个ResultSet对象,该对象包含了查询结果的数据。而executeUpdate()方法用于执行更新语句,如插入、更新或删除数据,并返回受影响的行数。如果我们不清楚SQL语句的类型,那么只能使用execute()方法来执行SQL语句了。 另外,PreparedStatement也是执行SQL语句的一种方式。它提供了execute()、executeUpdate()和executeQuery()三个方法,与Statement类似,但这三个方法不需要传入参数,因为PreparedStatement已经预编译了SQL语句。 总结起来,Java可以使用Statementexecute()方法、executeQuery()方法或executeUpdate()方法来执行SQL语句,而PreparedStatement也提供了相应的方法来执行预编译的SQL语句。具体使用哪个方法取决于我们的需求和对SQL语句类型的了解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java 学习之路执行SQL语句方式五十三)](https://blog.csdn.net/sym900728/article/details/41823497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值