JDBC直接执行SQL语句
JavaDataBaseConnectivity(JDBC)是Java语言中用来访问数据库的API。Java程序可以使用JDBC连接到数据库,执行sql语句,并利用数据库返回数据。JDBC的重要特性之一是它可以直接执行SQL语句。本文将介绍JDBC中直接执行SQL语句的具体方法。
使用Statement接口
Statement接口是JDBC中执行静态SQL语句的主要接口,可以通过它向数据库发送SQL语句并获取结果。Statement接口使用简单,但存在一些问题。主要问题是:Statement中缺乏参数化的查询能力,不能防止SQL注入攻击等安全性问题。代码如下:
``` importjava.sql.*; publicclassUsingStatement{ publicstaticvoidmain(String[]args)throwsSQLException{ Connectionconn=DriverManager.getConnection(\"jdbc:mysql://localhost:3306/test\",\"root\",\"123456\"); Statementstmt=conn.createStatement(); Stringsql=\"SELECT*FROMuser\"; ResultSetrs=stmt.executeQuery(sql); while(rs.next()){ Stringname=rs.getString(\"name\"); intage=rs.getInt(\"age\"); System.out.println(name+\":\"+age); } } } ```使用PreparedStatement接口
PreparedStatement接口提供了参数化查询的能力,可以解决SQL注入等安全性问题。PreparedStatement使用上与Statement类似,只需要在执行之前通过set方法设置参数的值即可。例如:
``` importjava.sql.*; publicclassUsingPreparedStatement{ publicstaticvoidmain(String[]args)throwsSQLException{ Connectionconn=DriverManager.getConnection(\"jdbc:mysql://localhost:3306/test\",\"root\",\"123456\"); Stringsql=\"SELECT*FROMuserWHEREname=?\"; PreparedStatementstmt=conn.prepareStatement(sql); stmt.setString(1,\"Tom\"); ResultSetrs=stmt.executeQuery(); while(rs.next()){ Stringname=rs.getString(\"name\"); intage=rs.getInt(\"age\"); System.out.println(name+\":\"+age); } } } ```使用CallableStatement接口
CallableStatement接口用来执行存储过程,也可以用来执行动态SQL语句。它是PreparedStatement的子类,可以设置参数并获取返回值。例如:
``` importjava.sql.*; publicclassUsingCallableStatement{ publicstaticvoidmain(String[]args)throwsSQLException{ Connectionconn=DriverManager.getConnection(\"jdbc:mysql://localhost:3306/test\",\"root\",\"123456\"); Stringsql=\"{callget_user(?,?)}\"; CallableStatementstmt=conn.prepareCall(sql); stmt.setString(1,\"Tom\"); stmt.registerOutParameter(2,Types.INTEGER); stmt.execute(); intage=stmt.getInt(2); System.out.println(age); } } ```JDBC提供了多种执行SQL语句的接口,通过选择不同的接口可以满足不同的需求。需要注意的是,对于一些特殊的数据库操作,例如批处理(Batch),需要使用特殊的接口。