JDBC
什么是JDBC
jdbc的全都是Java数据库连接,它是一套用于执行SQL语句的Java API应用程序,可以通过这套API连接到关系型数据库并使用SQL语句来完成对数据库中数据的查询,更新,新增和删除的操作。
不同种类的数据库在其内部处理数据的方式是不同的,如果直接使用数据库厂商提供的访问接口操作数据库,应用程序的可移植性就会变得差。
driver接口
driver接口是所有jdbc驱动程序必须实现的接口,该接口专门提供给数据库厂商使用,需要注意的是,在编写jdbc程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath中
DriverManager类
Driver Manager类用于加载jdbc驱动,并且创建与数据库的连接。
Connection接口
Connection接口代表Java程序和数据库的连接,只有获取该连接对象后,才能访问数据库并操作数据表。
Statement接口
Statement接口用于执行静态的SQL语句并返回一个结果对象,该接口的对象通过connection实行的createstatement()方法获得。利用该对象把静态的SQL语句发送到数据库,编译成执行,然后返回数据库的处理结果在statement接口中。提供了三个常用的执行SQL语句的方法。
Preparedstatement接口
statement接口封装了jdbc执行SQL语句的方法,可以完成Java程序执行SQL语句的操作,然而在实际开发过程中往往需要将程序中的变量作为SQL语句的查询条件。而使用statement接口操作这些sql语句会变过于繁琐并且存在安全方面的问题。针对这一问题jdbc API提供了扩展的preparedstatement接口。
preparedStatement是statement的子接口用于执行编译的SQL语句。该接口扩展了带有参数SQL语句的执行操作应用,该接口中的SQL语句可以使用占位符?来代替其参数,然后通过setXxx()方法为SQL语句的参数赋值,在preparedstatement接口中提供了一些常用的方法。
resultset接口
resultset接口用于保存jdbc执行查询时返回的结果结,该结果集封装在一个逻辑表格中,在resultset接口内部有一个指向表格数据行的游标resultset对象。初始化时,游标在表格的第一行之前调用next方法可将游行移动到下一行,如果下一行没有数据则返回false在应用程序中,经常使用next方法作为while循环的条件来迭代resultset结果集。
代码及结果展示
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class example03test {
public static void main(String[] args) {
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.链接数据库http://
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc" ,"root" ,"123456");
//3.获取查询数据库
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
//4.执行查询语句
rs=stmt.executeQuery("select * from users");
rs. absolute(2);
System.out.println("第二行的数据"+rs.getString( "name"));
rs.beforeFirst();
rs.next();
System.out.println("第一行的数据" +rs.getString("name"));
rs. afterLast();
rs . previous();
System. out. println("最后一行"+rs.getString( "name" ));}
catch(Exception e) {
throw new RuntimeException(e);
}finally {
//6.关闭连接,释放资源
System. out. println("资源会被关闭---");
if(rs!=null) {
}
}
}
}
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
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 {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc","root","123456");
String sql=" insert into users values(?,?,?,?,?)";
pstmt=con.prepareStatement(sql);
pstmt.setInt(1, 6);
pstmt.setString(2,"dashuju");
pstmt.setString(3,"123");
pstmt.setString(4,"dashuju@huagong.com");
java.sql.Date date= new java.sql.Date(new Date(0).getTime());
pstmt.setDate(5, date);
int row=pstmt.executeUpdate();
if(row==1) {
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
}catch(Exception e) {
throw new RuntimeException(e);
}finally {
}
}
}
package cn.itcast.jdbc.example;
import java.util.Date;
public class JdbcInsertTest {
public static void main(String[] args) {
UserDao dao= new UserDao();
User user=new User( ) ;
user . setId(7);
user. setUsername("yxh");
user. setPassword( "123");
user . setEmail("yxh@qq. com");
user.setBirthDay(null);
boolean flag=dao. insert(user);
System. out. println(flag);
}
}
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
public static Connection getCon() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection( " jdbc:mysql: //localhost:3306/jdbc", " root" , "123456");
return con;
}
public static void realse(ResultSet rs, Statement stmt , Connection con) {
if(rs!=null) {
try {
rs.close();
}catch (SQLException e) {
e. printStackTrace();
}
rs=null;
}
if(stmt!=null) {
try {
stmt.close();
}catch (SQLException e) {
e.printStackTrace();
}
stmt=null;
}
if(con!=null) {
try {
con. close();
}catch (SQLException e) {
e.printStackTrace();
}
con=null;
}
}
}
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
public class test {
public static void main(String[] args) {
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
//1.注册并加载驱动
DriverManager drivermanager=new Driver();
DriverManager . registerDriver(Driver);
//2.获取连接对象
String url = "jdbc:mysql: //1ocalhost:3306bc";
String user ="root";
String password = "root";
con= DriverManager.getConnection(url, user, password);
//3.获取操作数据的对象
stmt=con.createStatement();
//4.向数据库发送查询语句
String sql = "select * from users";
rs = stmt.executeQuery(sql);
//5.遍历结果集。获取查询的数据
while(rs .next()){//跳转到下一行,在某一-行的值遍历完毕后,才会跳转到下一行去遍历。
int id = rs.getInt(1);// getInt("id")
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 {
System.out.println("资源会被关闭吗-----");
JDBCUtils.realse(rs, stmt, con);
}
}
}
package cn.itcast.jdbc.example;
import java.sql.Date;
public class User {
private int id;
private String username;
private String password;
private String email ;
private Date birthDay;
public int getId() {
return id;
}
public void setId(int id) {
this . id=id;
}
public String getUsername() {
return username;
}
public void setUsername (String username) {
this. username = username;
}
public String getPassword() {
return password ;
}
public void setPassword(String password) {
this. password = password;
}
public String getEmail() {
return email ;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthday) {
this.birthDay=birthDay;
}
}
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sql.Statement;
import java.util.List;
public class UserDao {
public boolean insert(User user){
Connection con=null;
Statement stmt=null;
try {
con=JDBCUtils.getCon();
stmt=con.createStatement();
java.util.Date birthday=user.getBirthDay();
String sqlbirthday=String . format( "%tF", birthday);
String sql=" insert into users(id,name , password , email,birthday)"+"values('"
+user . getId()+"','"
+user. getUsername()+"','"
+user . getPassword()+"','"
+user . getEmail()+"','"
+sqlbirthday+"'"
+")";
System. out. println(sql);
int row=stmt . executeUpdate(sql);
if(row>0) {
return true;
}
}catch(Exception e) {
throw new RuntimeException(e);
}finally {
//6.关闭连接,释放资源
System. out . println("资源会被关闭---");JDBCUtils .realse(null, stmt, con);
}
return false;}
//2.提供查询所有的方法需要补充完整public List<User> findAl1User(){
public List<User> findAllUser(){
List<User> list=null;
return list;
}
public User findUserById(int id){
User list=null;
return list;
}
public boolean update(User user) {
return false;
}
public boolean delete(int id) {
return false;
}
}