1:JDBC简述
JDBC:JAVA Database connectivity java数据库连接
数据库有哪些:MySql Oracle SqlServer
平常java连接数据库是通过数据库各自提供的jar包来进行访问,后来sun公司做了一个规范JDBC来连接各种数据库。
使用JDBC步骤:
package li;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MainTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try {
//1.注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//2.建立连接 参数一:协议+访问的数据库
conn= DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "123456");
//3.创建Statement对象,与数据库打交道
st=conn.createStatement();
//4.执行查询
String sql="select * from t_stu";
rs=st.executeQuery(sql);
//5.遍历
while(rs.next()) {
int id=rs.getInt("id");
String name=rs.getString("name");
int age=rs.getInt("age");
System.out.println("id="+id+"name="+name+"age="+age);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.release(conn, st, rs);;
}
}
}
package li;
//释放资源
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtil {
public static void release(Connection conn,Statement st,ResultSet rs) {
closeb(conn);
closec(rs);
closea(st);
}
private static void closea(Statement st) {
try {
if(st!=null) {
st.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
st=null;
}
}
private static void closeb(Connection conn) {
try {
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
conn=null;
}
}
private static void closec(ResultSet rs) {
try {
if(rs !=null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
rs=null;
}
}
}
预防驱动二次注册:Class.forname("com.mysql.jdbc.Driver");
使用properties配置文件
1.在src声明一个文件 xx.properties,里面内容如下:
url=jdbc:mysql://localhost/student
root=root
password=123456
driver=com.mysql.jdbc.Driver
2.在工具类里面,使用静态代码块,读取属性
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//2.建立连接 参数一:协议+访问的数据库
try {
con=DriverManager.getConnection(url, root, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
return con;
}
数据库增删改查:增 insert into t_stu(name,age) values('wangqiang',28)
删 delete from t_stu where id=5
改 update t_stu set age=13 where id=3
查 select * from t_stu
测试代码:
1.定义一个类。Testxxx,里面定义方法 testXXX
2.添加junit的支持
在工程上点击右键---add Library---Junit---Junnit4(默认就好)
3.在方法上面加上注解,其实就是一个标记
4.在将要测试的方法名上点击右键,执行单元测试
代码如下(查询):
package li;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.jupiter.api.Test;
public class TestThree {
@Test
public void testQuery() {
Connection conn=null;
Statement st=null;
ResultSet rs=null;
conn= JDBCUtil.getCon();
try {
//2.根据连接对象,得到statement
st = conn.createStatement();
//3.执行sql语句,返回ResultSet0
String sq="select * from t_stu";
rs = st.executeQuery(sq);
//4.遍历
while(rs.next()) {
String name=rs.getString("name");
int age= rs.getInt("age");
System.out.println(name+" "+age);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCUtil.release(conn, st, rs);
}
}
}
如果是增删改
代码如下:
这是增的示例,如果要写改查的,改一下sql语句即可
@Test
public void testinsert() {
Connection conn=null;
Statement st=null;
conn= JDBCUtil.getCon();
try {
//2.根据连接对象,得到statement
st = conn.createStatement();
//3.执行sql语句,返回ResultSet0
String sq="insert into t_stu values(null,'bihao',50)";//sql语句在这
int result= st.executeUpdate(sq);
//4.遍历
if(result>0) {
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCUtil.release(conn, st);
}
}
JDBC Dao模式:
1新建一个dao接口,里面声明数据库访问规则
package com.dao;
public interface UserDao {
void findAll();
}
2.新建一个dao的实现类,具体实现早前定义的规则
package com.dao.impl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.dao.UserDao;
import com.util.JDBCUtil;
public class UserDaoImpl implements UserDao{
@Override
public void findAll() {
ResultSet rs=null;
Statement st=null;
// TODO Auto-generated method stub
Connection conn=null;
try {
conn=JDBCUtil.getCon();
st = conn.createStatement();
String sql = "select * from t_stu";
rs = st.executeQuery(sql);
while(rs.next()) {
String name=rs.getString("name");
int age=rs.getInt("age");
System.out.println(name+" "+age);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
JDBCUtil.release(conn,st,rs);
}
}
}
3.直接实现
package com.test;
import org.junit.Test;
import com.dao.UserDao;
import com.dao.impl.UserDaoImpl;
public class UserTest {
@Test
public void testFindAll(){
UserDao dao=new UserDaoImpl();
dao.findAll();
}
}