package com.enhance.jdbc;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class PreparedStatementTest {
private String driver;
private String url;
private String user;
private String pass;
private Statement stmt;
private ResultSet rs;
private PreparedStatement pstmt;
public void initParam(String paramFile) throws Exception{
Properties prop=new Properties();
prop.load(new FileInputStream(paramFile));
driver=prop.getProperty("driver");
url=prop.getProperty("url");
user=prop.getProperty("user");
pass=prop.getProperty("pass");
}
public Connection getConnection() throws ClassNotFoundException, SQLException{
Class.forName(driver);
return DriverManager.getConnection(url,user,pass);
}
public void executeDmlAndDdlUseStmt()throws Exception{
long start=System.currentTimeMillis();
Connection conn=null;
try {
conn=getConnection();
stmt=conn.createStatement();
for (int i = 0; i < 1000; i++) {
stmt.executeUpdate("insert into my_test (test_name)"
+ " values('姓名"+i+"')");
}
System.out.println("使用Statement费时:"+(System.currentTimeMillis()-start));
}finally{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
}
}
public void executeDmlAndDdlUsePstmt()throws Exception{
long start=System.currentTimeMillis();
Connection conn=null;
try {
conn=getConnection();
pstmt=conn.prepareStatement("insert into my_test (test_name) values(?)");
for (int i = 0; i < 1000; i++) {
pstmt.setString(1, "姓名2"+i);
pstmt.executeUpdate();
}
System.out.println("使用PreparedStatement费时:"+(System.currentTimeMillis()-start));
}finally{
if(rs!=null)
rs.close();
if(pstmt!=null)
pstmt.close();
if(conn!=null)
conn.close();
}
}
/**
* 创建存储过程
* delimiter //
* create or replace procedure(a int,b int,out sum int)
* begin
* set sum=a+b;
* end;
* //
*/
public void callProcedure() throws Exception{
try {
Class.forName(driver);
conn=DriverManager.getConnection(url,user,pass);
cstmt=conn.prepareCall("{call add_proc(?,?,?)}");
cstmt.setInt(1, 4);
cstmt.setInt(2, 5);
//注册 输出参数
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.execute();
System.out.println("执行结果是:"+cstmt.getInt(3));
}finally{
if(cstmt!=null)
cstmt.close();
if(conn!=null)
conn.close();
}
}
public static void main(String[] args) throws Exception{
PreparedStatementTest pst=new PreparedStatementTest();
pst.initParam("src/mysql.ini");
pst.executeDmlAndDdlUseStmt();
pst.executeDmlAndDdlUsePstmt();
}
}
分享到:
相关推荐
Statement和PreparedStatement之间的区别 Statement和PreparedStatement是JDBC中的两种不同的语句对象,用于执行数据库操作。虽然它们都可以执行SQL语句,但是它们之间存在着很大的区别。 首先, Statement对象...
Java 中 PreparedStatement 和 Statement 的区别 Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 ...
在Java的JDBC(Java Database Connectivity)中,与数据库交互的核心接口是Statement和PreparedStatement。这两个接口都是用于执行SQL语句的,但它们在特性和效率上有所不同。 Statement接口是最基本的SQL执行方式...
其中,Statement和PreparedStatement是两种常用的SQL语句执行接口。在理解和掌握它们之间的区别之前,我们需要首先了解JDBC对于数据库操作的基本概念。 JDBC的主要作用是提供了一套标准的API,使得Java程序能够连接...
在Java编程中,数据库操作是常见任务之一,而`PreparedStatement`和`Statement`是Java JDBC(Java Database Connectivity)中用于执行SQL语句的两种主要接口。它们都是`java.sql`包下的类,用来与数据库进行交互,但...
正确地选择`Statement`和`PreparedStatement`以及适时地关闭它们对于保证应用程序的性能和稳定性至关重要。理解它们之间的区别,并根据实际需求选择合适的方法,能够显著提升应用的质量。同时,合理管理`Connection`...
prepareStatement和Statement的区别 prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要...
首先我们设计Connection接口的代理类_Connection,这个代理类接管了Connection接口中所有可能获取到Statement或者PreparedStatement接口实例的方法,例如:prepareStatement和createStatement。改变这两个方法使之...
`PreparedStatement`是`Statement`接口的子接口,用于预编译SQL语句,并可以重复执行这些预编译过的SQL语句。这不仅能够提高应用程序的性能,还能提高安全性,因为它支持参数化查询,避免了SQL注入的风险。 #### 二...
一种可能的方法是通过日志配置,例如,启用MySQL的`Statement`和`PreparedStatement`日志,这样在执行时会打印出详细的SQL语句。 另外,开发工具如IntelliJ IDEA、Eclipse等,或者数据库管理工具如MySQL Workbench...
Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询...3.SQL注入问题与解决(Statement 、PreparedStatement) 3.1.模拟SQL注入 3.2.PreparedStatement解决 3.3.Statement 与 PreparedStatement 4.完整源码
在这个例子中,首先定义了一个包含占位符的SQL语句,接着通过`connection`对象的`prepareStatement`方法创建`PreparedStatement`实例,然后通过`setInt`和`setString`方法设置参数值,最后调用`executeQuery`方法...
这篇博客的下篇主要讨论了如何在关闭Connection时自动关闭Statement和ResultSet,以确保资源的有效释放,防止内存泄漏。以下是对这个主题的详细解释。 首先,我们需要理解数据库连接、Statement和ResultSet在JDBC中...
在Java编程中,PreparedStatement是Java SQL API中的一个接口,它是Statement接口的子接口。这个练习主要涉及如何使用PreparedStatement来插入宠物信息到数据库中。PreparedStatement的主要优势在于它的预编译能力和...
6. **关闭资源**:操作完成后,记得关闭ResultSet、Statement和Connection,以释放系统资源。 在项目开发中,`.classpath`和`.project`文件是Eclipse IDE的配置文件,它们定义了项目的构建路径和项目元数据。`bin`...
`PreparedStatement`是Java数据库连接(JDBC)API中的一种重要接口,它继承自`Statement`接口,并在其基础上进行了扩展和优化。`PreparedStatement`的主要特点在于它可以预先编译SQL语句,并允许用户在执行前动态地...
jdbc中preparedStatement比Statement的好处
在Java编程语言中,`PreparedStatement`是`java.sql`包中的一个接口,它继承自`Statement`类,并提供了预编译SQL语句的功能。预编译SQL语句的主要优势在于提高了执行效率和安全性。尤其在处理动态查询或频繁执行相同...
6. 处理ResultSet,如果有的话,然后依次关闭ResultSet、Statement和Connection,释放资源。 在实际开发中,为了更好地管理和处理异常,通常会采用try-catch-finally结构来封装这些步骤,确保资源得到正确释放。...