1.jdbc是什么
JDBC(Java Data Base Connectivity,java数据库连接)
① 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问
② 由一组用Java语言编写的类和接口组成
③ 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序
④ JDBC也是个商标名
简单地说,JDBC 可做三件事
① 与数据库建立连接
② 发送操作数据库的语句
③ 处理结果
2.Jdbc整体架构
Jdbc也就是一个为应用程序提供了一个统一的访问接口,各个数据库公司可以根据自己的数据库来实现相应的接口,从而实现了对于数据库的访问操作。
3.具体的实现操作
第一步:加载驱动
第二步:获得连接,连接数据库
第三步:使用语句操作数据库
第四步:关闭数据库释放连接
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class test2 {
static String className="com.mysql.jdbc.Driver";// 驱动名称
static Connection conn = null;
static String url="jdbc:mysql://localhost:3306/bbs";//数据库地址
static String user="root";// 用户名
static String password="root";// 密码
public static void main(String[] args) {
try {
//第一步:加载驱动
Class.forName(className);
System.out.println("数据库加载成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("数据库加载失败");
}
try {
// 第二步:获得连接,连接数据库
conn=DriverManager.getConnection(url, user, password);
System.out.println("数据库连接获取成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库连接获取失败");
}
// 第三步:使用语句操作数据库
try {
// 第四步:关闭数据库释放连接
conn.close();
System.out.println("数据库关闭成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库关闭失败");
}
}
}
4.使用Statement操作数据库
public class demo2 {
public static void main(String[] args) throws Exception {
Connection conn=DBUtil.getConn();//获得连接
Statement stmt=conn.createStatement();//使用语句操作数据库
String sql="insert into booktable values(null,'android222',20,'helen',1)";
stmt.executeUpdate(sql);//增加语句——执行更新操作
String sql2="delete from booktable where bookid=2";
stmt.executeUpdate(sql2);//删除语句——执行更新操作
String sql3="update booktable set bookName='html12222' where bookId=3";
stmt.executeUpdate(sql3);//修改语句——执行更新操作
String sql4="select * from booktable";
ResultSet rs=stmt.executeQuery(sql4);//查询语句——执行查询操作
while(rs.next()){
// System.out.println(rs.getString(1)+rs.getString(2)+rs.getString(3)+rs.getString(4)+rs.getString(5));
System.out.println(rs.getInt("bookId")+rs.getString("bookName")+rs.getString("price")+rs.getString("author")+rs.getString("bookType"));
}
DBUtil.close(stmt,conn);
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
static String className="com.mysql.jdbc.Driver";
static Connection conn=null;
static String url="jdbc:mysql://localhost:3306/bookmanage";
static String user="root";
static String password="root";
/**
* 获得连接
* @return
* @throws Exception
*/
public static Connection getConn() throws Exception{
Class.forName(className);
conn=DriverManager.getConnection(url, user, password);
return conn;
}
/**
* 关闭连接
* @throws Exception
* @throws Exception
*/
public static void close(Statement stmt, Connection conn) throws Exception {
// TODO Auto-generated method stub
if(stmt!=null){
stmt.close();
if(conn!=null){
conn.close();
}
}
}
}
增删改:stmt.executeUpdate(sql);
查询:ResultSet rs=stmt.executeQuery(sql); 然后进行遍历
其实:可以一些利用用户输入的方式来传递参数
可以将传递过来的参数封装成为一组对象(Model),然后进行获取相应的结果。
5.使用prepareStatement操作数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class MyDBUtil {
static String className="com.mysql.jdbc.Driver";
static String url="jdbc:mysql://localhost:3306/bookmanage";
static String user="root";
static String password="root";
public static Connection getConn() throws Exception {
// TODO Auto-generated method stub
Class.forName(className);
Connection conn=DriverManager.getConnection(url, user, password);
return conn;
}
public static void cloae(PreparedStatement pstmt, Connection conn) throws Exception {
// TODO Auto-generated method stub
if(pstmt!=null){
pstmt.close();
if(conn!=null){
conn.close();
}
}
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import com.hlf.test4.Book;
public class test {
public static void main(String[] args) throws Exception {
Book book=new Book("aa", 34, "p", 5);
addBooktest(book);
}
private static void addBooktest(Book book) throws Exception {
Connection conn=MyDBUtil.getConn();
String sql="insert into booktable values(null,?,?,?,?)";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, book.getBookName());
pstmt.setFloat(2, book.getPrice());
pstmt.setString(3, book.getAuthor());
pstmt.setInt(4, book.getBookTypeId());
pstmt.executeUpdate();
MyDBUtil.cloae(pstmt,conn);
}
}
基本上和前面的使用没有什么太大的差别,不同的就是此时是先创建一个pstmt,然后再传递参数的时候去执行前,需要设置每一个参数的值,从1开始设置。