JDBC API
JDBC API 工作的4个重要的环节:
1. DriverManager类:依据数据库的不同管理jdbc驱动
2. Connection接口:负责连接数据库并担任传送数据的任务。
3. Statement 接口:友Connection产生,负责执行sql语句。
4. ResultSet接口:负责保存Statement执行后所产生的查询结果。
JDBC 程序的代码模版:
(1) 将JDBC驱动类装在到java虚拟机中:
Class.formName(“JDBC驱动类的名称”);
(2) 加载驱动并与书数据库连接:
Connection conn = DriverManager.getConnectipon(数据连接字符串,数据库用户名,密码);
(3) 发送SQL语句并得到结果:
一旦连接建立,就是用改连接创建Statement接口的实例并将SQL语句传递给他所连接的数据库并返回ResultSet对象
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(“select a from Table”);
(4) 处理结果:使用ResultSet对象的next()方法将光标指向下一行。最初光标的位置位于第一行之前,因此第一次调用next()方法将光标将光置于第一行上。如果到达结果集的末尾,则ResultSet的next()方法返回FALSE方法getXXX提供了获得当前行中的某列值的途径,列名或列号可用于标示要从中获取数据的列,例如 如果数据表中的第一列的列名为a,存储类型为整形,则可以用int x = rs.getInt(“a”);或者int x = rs.getInt(1);
While (rs.next()){
Int x = rs.getInt(“a”);
String s = rs.getString(“b”);
Float f = rs.getFloat(“c”);
}
纯java驱动方式:
纯java驱动方式由JDBC驱动直接访问数据库,驱动程序完全由java语言编写,运行速度快,而且具备了跨平台的特点。
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=bbs","sa","123456");
Statement语句
获取Connection对象之后就可以进行数据库操作,使用Connection对象可以生成Statement实例
执行SQL命令的三个方法:
(1) ResultSet executeQuery (String sql) :可以进行色sql查询并获取到ResultSet对象。
(2) int executeUpdate(String sql ):可以执行插入删除更新等操作,返回值是执行操作返回的受影响函数。
(3) boolean execute (String sql) :可以执行任意sql语返回一个布尔值,表示是否返回ResultSet
PreparedStatement语句
PreparedStatement 接口继承自Statement接口PreparedStatement比普通的Statement对象使用起来更加的灵活更加的效率
PreparedStatement实例包含一编译的sql语句,sq语句可具有一个或多个输入参数,并用?占位
在执行PreparedStatement之前必须设置每个参数的值,可以通过getXXX方法来完成,其中XXX表示的是参数的类型。如:pstmt.setLong(1,123456789); pstmt.setInt(2,123);
格式化时间
引入包:imp
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
代码1 查询
imp
public class select {
public static void main(String[] args) {
Connection conn = null; //定义变量
PreparedStatement pstet =null;
ResultSet rs = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //装在去动程序
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=student","sa","123456"); //加载驱动并与数据库连接
String sql = "select count(*) from td_student"; //sql 语句
pstet = conn.prepareStatement(sql); //发送sql语句并得到结果集
rs = pstet.executeQuery();
if (rs.next()){ // 判断数据集中是否有数据
System.out.println("数据库中共有"+rs.getInt(1)+"条记录");
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
clossConnection(conn); //释放资源
clossResultSet(rs);
clossStatement(pstet);
}
}
public static void clossConnection(Connection conn ){
try {
if(conn != null && !conn.isClosed()){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void clossStatement(PreparedStatement pstet ){
try {
if(pstet != null) {
pstet.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void clossResultSet(ResultSet rs ){
try {
if(rs != null) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
代码块2 增加(简化)
public static void main(String[] args) {
Connection conn = null; //定义变量
PreparedStatement pstet =null;
ResultSet rs = null;
int num = 0;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //装在去动程序
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=student","sa","123456"); //加载驱动并与数据库连接
String sql = "insert into td_student (Name,Score) values(?,?)"; //sql 语句 占位符的使用
pstet = conn.prepareStatement(sql); //发送sql语句并得到结果集
pstet.setString(1, "赵六"); // 1 表示第一个占位符
pstet.setInt(2, 87);
num = pstet.executeUpdate();
System.out.println("共插入数据"+num+"条记录");
} catch (Exception e) {
e.printStackTrace();
}
finally{
clossConnection(conn); //释放资源
clossResultSet(rs);
clossStatement(pstet);
}
}
代码快3 删除(简化)
public static void main(String[] args) {
Connection conn = null; //定义变量
PreparedStatement pstet =null;
ResultSet rs = null;
int num = 0;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //装在去动程序
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=student","sa","123456"); //加载驱动并与数据库连接
String sql = "delete from td_student where Name=? and Score=?"; //sql 语句 占位符的使用
pstet = conn.prepareStatement(sql); //发送sql语句并得到结果集
pstet.setString(1, "赵六"); // 1 表示第一个占位符
pstet.setInt(2, 87);
num = pstet.executeUpdate();
System.out.println("共删除数据"+num+"条记录");
} catch (Exception e) {
e.printStackTrace();
}
finally{
clossConnection(conn); //释放资源
clossResultSet(rs);
clossStatement(pstet);
}
}
代码快4 修改
public static void main(String[] args) {
Connection conn = null; //定义变量
PreparedStatement pstet =null;
ResultSet rs = null;
int num = 0;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //装在去动程序
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=student","sa","123456"); //加载驱动并与数据库连接
String sql = "update td_student set Score=? where Name=?"; //sql 语句 占位符的使用
pstet = conn.prepareStatement(sql); //发送sql语句并得到结果集
pstet.setInt(1, 100); // 1 表示第一个占位符
pstet.setString(2, "赵六");
num = pstet.executeUpdate();
System.out.println("共删除数据"+num+"条记录");
} catch (Exception e) {
e.printStackTrace();
}
finally{
clossConnection(conn); //释放资源
clossResultSet(rs);
clossStatement(pstet);
}
}