overview_java(九)-java数据库操作
来源:互联网 发布:北京弘书阁教育 知乎 编辑:程序博客网 时间:2024/06/10 09:31
数据库访问
。加载驱动
加载jdbc驱动,并将去注册到DriverManager中,每一个数据库提供的数据库驱动不一样,加载驱动时要把jar包添加到lib中
。//加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
。//获得数据库的链接
Connection conn = DriverManager.getConnection(URL,NAME,PASSWORD);
。//通过数据库连接操作数据库,实现增删改查
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("sql");
while(rs.next()){
//循环打印
out.println(rs.getString("user_name"))
}
。。/url = "jdbc:mysql://localhost:3306/db"
。。/name
。。/password
搭建模型层。
采用mvc三层设计
从上到下依次是 view control model DB
作用:
view 视图层 展示数据,反馈用户行为
control 控制层 控制数据流通过程,协调视图层和数据层
model 模型层 与数据库建立映射,与数据进行交互
db
第一步:按照数据库表对应的字段编写实体类
第二步:新建DAO层,并DBUtil.java
eg:
public class DBUtil {
private static final String URL="jdbc:mysql://localhost:3306/db";
private static final String NAME="root";
private static final String PASSWORD="root";
private static Connection conn = null;
//静态代码块
static{
try{
//1,加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2,获得数据库的链接
conn = DriverManager.getConnection(URL,NAME,PASSWORD);
}catch(ClassNotFoundException e){
e.printstackTrace();
}
}
//对外提供一个方法来获取数据库连接
public static Connection getConnection(){
return conn;
}
public static void main(String[] args)throws Exception{
//3.通过数据库的链接操作数据库,实现增删改查
statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("sql");
while(rs.next()){
//如果对象中有数据,就会循环答应出来
System.out.println("rs.getString("user_name")");
}
}
}
第三步:Dao.java
goddessDao.java
public class GoddessDao{
public void addGoddess(){
}
public void updateGoddess(){
}
public void delGoddess(){
}
public List<Goddess> query() throws Exception{
Connection con = DBUtil.getconnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.excuteQuery("sql");
List<Goddess> gs = new ArrayList<Goddess>();
Goddess g = null;
while(rs.next()){
//如果对象中有数据,就会循环打印出来额
g = new Goddess();
g.setUserName(rs.getString("name"));
g.setAge(rs.getInt("age"));
gs.add(g);
}
return gs;
}
public Goddess get(){
return null;
}
}
Controller层:GoddessAction.java
public class GoddessAction{
public static void main(String[] args) throws Exception {
GoddessDao gd = new GoddessDao();
List<Goddess> gs = gd.query();
for(Goddess goddess:gs){
System.out.println(goddess.getUserName()+ ","+ goddess.getAge());
}
}
}
搭建模型层
create 操作
1,添加女神
public void addGoddess(Goddess g) throw Exception{
//首先拿到数据库的链接
Connection con = DBUtil.getConnection();
String sql = "" + " insert into table_name " + " (字段)" + " values( " + " ? )";
//参数用?表示,相当于占位符;用mysql的日期函数current_date()来获取当前日期
//预编译sql语句
PreparedStatement psmt = con.prepareStatement(sql);
psmt.setString(1,g.getUserName());
psmt.setDate(4, new Date(g.getBirthday().getTime()));
//日期型参数需要自己做下转换
psmt.execute();
}
/*
prepareStatement 这个方法会将sql语句加载到conn驱动中去,但不会直接执行
而是当它调用execute()方法的时候才回真正的执行
上面的sql参数用?表示,相当于占位符,然后对参数进行赋值
当真正执行时,这些参数回家再在这些sql语句中去,把sql语句拼接完整采取执行
这样就会减少对数据库的操作。
*/
测试类
public class GoddessAction{
GoddessDao gd = new GoddessDao();
Goddess g1 = new Goddess();
g1.setUserName("小夏");
gd.addGoddess(g1);
}
修改,删除,查询(根据id)操作
//update
public void updateGoddess(Goddess g) throws SQLException{
Connection con = DBUtil.getConnectionn();
String sql = " " + " update table_name " +" set user_name=?,age=?" + " where id = ? ";
//参数用?表示,相当于占位符;用mysql的日期函数
PreparedStatement psmt = con.prepareStatement(sql);
psmt.setString(1,g.getUserName());
psmt.setDate(4,new Date(g.getBirthday.getTime()));
psmt.execute();
}
//delete
public void delGoddess(Integer id) throws SQLException
Connection con = DBUtil.getConnection();
String sql = " " + " delete from table_name " + " where id = ?";
PreparedStatement psmt = con.prepareStatement(sql);
psmt.setInt(1,id);
psmt.execute();
//查询单个,根据字段
public Goddess get(Integer id) throws SQLException{
Goddess g = null;
Connection con = DBUtil.getConnection();
String sql = " " + " select * from table_name " + " where id=?";
PreparedStatement psmt = con.prepareStatement(sql);
psmt.setInt(1,id);
ResultSet rs = psmt.executeQuery();//返回一个结果集
//遍历结果集
while(rs.next()){
g= new Goddess();
g.setId(rs.getInt("id"));
}
return g;
}
查询
//查询单个女神(根据姓名等信息去查询)
public List<Goddess> get(String name,String mobile) throws SQLException{
List<Goddess> result=new ArrayList<Goddess>();
Connection con=DBUtil.getConnection();//首先拿到数据库的连接
StringBuffer sb=new StringBuffer();
sb.append("select * from imooc_goddess ");
sb.append("where user_name like ? and mobile like ?");
//预编译sql语句
PreparedStatement psmt = con.prepareStatement(sb.toString());
//先对应SQL语句,给SQL语句传递参数
psmt.setString(1, "%"+name+"%");
psmt.setString(2, "%"+mobile+"%");
System.out.println(sb.toString());
//执行SQL语句
/*psmt.execute();*///execute()方法是执行更改数据库操作(包括新增、修改、删除);executeQuery()是执行查询操作
ResultSet rs = psmt.executeQuery();//返回一个结果集
Goddess g=null;
//遍历结果集
while(rs.next()){
g=new Goddess();
g.setId(rs.getInt("id"));
g.setUserName(rs.getString("user_name"));
g.setAge(rs.getInt("age"));
g.setSex(rs.getInt("sex"));
//rs.getDate("birthday")获得的是java.sql.Date类型。注意:java.sql.Date类型是java.util.Date类型的子集,所以这里不需要进行转换了。
g.setBirthday(rs.getDate("birthday"));
g.setEmail(rs.getString("email"));
g.setMobile(rs.getString("mobile"));
g.setCreateUser(rs.getString("create_user"));
g.setCreateDate(rs.getDate("create_date"));
g.setUpdateUser(rs.getString("update_user"));
g.setUpdateDate(rs.getDate("update_date"));
g.setIsDel(rs.getInt("isdel"));
result.add(g);//将结果封装到对象中
}
return result;
}
//查询操作进一步完善。
//使用Map存储条件信息;防止条件为空可以添加一条where 1=1;
public List<Goddess> get(List<Map<String,Object>> params) throws SQLExpection{
List<Goddess> result = new ArrayList<Goddess>();
Connection con= DBUtil.getConnection();
}
优化
//查询单个女神
//使用Map存储条件信息,防止条件为空可加一条where 1=1;
public List<Goddess> result = new ArrayList<Goddess>();
//首先拿到数据据库
Connection con = DBUtil.getConnection();
StringBuffer sb = new StringBuffer();
sb.append("select * from table_name where 1=1");
if(params!= null && params.size()>0){
//先判断集合是否为空
//遍历集合
for(int i =0;i<params.size();i++){
Map<String,Object> map = params.get(i);
sb.append("and " + map.get("name")+ " " +
map.get("rela")+" " = map.get("value")+ " ");
//查询什么?关系是什么?以及值是什么,我们都可以通过
//参数传进来
}
}
PreparedStatement psmt = con.prepareStatement(sb.toString());
//执行SQL语句
//psmt.execute();此方法是执行更改数据库操作(包括新增,修改,删除)
//executeQuery()是执行查询操作
ResultSet rs = psmt.executeQuery(); // 返回一个结果集
Goddess g =null;
//遍历结果集
while(rs.next()){
g=new Goddess();
g.setId(rs.getInt("id"));
g.setUserName(rs.getString("user_name"));
g.setBirthday(rs.getDate("birthday"));
result.add(g);
}
return result;
测试:
List<map<String,Object>> param = new ArrayList<Map<String,object>>();
Map<String,Object> param = new HashMap<String,Object>();
param.put("name","user_name");
param.put("rela","like");
param.put("value","%aa%")
params.add(param);
param = new HashMap<String,Object>();
param.put
.
.
.
params.add(param);
List<Goddess> list1 = gd.get(params);
//遍历list1
搭建控制层
//添加
public void add(Goddess goddess) throws Exception{
GoddessDao dao = new GoddessDao();
goddess.setSex(1);
goddess.setIsDel(0);
dao.addGoddess(goddess);
}
//修改
public void edit(Goddess goddess) throws Exception{
GoddessDao dao = new GoddessDao();
dao.updateGoddess(goddess);
}
//删除
总结
1,jdbc,就是数据库连接的桥梁
是由java语言编写的类和接口组成,可以为多种数据库提供统一的访问。
2,采用MVC三层结构
DB数据库
模型层 DB+DAO :封装实现类
控制层:负责调用模型层
视图层调用控制层
- overview_java(九)-java数据库操作
- (九)yii 数据库操作curd
- overview_java(一)
- overview_java(二)
- overview_java(三)
- overview_java(五)
- MongoDB 数据库操作(九)-访问控制
- Java文件操作大全(九)
- JAVA菜鸟(九)数据库知识
- 复习九:java Web部分、数据库部分
- Java-数据库操作 事务操作
- java 数据库基本操作
- java 数据库基本操作
- JAVA:数据库操作封装
- Java 数据库基本操作
- java 数据库操作
- JAVA多线程数据库操作
- java 数据库基本操作
- ubuntu16.04 虚拟机 安装win7/win10
- 24周岁前的计划(I)
- 51 Nod 1225 余数之和
- Breadth-first Search -- Leetcode problem107. Binary Tree Level Order Traversal II
- 如何在docker容器和宿主机之间复制文件
- overview_java(九)-java数据库操作
- 使用fakeLoader完成加载完成前的页面加载效果
- 马云:心要善,刀要快 | 内部干货
- Android NDK使用
- Java并发编程 之 HashMap线程不安全
- 让Excel帮我检查DB2 Software Lifecycle
- .net ftp上传文件
- 生命中的时光-齐一
- OpenGL中的FBO对象 详解