Java数据库连接(JDBC)之二:Statement对象和PreparedStatement对象的使用
来源:互联网 发布:绝地求生 技巧 知乎 编辑:程序博客网 时间:2024/05/21 11:30
1,Statement对象是Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。
Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行SQL语句的包容器: Statement 对象用于执行不带参数的简单SQL语句;
PreparedStatement(它从 Statement 继承而来)用于执行带或不带 IN 参数的预编译 SQL 语句;
CallableStatement(它从 PreparedStatement 继承而来)CallableStatement 对象用于执行对数据库已存在的存储过程的调用。它们都专用于发送特定类型的 SQL 语句。
上文中
Statement stmt = con.createStatement();//Statement对象实例ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");//执行SQL语句,并把结果集放在ResultSet对象中while (rs.next()) { //对结果集进行遍历 int x = rs.getInt("a"); //获得字段a的值 String s = rs.getString("b"); float f = rs.getFloat("c");}
第一步:创建Statement对象实例stmt后,调用该对象的executeQuery(sql)方法执行参数sql语句;当然,Statement对象还有很多方法,如executeUpdate(String sql);
第二步:根据sql语句执行查询语句后,得出的是一个结果集或者说还是一张表,放在ResultSet 的对象rs中
第三步:循环遍历结果集rs,rs.next()方法每次指向结果集的一项记录或者说是一栏,循环体中调用get方法如rs.getString(“b”);参数是表的字段名。就可得到该字段中的值
2,该 PreparedStatement接口继承Statement,并与之在两方面有所不同:
PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。
由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
通过使用java.sql.preparedstatement,这个问题可以自动解决。一个preparedstatement是从java.sql.connection对象和所提供的sql字符串得到的,sql字符串中包含问号(?),这些问号标明变量的位置,然后提供变量的值,最后执行语句,例如:
string sql = "select * from people where id = ? and name = ?";//先定义要执行的sql语句ps.setint(1,id);// 设置问号里的变量值ps.setstring(2,name);PreparedStatement ps = connection.prepareStatement(sql);Resultset rs = ps.executequery();while(rs.next()){ String u=rs.getString("id"); String p=rs.getString("name"); }
使用preparedstatement的另一个优点是字符串不是动态创建的.
PreparedStatement对象较Statement对象有很好代码的可读性和可维护性:比如
stmt.executeUpdate("insertintotb_name(col1,col2,col2,col4)values('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");
perstmt=con.prepareStatement("insertintotb_name(col1,col2,col2,col4)values(?,?,?,?)"); perstmt.setString(1,var1); perstmt.setString(2,var2); perstmt.setString(3,var3); perstmt.setString(4,var4); perstmt.executeUpdate();
不用我多说,对于第一种方法.别说其他人去读你的代码,就是你自己过一段时间再去读,都会觉得伤心.
下面将给出一个完整的访问数据库的例子。
- Java数据库连接(JDBC)之二:Statement对象和PreparedStatement对象的使用
- java操作数据库---Statement对象和preparedStatement对象的区别(二)
- PreparedStatement对象和Statement对象(二)
- JSP基础(十四)——使用JDBC的Statement对象和PreparedStatement对象对数据库进行CRUD
- jdbc中的Statement和PreparedStatement接口对象
- java中Statement对象和PreparedStatement对象
- PreparedStatement对象和Statement对象
- jdbc使用 Statement 接口实现添加数据操作(使用面向对象和数据库连接工具类)
- JDBC (二) -- Statement对象
- JDBC中操作数据库的三个对象:Statement;PreparedStatement;CallableStatement
- JDBC的预编译语言对象PreparedStatement为什么优于Statement
- JDBC的Statement和PreparedStatement
- JDBC 之 Statement 对象
- JDBC 之 Statement 对象
- PreparedStatement对象和Statement对象(一)
- java JDBC(二):Statement、ResultSet、PreparedStatement
- JAVA中JDBC的Statement和PreparedStatement之间的区别
- JDBC中Statement、PreparedStatement和CallableStatement的使用
- Bison的技术博客目录
- Ubuntu下启动Eclipse报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must
- [Ubuntu--Install]已安装软件的卸载
- 观察者模式
- Java内存区域与内存溢出
- Java数据库连接(JDBC)之二:Statement对象和PreparedStatement对象的使用
- 数组a与&a
- 树梅派2如何使用3G无线网卡(中兴ZTE,MF110)上网
- codevs1020
- [Ubuntu--System]更新管理器提示/boot空间不足
- [Ubuntu--Install]AVI视频无法播放问题
- android小记
- oracle10g卸载方法
- CSS3设计边框忽隐忽现功能