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();

不用我多说,对于第一种方法.别说其他人去读你的代码,就是你自己过一段时间再去读,都会觉得伤心.
下面将给出一个完整的访问数据库的例子。

0 0
原创粉丝点击