使用jdbc访问数据库
JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API。了解更多访问这里。
下面就直接开始吧。
1.准备数据库表
我用的是mysql 准备下面一张表:
就该表在java里用jdbc实现增删该查
2.准备jdbc的jar包
并添加到工程中,这里用的是mysql5.1.7的jar包。
3.新建一个java工程。
4.新建一个jdbc.properties属性文件放到根src目录下
这里访问本机数据库
内容如下:
url = jdbc:mysql://localhost/mydb1?characterEncoding=utf-8 表示数据库的访问地址是本机的mydb1的数据库 字符集为utf-8。
下依此是用户名、密码、和需要注册的驱动名字,=号左边是变量名 右边是值,不需要引号,待会儿JDBCUtil工具类会在这个文件中读取这些值。
5.新建一个JDBCUtil类
- JDBCUtil类用来实现读取上面jdbc.properties文件中的值并 注册jdbc驱动和实现数据库的连接。
- 源代码:
//代码如下,导入包时注意用import java.sql包,并非import java.sql.jdbc
public class JDBCUtil {
// properties 文件里的driverClass
static String driverClass = null;
//数据库连接对象类,用它来表示工程和数据库的连接
static Connection conn = null;
/*语句对象,用它来执行sql语句,此处用的是Statement对象,该对象有sql注入的漏洞,建议用PreparedStatement*/
static Statement st = null;
//执行语句时返回的结果集
static ResultSet rs = null;
static String userName = null;
static String url = null;
static String passWord = null ;
//在静态代码快中读取properties文件里的值
static {
try {
Properties properties = new Properties();
InputStream is =JDCCUtil.class.getClassLoader().
getResourceAsStream("jdbc.properties");
properties.load(is);
//读属性
userName = properties.getProperty("userName");
url = properties.getProperty("url");
passWord = properties.getProperty("passWord");
driverClass = properties.getProperty("driverClass");
System.out.println(url);
} catch (IOException e) {
e.printStackTrace();
}
}
//注册驱动 并返回获取连接并返回
public static Connection getConn() {
try {
//DriverManager.registerDriver(new Driver());
//使用Class的forName方法来注册驱动
Class.forName(driverClass);
/* Driver 的构造方法中有一个静态代码块 已经执行了 :DriverManager.registerDriver(new Driver());
* 所以用new Driver也可以
* */
//new Driver();
//建立连接 参数1 书库据的连接,参数2 用户名 3 密码
conn = DriverManager.getConnection(url, userName, passWord);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("类没找到");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn,Statement st, ResultSet rs) {
closeRs(rs);
closeSt(st);
closeConn(conn);
}
public static void release(Connection conn,Statement st) {
closeSt(st);
closeConn(conn);
}
// 释放Statement
private static void closeSt(Statement st) {
// TODO Auto-generated method stub
try {
if(st != null) {
st.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//释放结果集
private static void closeRs(ResultSet rs) {
try {
if(rs != null)
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
rs = null;
}
}
//释放Connection
private static void closeConn(Connection conn) {
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
conn = null;
}
}
}
好了东西都准备好了,下面可以进行数据库的增删改查了。
- 在main方法或者Junit单元测试里面进行增删改查
我就在Junit里面进行单元测试。
查询测试:
/*
* 使用Junit测试代码
*/
public class test {
@Test
public void quareyTest() {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
//1.获取查询对象
conn = JCBCUtil.getConn();
try {
//获取statement对象
st = conn.createStatement();
String sql = "select * from employee";
rs = st.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String password = rs.getString("password");
String realname = rs.getString("realname");
//在控制台输出表里的信息
System.out.println("id:"+id+"密码:"+password+"真实名字:"+realname);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//调用JDBCUtil.release(conn, st, rs)方法释放资源 该方法在JDBCUtil里面实现了
JDBCUtil.release(conn, st, rs);
}
}
运行结果:
删除测试:
@Test
//删除测试
public void deleteTest() {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
//1.获取连接对象
conn = JCBCUtil.getConn();
try {
st = conn.createStatement();
//删除id==3的数据
String sql = "delete from employee where id=3";
//删除,插入,更新都是用statement的executeUpdate(String sql)方法,返回int类型
int result = st.executeUpdate(sql);
if(result>0) {
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JCBCUtil.release(conn, st);
}
}
结果:
在数据库里查看一下是否已经删除:
我们看到id==3的数据已经被删除了。
实现插入:
//执行插入语
@Test
public void insertTest() {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JCBCUtil.getConn();
st = conn.createStatement();
String sql = "insert into employee values(null,'水煮肉片',333,'王大米')";
int result = st.executeUpdate(sql);
if(result >0) {
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JCBCUtil.release(conn, st);
}
}
查看一下结果:
已经插入成功了!
数据的更新:
@Test
public void updateTest() {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JCBCUtil.getConn();
st = conn.createStatement();
String sql = "update employee set realname ='王米米' where id = 6";
int result = st.executeUpdate(sql);
if(result >0) {
System.out.println("更新成功");
}else {
System.out.println("更新失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JCBCUtil.release(conn, st);
}
}
结果:
结果显示已经更新完成了。