阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第38章:PreparedStatement数据库操作接口:课时161:Statement问题分析

既然java.sql包里面提供有Statement接口可以实现数据库的操作,那么为什么又要提供一个PreparedStatement接口实现数据库的操作呢?

Statement接口操作的问题

下面就以更新操作为例,在Statement接口中如果想要执行SQL语句,那么一定要通过字符串实现SQL结构的定义,但是这种定义如果要结合到用户输入数据的情况下就有可能会有问题存在了,下面通过一个程序做一个简单的模拟。
范例:Statement接口操作问题

package cn.mldn.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JDBCDemo {
	private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:mldn";
	private static final String DATABASE_USER = "scott";
	private static final String DATABASE_PASSWORD = "tiger";
	public static void main(String[] args) throws Exception{
		String title = "MLDN新闻'老李写的"; // 问题
		int read = 99;
		double price = 99.8;
		String content = "这个春天有点冷";
		String pubdate = "1971-04-10"; // 问题1:日期使用了字符串描述
		String sql = "INSERT INTO news(nid,title,read,price,content,pubdate) VALUES "
		+ " (news_seq.nextval,'"+title+"',"+read+","+price+", "
		+ " '"+content+"',TO_DATE('"+pubdate+"','yyyy-mm-dd'))"; // 问题二:维护困难
		System.out.println(sql);
		Connection conn = null;  //每一个Connection接口对象描述的就是一个用户连接
		Class.forName(DATABASE_DRIVER); //向容器之中加载数据库驱动程序
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stmt = conn.createStatement(); // 创建数据库的操作对象
		int count = stmt.executeUpdate(sql); // 返回影响的行数
		System.out.println("更新操作影响的数据行数:" + count);
		conn.close();  //数据库的连接资源有限一定要关闭
	}
}
INSERT INTO news(nid,title,read,price,content,pubdate) VALUES (news_seq.nextval,'MLDN新闻'老李写的',99,99.8,'这个春天有点冷',TO_DATE('1971-04-10','yyyy-mm-dd'))

利用Statement执行的SQL语句问题有如下三种:
1、不能很好的描述出日期的形式;
2、需要进行SQL语句的拼凑处理,而导致的结果就是:SQL语句的编写与维护困难;
3、对于一些敏感的字符数据无法进行合理拼凑;

所以,现在就可以发现,虽然Statement可以操作数据库,但是其在操作的过程中并不是那么的方便,而它最大的弊端:需要进行SQL语句的拼凑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值