Java数据库訪问小结
</pre>1、JDBC訪问方法</p><p></p><p>DBHelper类訪问数据库。Dao类写数据訪问,View类进行应用,初学实例图书管理系统。</p><p></p><pre class="java" name="code">package util; import java.sql.Connection;
import java.sql.DriverManager; public class DBHelper {
private static Connection conn;
private static final String DBurl="jdbc:mysql://localhost:3306/db_book? useUnicode=true&characterEncoding=UTF-8";
private static final String DBuser="root";
private static final String DBpass="root";
private static final String DRIVER="com.mysql.jdbc.Driver"; static
{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
}
} private DBHelper()
{ } public static Connection getConnection() throws Exception
{
if(conn==null)
{
conn=DriverManager.getConnection(DBurl, DBuser, DBpass);
}
return conn; }
public static void closeConn()throws Exception
{
if(conn!=null)
{
conn.close();
}
}
}
package dao; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import util.StrUtil;
import model.Book; public class BookDao { public int addBook(Connection conn,Book bk) throws Exception
{
String sql="insert into t_book values(null,?,?,?,?,?,?)";
PreparedStatement psmt=conn.prepareStatement(sql);
psmt.setString(1, bk.getBookname());
psmt.setString(2, bk.getAuthor());
psmt.setString(3, bk.getSex());
psmt.setString(4, bk.getPublisher());
psmt.setString(5, bk.getBookdes());
psmt.setInt(6, bk.getBooktypeid());
return psmt.executeUpdate();
} public int delBook(Connection conn,Book bk) throws Exception
{
String sql="delete from t_book where id ='"+bk.getId() +"'";
PreparedStatement psmt=conn.prepareStatement(sql);
return psmt.executeUpdate();
} public int bookModify(Connection con,Book bk)throws Exception{
String sql="update t_booktype set booktypename=?,booktypedes=? where id=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, bk.getBookname());
pstmt.setString(2, bk.getBookdes());
pstmt.setInt(3, bk.getId());
return pstmt.executeUpdate();
} public ResultSet bookList(Connection con,Book book)throws Exception{
StringBuffer sb=new StringBuffer("SELECT t_book.id,t_book.bookname,t_book.author,t_book.sex,t_book.publisher,t_book.bookdes,t_booktype.booktypename FROM t_book,t_booktype WHERE t_book.booktypeid=t_booktype.id");
if(StrUtil.isNotEmpty(book.getBookname())){
sb.append(" and bookname like '%"+book.getBookname()+"%'");
}
if(StrUtil.isNotEmpty(book.getAuthor())){
sb.append(" and author like '%"+book.getAuthor()+"%'");
}
if(StrUtil.isNotEmpty(book.getSex())){
sb.append(" and sex = '"+book.getSex()+"'");
}
if(book.getBooktypeid()!=-1){
sb.append(" and booktypeid = "+book.getBooktypeid());
} PreparedStatement pstmt=con.prepareStatement(sb.toString());
return pstmt.executeQuery();
}
public ResultSet bookListAll(Connection con,Book book)throws Exception{
StringBuffer sb=new StringBuffer("SELECT t_book.id,t_book.bookname,t_book.author,t_book.sex,t_book.publisher,t_book.bookdes,t_booktype.booktypename FROM t_book,t_booktype WHERE t_book.booktypeid=t_booktype.id");
PreparedStatement pstmt=con.prepareStatement(sb.toString());
return pstmt.executeQuery();
}
public boolean getBookByBookTypeId(Connection con,String bookTypeId)throws Exception{
String sql="select * from t_book where booktypeid=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, bookTypeId);
ResultSet rs=pstmt.executeQuery();
return rs.next();
}
}
2、依旧是JDBC方法。Dao类採用简单模版方法 练手实例 源码管理系统
package dao; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; import util.DBHelper; interface RowMapImpl {
abstract Object rowMap(ResultSet rs) throws Exception; abstract List<Object> rowMapList(ResultSet rs) throws Exception;
} public class BaseDao implements RowMapImpl {
public Object query(String sql, Object[] args, RowMapImpl rowMapImpl)
throws Exception {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++)
ps.setObject(i + 1, args[i]);
rs = ps.executeQuery();
Object obj = null;
if (rs.next()) {
obj = rowMapImpl.rowMap(rs);
}
return obj;
} public List<Object> queryList(String sql, Object[] args,
RowMapImpl rowMapImpl) throws Exception {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Object> list = null;
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++)
ps.setObject(i + 1, args[i]);
rs = ps.executeQuery();
list = new ArrayList<Object>();
list = rowMapImpl.rowMapList(rs);
return list;
} public int operate(String sql, Object[] args) throws Exception {
Connection conn = null;
PreparedStatement ps = null;
conn = DBHelper.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++)
ps.setObject(i + 1, args[i]);
return ps.executeUpdate();
} @Override
public Object rowMap(ResultSet rs) throws Exception {
// TODO Auto-generated method stub
return null;
} @Override
public List<Object> rowMapList(ResultSet rs) throws Exception {
// TODO Auto-generated method stub
return null;
} }
package dao; import java.sql.ResultSet;
import java.util.List; import model.Content; public class ContentDao {
private BaseDao template = new BaseDao();
public int addTree(Content cont) throws Exception {
String sql = "insert into t_content values(? ,?,?)";
Object[] args = new Object[] { cont.getNodeId(), cont.getContent(),
cont.getUpdateTime() };
return template.operate(sql, args);
} public int delTree(Content cont) throws Exception {
String sql = "delete from t_content where NodeId=?";
Object[] args = new Object[] { cont.getNodeId() };
return template.operate(sql, args);
} public int updateTree(Content cont) throws Exception {
String sql = "update t_content set NodeId=? , Content=? UpdateTime=? ";
Object[] args = new Object[] { cont.getNodeId(), cont.getContent(),
cont.getUpdateTime() };
return template.operate(sql, args);
} public Content findTree(String NodeId) throws Exception {
String sql = "select * from t_content where NodeId=? ";
Object[] args = new Object[] { NodeId };
Object cont = template.query(sql, args, new RowMapImpl() {
public Object rowMap(ResultSet rs) throws Exception {
Content cont = new Content();
cont.setNodeId(rs.getInt("NodeId"));
cont.setContent(rs.getString("Content"));
cont.setUpdateTime(rs.getString("UpdateTime"));
return cont;
} @Override
public List<Object> rowMapList(ResultSet rs) throws Exception {
// TODO 自己主动生成的方法存根
return null;
}
});
return (Content) cont;
}
}
3、myBatis訪问 就是xml文件配置比較烦,用起来舒服些。 实例測试。
package util;
import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class DBHelper { <p>
private static SqlSessionFactory sessionFactory;
private static Reader reader;
private DBHelper(){}</p><p> public static SqlSessionFactory getSessionFactory() throws Exception{
String resource = "util/config.xml";
//载入mybatis的配置文件(它也载入关联的映射文件)
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
e.printStackTrace();
}
//构建sqlSession的工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
return sessionFactory;</p> }
<?xml version="1.0" encoding="UTF-8" ? >
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserDao">
<select id="getUser" parameterType="int"
resultType="User">
select * from t_user where id=#{id}
</select>
<select id="getAllUser" resultType="User">
select * from t_user
</select>
<delete id="deleteUser" parameterType="int" >
delete from t_user where id=#{id}
</delete>
<update id="updateUser" parameterType="User">
update t_user set username=#{username}, password=#{password} where id=#{id}
</update>
<insert id="insertUser" parameterType="User">
insert into t_user(username,password) values(#{username},#{password})
</insert> </mapper>
package dao; import java.util.List; import model.User; public interface UserDao { public User getUser(int i); public List<User> getAllUser(); public int insertUser(User u); public int updateUser(User u); public int deleteUser(int i); }
public static void main(String[] args) throws Exception {
SqlSession session=DBHelper.getSessionFactory().openSession(true);
UserDao userDao=session.getMapper(UserDao.class);
User user=userDao.getUser(1);
System.out.println(user.getUsername());
}
Java数据库訪问小结的更多相关文章
- 数据库訪问技术之JDBC
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhuojiajin/article/details/32150883 在了解JDBC之前呢, ...
- 学习实践:使用模式,原则实现一个C++数据库訪问类
一.概述 在我參与的多个项目中.大家使用libMySQL操作MySQL数据库,并且是源代码级复用,在多个项目中同样或相似的源代码.这种复用方式给开发带来了不便. libMySQL的使用比較麻烦.非常e ...
- java后台訪问url连接——HttpClients
java后台訪问url,并传递数据--通过httpclient方式 须要的包,包可能多几个额外的,假设无用或者冲突删除就可以.httpclient是使用的是4.4.1的版本号:http://downl ...
- 假设在本地搭一个server和mysql数据库环境,假设使用java来訪问数据库
我们能够使用speedamp来搭一个server环境,能够在http://download.csdn.net/detail/baidu_nod/7630265下载 解压后无需安装直接能够使用.点击Sp ...
- java中訪问修饰符
较之c++ 中 public,proctected, private 三种訪问控制, java多了默认訪问控制. java中四种訪问控制权限 简单描写叙述为一下四句: 1)private 仅本类可见 ...
- c#数据库訪问返回值类型为SqlDataReader时使用using时注意的问题
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010512579/article/details/24011761 在封装通用 SQLSERVER ...
- Java 訪问权限控制:你真的了解 protected keyword吗?
摘要: 在一个类的内部,其成员(包含成员变量和成员方法)是否能被其它类所訪问,取决于该成员的修饰词:而一个类是否能被其它类所訪问,取决于该类的修饰词.Java的类成员訪问权限修饰词有四类:privat ...
- JAVA设计模式之 訪问者模式【Visitor Pattern】
一.概述 訪问者模式是一种较为复杂的行为型设计模式,它包括訪问者和被訪问元素两个主要组成部分.这些被訪问的元素通常具有不同的类型,且不同的訪问者能够对它们进行不同的訪问操作.在使用訪问者模式时,被訪问 ...
- 使用ADO.NET对SQL Server数据库进行訪问
在上一篇博客中我们给大家简介了一下VB.NET语言的一些情况,至于理论知识的学习我们能够利用VB的知识体系为基础.再将面向对象程序设计语言的知识进行融合便可进行编程实战. 假设我们须要訪问一个企业关系 ...
随机推荐
- ES6之用let,const和用var来声明变量的区别
var(掌握) 不区分变量和常量 用var声明的变量都是变量,都是可变的,我们可以随便对它进行运算操作.这样当多个人进行同一个项目时,区分变量和常量会越来越难,一不小心就会把设计为常量的数据更改了 ...
- 旋转VR相机不头晕:一个反直觉的发现
旋转VR相机不头晕:一个反直觉的发现 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/deta ...
- ucore_lab1
练习1:理解通过make生成执行文件的过程.(要求在报告中写出对下述问题的回答) 实验过程 静态分析代码. 实验的目录结构如下: . ├── boot ├── kern │ ├── debug │ ...
- ZOJ 3435
求(1,1,1)至(x,y,z)的互质个数. 即求(0,0,0)到(x-1,y-1,z-1)互质个数. 依然如上题那样做.但很慢...好像还有一个分块的思想,得学学. #include <ios ...
- WCF 无法激活服务,由于它不支持 ASP.NET 兼容性。已为此应用程序启用了 ASP.NET 兼容性
作者:jiankunking 出处:http://blog.csdn.net/jiankunking 错误信息: 无法激活服务.由于它不支持 ASP.NET 兼容性.已为此应用程序启用了 ASP.NE ...
- Leetcode--easy系列4
#58 Length of Last Word Given a string s consists of upper/lower-case alphabets and empty space char ...
- C++ STL之list具体解释
list容器是一个双向链表,能够高效地进行插入删除元素. 构造函数 list<Elem> c;//空list list<int> c(3);//创建一个含有三个默认值是0的元素 ...
- Android This Activity already has an action bar supplied by the window decor
This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ ...
- ThinkPHP5.0框架开发--第8章 TP5.0 模型
ThinkPHP5.0框架开发--第8章 TP5.0 模型 第8章 TP5.0 模型 ================================================= 今日学习 1. ...
- ARIMA模型实例讲解——网络流量预测可以使用啊
ARIMA模型实例讲解:时间序列预测需要多少历史数据? from:https://www.leiphone.com/news/201704/6zgOPEjmlvMpfvaB.html 雷锋网按:本 ...