一般有三个接口
1, Statement 能发送简单的 查询语句 ;不能防止sql注入 ;不能带参数 (动态参数必须拼接);是个基础的接口;
2, PreparedStatement 继承自Statement,防止sql注入,可以携带参数,最常用
3, CallableStatement 继承自PreparedStatement, 由方法 prePareCall创建, 用于调用存储过程。
**********************
接口的方法有三个
1. execute(); 运行语句,返回布尔值 和数字 ,false 和数字 代表没有成功
2. executeQuery(); 运行语句,返回查询结果集合
3. executeUpdate(); 返回操作条数; update delete insert 操作使用;
**********************
查询集合结果:ResultSet接口
查询结果差不多首个数组一样的东西,可以调用next的方法;
对于的是get+各种类型方法;
**********************
代码实现
Statement
package com.testJDBC;
import java.sql.DriverManager;
import java.sql.SQLException;
// import java.sql.Statement;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
public class TestJDBC {
public static void main(String[] args) {
Connection conn = null;
Statement sm = null; // 此处的Statement 是接口 不是实现类;
try {
// 加载类资源
Class.forName("com.mysql.jdbc.Driver");
// 这个的Connection 会连接时间很长,所以的话,后面会使用线程池进行管理
conn = (Connection) DriverManager.getConnection(
"jdbc:mysql://localhost:3306/testjdbc?useUnicode=true&characterEncoding=utf-8&useSSL=false",
"root",
"wangrong654688");
sm = conn.createStatement();
// 正常写sql
// String sql = "insert into t_user(username,pwd) value('lll',999)";
// sm.execute(sql);
// 需要拼接
// String nameString = "jkjkjk";
// String sql = "insert into t_user(username,pwd) value('"+ nameString +"',999)";
// sm.execute(sql);
// sql注入 删完了
// String id = "3 or 1=1";
// String sql = "delete from t_user where id=" + id;
// sm.execute(sql);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
// TODO: handle exception
}finally {
try {
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// try {
// if(sm!=null) {
// sm.close();
// }
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
}
PreparedStatement
package com.testJDBC;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
// import java.sql.Statement;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
public class TestJDBC {
public static void main(String[] args) {
Connection conn = null;
// Statement sm = null; // 此处的Statement 是接口 不是实现类;
PreparedStatement ps = null;
try {
// 加载类资源
Class.forName("com.mysql.jdbc.Driver");
// 这个的Connection 会连接时间很长,所以的话,后面会使用线程池进行管理
conn = (Connection) DriverManager.getConnection(
"jdbc:mysql://localhost:3306/testjdbc?useUnicode=true&characterEncoding=utf-8&useSSL=false",
"root",
"wangrong654688");
// sm = conn.createStatement();
// 正常写sql
// String sql = "insert into t_user(username,pwd) value('lll',999)";
// sm.execute(sql);
// 需要拼接
// String nameString = "jkjkjk";
// String sql = "insert into t_user(username,pwd) value('"+ nameString +"',999)";
// sm.execute(sql);
// sql注入 删完了
// String id = "3 or 1=1";
// String sql = "delete from t_user where id=" + id;
// sm.execute(sql);
String sql = "insert into t_user(username,pwd,resTime) value(?,?,?)"; // ?占位符号
ps = conn.prepareStatement(sql);
ps.setObject(1, "张三" ); // 索引 从1开始
ps.setObject(2, "3333");
ps.setObject(3, new java.sql.Date(System.currentTimeMillis())); // Date 使用java.sql.Date
ps.execute();
System.out.println("插入成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
// TODO: handle exception
}finally { // 关闭原则 先进后关
// try {
// if(sm!=null) {
// sm.close();
// }
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
if(ps!=null) {
ps.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
PreparedStatement 和 ResultSet 混合使用
package com.testJDBC;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
// import java.sql.Statement;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
public class TestJDBC {
public static void main(String[] args) {
Connection conn = null;
// Statement sm = null; // 此处的Statement 是接口 不是实现类;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 加载类资源
Class.forName("com.mysql.jdbc.Driver");
// 这个的Connection 会连接时间很长,所以的话,后面会使用线程池进行管理
conn = (Connection) DriverManager.getConnection(
"jdbc:mysql://localhost:3306/testjdbc?useUnicode=true&characterEncoding=utf-8&useSSL=false",
"root",
"wangrong654688");
// sm = conn.createStatement();
// 正常写sql
// String sql = "insert into t_user(username,pwd) value('lll',999)";
// sm.execute(sql);
// 需要拼接
// String nameString = "jkjkjk";
// String sql = "insert into t_user(username,pwd) value('"+ nameString +"',999)";
// sm.execute(sql);
// sql注入 删完了
// String id = "3 or 1=1";
// String sql = "delete from t_user where id=" + id;
// sm.execute(sql);
// String sql = "insert into t_user(username,pwd,resTime) value(?,?,?)"; // ?占位符号
// ps = conn.prepareStatement(sql);
// ps.setObject(1, "张三555" ); // 索引 从1开始
// ps.setObject(2, "3333");
// ps.setObject(3, new java.sql.Date(System.currentTimeMillis())); // Date 使用java.sql.Date
// ps.execute();
String sql = "select username,pwd,resTime from t_user where id>? "; // ?占位符号
ps = conn.prepareStatement(sql);
ps.setObject(1, 2);
rs = ps. executeQuery();
while(rs.next()) {
System.out.println(rs.getString(1)+"___"+rs.getString(2)+"____"+rs.getDate(3));
}
System.out.println("成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
// TODO: handle exception
}finally { // 关闭原则 先进后关
// try {
// if(sm!=null) {
// sm.close();
// }
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
if(rs!=null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(ps!=null) {
ps.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}