一、实现第一个JDBC程序
通过java代码操作数据库的具体步骤:前提导入数据库的jar包
1.注册并加载驱动:
DriverManager.registerDriver (Driver driver);或者class.forName (“driverName”);
2.获取Connection连接对象
Connection con = DriverManager.getConnection(url, username, password);3.获取操作数据库的对象statement(或者PreparedStatement)
statement stmt =con.createstatement (;
4.向数据库发送sql语句,执行操作。
比如执行查询操作:string sql-“select * from users”;调用executeQuery(sql);5.执行查询操作,返回Resultset结果集对象,结果集里面封装的是查询的结果。
遍历Resultset,获取我们查询的数据。
6.关闭连接,释放资源(倒关原则:先出现的,后关闭。)
注意:
1.在开发中,通常使用Class.forName (".com.mysaql.jdbc.Driver")注册驱动,不用DriverManager的注册驱动方法,
因为这个方法注册了2次驱动。
2.关闭资源时,关闭资源的代码一定要放在finally块里,因为前面的代码无论是否发生异常,这个块里的关闭资源
代码总会被执行。因为数据库连接资源很宝贵,数据库连接资源时有限的,所以一定要关。
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Driver;
public class test {
public static void main(String[] args){
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
//1.注册并加载驱动
Driver driver = new Driver();
DriverManager.registerDriver(driver);
//2.获取连接对象
String url = "jdbc:mysql://localhost:3306/jdbc";
String user = "root";
String password = "123456";
//int test=1/0;
con = DriverManager.getConnection(url,user,password);
//3.获取操作数据的对象
//int test=1/0;
stmt = con.createStatement();
//4.向数据库发送查询语句
String sql = "select *from users";
rs = stmt.executeQuery(sql);
//5.遍历结果集。获取查询的数据
while(rs.next()) {
//跳转到下一行,在某一行的值遍历完毕后,才会跳转到下一行去遍历。
int id = rs.getInt(1);
String name = rs.getString("name");
String psw = rs.getString(3);
String email = rs.getString("email");
Date birthday = rs.getDate("birthday");
System.out.println(id+" "+name+" "+psw+" "+email+" "+birthday);
}
}catch(Exception e) {
throw new RuntimeException(e);
}finally {
//6.关闭连接,释放资源
System.out.println("资源会被关闭吗----");
if(rs!=null) {
System.out.println("rs资源被释放");
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt!=null) {
System.out.println("stmt资源被释放");
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con!=null) {
System.out.println("con资源被释放");
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
运行结果:
二、PreparedStatement 对象
Preparedstatement和statement区别:
1.功能:它们都可以向数据库发送sql语句,对数据库进行crud操作
2.Statement操作数据库时,如果执行相同的sql语句多次,每次都会对sql语句进行编译,效率太低PreparedStatement操作数据库时,会提前预编译,所以执行相同的sql语句多次,效率会提高很多。java.sql. Date 和java.util. Date关系
注意:数据库插入日期值,一定要用java.sql.Date。1.java.sql.Date是子类,java.util.Date是父类2.两个Date之间相互转换
java.util.Date utilDate - new java.sql.Date();
java.sql.Date sqlDate = new java.sql.Date(new java.util.Date () . getTime ());
test.java
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.PreparedStatement;
public class example2test {
public static void main(String[] args) {
String time = String.format("%tF", new Date(0));
Connection con = null;
java.sql.PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.连接数据库
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc","root","123456");
//3.获取查询数据库
String sql="insert into users values(?,?,?,?,?)";//根据数据库字段决定,占位符
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, 6);