JDBC执行SQL语句:
一旦获得了链接,我们可以与数据库进行交互。JDBC Statement和PreparedStatement 接口定义了使 您能发送SQL命令并从数据库 进行接收数据的方法和属性。
1.Statement:创建语句对象
在使用Statement对象执行SQL语句之前,需要使用Connection对象的createStatement()方法来创建
在创建Statement对象后,可以使用Connection对象的createStatement()方法来执行 一个SQL语句,其中有三个执行方法
其1.boolean execute(String SQL):
如果可以检索到ResultSet对象,则返回一个布尔值true,否则,返回false;使用此方法执行SQL DDL语句或需要使用真正的动态SQL。
其2. int executeUpate(String SQL):返回受SQL语句 影响的行数。使用此方法执行预期会影响多个行的SQL语句,例如 insert、update、或delete语句
其3.Result
关闭Statement对象(如果先关闭Connection对象,她也会关闭Statement对象。但是,应始终显示关闭Statement对象,以保证正确清理)。
2.SQL 注入
就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺负服务器执行恶意的SQL语句。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在web表单输入(恶意的)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计师意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。
3.PreparedStatement
该PreparedStatement的接口扩展了Statement接口,它提供了一个通用的Statement对象有两个优点附加功能。此语句可以动态的提供参数。
关闭PreparedStatement对象。
String string="insert student values(?,?,?)";
ps=connection.prepareStatement(string);
ps.setInt(1,stu.getId());
ps.setString(2, stu.getName());
ps.setInt(3, stu.getSid());
JDBC 中的所有参数都由?表示,这被称为参数标记。在执行SQL语句之前,必须为每个参数提供值。
所述的setXXX()方法将值绑定到所述参数,其中XXX代表要绑定到输入参数的值的java数据类型。如果忘记提供值,将收到一个SQLException。
每个参数标记的由其顺序位置引用,。第一标记表示位置1,下一个位置2等等。该方法与java数组索引不同,java是从0开始。
4.ResultSet对象:
Result语句是从数据库中选择行并在结果集中查看行的标准方法。该java.sql.ResultSet中的接口表示结果集数据库查询。
ResultSet对象维护指向结果集中当前行的游标。术语“结果集”是指包含在ResultSet对象中的行和列的数据。
如果没有制定任何ResultSet类型,将自动获得一个typeforwardonly。
ResultSet.typeforwardonly 光标只能在结果集中向前移动。
ResultSet.typescrollinsensitive 光标可以向前移动和向后移动,结果集对创建结果集后发生的数据库的其他更改不敏感。
ResultSet.typescrollsensitive 光标可以向前和向后移动,结果集对创建结果集之后发生的其他数据库的其他更改敏感。
5.JDBC(java database Connection)
(1)常用API:
1.DriverManager类
public static Connection getConnection(String url,String user,String password)
//获取数据库连接对象
2.Connection(数据库连接对象)
//用增来举例
String string=“insert student values(?,?,?)”;
PreparedStatement ps=Connection.PrepareStatement(string);
//将SQL语句通过Connection对象的PrepareStatement方法传给数据库
3.PreparedStatement(表示预编译的SQL语句的对象,使用此对象操作数据库)
setInt(int ParameterIndex,int x)//将指定参数设置为给定java的int值
//注意:parameterIndex第一个参数是1
setFloat(int parameterIndex,float x)
setDouble(int parameeterIndex,double x)
int executeUpdate()//执行增、删、改操作。返回:影响表中记录的行数
ResultSet executeQuery()//执行查询操作 返回:ResultSet结果集
void close()//关闭操作对象
4.ResultSet (表示 结果集的数据表)
boolean next() //将光标从当前位置向下移一行。ResultSet光标最初位于第一行之前;
//返回:如果新的当前行有效,则返回true
通过结果集的列标签获取值
int getInt(String columnLable)
String getString(String columnLable)
double getDouble(String columnLable)
Class.forName("org.gjt.mm.mysql.driver");//加载驱动程序
connection =DriverManager,getConnection("url","user","password");
5.JDBC操作数据库的具体步骤:以在student表中增加一列为例
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.mysql.jdbc.Connection;
public class stuUtil {//创建增删改查
private static Connection connection=null;
//该对象表示与数据库之间的物理连接
private static PreparedStatement ps=null;//创建一个对象
//创建一个方法专门来获取链接
public static Connection getConnection() {
//先加载驱动
try {
Class.forName("org.gjt.mm.mysql.Driver");
//再获取链接
connection=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "123456");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();//打印报错信息
}
return connection;
}
//增
public static void Zeng(stu stu) {
getConnection();//调用方法获取链接
try {
String string="insert student values(?,?,?)";
ps=connection.prepareStatement(string);
//
ps.setInt(1,stu.getId());
ps.setString(2, stu.getName());
ps.setInt(3, stu.getSid());
int executeUpdate = ps.executeUpdate();
System.out.println(executeUpdate);
} catch (Exception e) {
// TODO: handle exception
}finally {
close();
}
}
//删
public static void shan(int tt) {
getConnection();
try {
String string="delete from student where id="+tt;
ps=connection.prepareStatement(string);
int executeUpdate = ps.executeUpdate();
System.out.println(executeUpdate);
} catch (Exception e) {
// TODO: handle exception
}finally {
close();
}
}
//改
public static void Update(int a,int b) {//将a改成b
getConnection();
try {
String string="update student set id="+b+" where sid="+a;
ps= connection.prepareStatement(string);
int executeUpdate = ps.executeUpdate();
System.out.println(executeUpdate);
} catch (Exception e) {
// TODO: handle exception
}finally {
close();
}
}
//查
public static ArrayList<stu> read(){
getConnection();
ArrayList<stu> arrayList = new ArrayList<stu>();
try {
String string="select * from student";
ps=connection.prepareStatement(string);
//查询
ResultSet rset = ps.executeQuery();
while(rset.next()) {
stu ss=new stu(rset.getInt("id"),rset.getString("name"),rset.getInt("sid"));
arrayList.add(ss);
}
} catch (Exception e) {
// TODO: handle exception
}finally {
close();
}
return arrayList;
}
//关闭
public static void close() {
if(connection!=null) {
try {
connection.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
}