Java学习笔记1-JDBC数据库连接和无参存储过程
来源:互联网 发布:英国哪个城市最美 知乎 编辑:程序博客网 时间:2024/06/05 20:55
本学习笔记纯粹是为了方便自己学习,当然可能借鉴了很多前辈的东西,只是为了帮助自己梳理知识点,不用做任何商业目的,知识至上。
简单的回顾了一下之前学习的JDBC数据库连接, 现在梳理一下:
方便自己整理,把JDBC这块知识划分成两部分,第一部分是简单的数据库连接,实现简单的增删改查操作;第二部分比较复杂,包括JDBC调用存储过程,事务管理,数据库连接池以及hibernate和mybatis的介绍。
这次先见到那回顾数据库的连接,实现简单的增删改查操作,然后顺便介绍一点存储过程。
1. 数据库的简单连接和增删改查
a. 第一步是知识准备, 需要简单的SQL语句,比如增删改查的简单操作。
b.数据库连接,这里使用的是JDBC + DataBase 数据库驱动连接,需要com.mysql.jdbc.jar
首先建立一个DBUtil类,实现数据库的连接操作,方便控制层的调用。
//MySQL的JDBC URL格式://jdbc:mysql//[hostname][:port]/[dbname][?param1=value1][param2=value2]...private static final String URL = "jdbc:mysql://127.0.0.1:3306/ysong";private static final String USER = "root";private static final String PASSWORD = "mysql";private static Connection conn = null;//静态块是执行在最早的static {try {//1.加载驱动程序,使用的是java反射机制Class.forName("com.mysql.jdbc.Driver");//2.获得数据库的连接conn = DriverManager.getConnection(URL, USER, PASSWORD);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static Connection getConnection() {return conn;}
这里我们可以看到,通过jdbc驱动获取数据库的连接,然后通过getConnection()方法获取连接。这样我们的数据连接就搞定了。
c.增删改查操作
数据库的简单操作,增删改查都差不多,这里我们拿添加数据为例:
首先我们新建一个PersonDao类,这个是我们的控制层程序。在PersonDao类中,我们实现addPerson()方法,向数据库中插入数据。
public void addPerson(Person p) throws SQLException { Connection conn = DBUtil.getConnection(); String sql = "" + " INSERT into people_table (name, age, gender) VALUE(?, ?, ?)"; PreparedStatement ptmt = conn.prepareStatement(sql); //设置参数,PreparedStatement ptmt.setString(1, p.getName()); ptmt.setInt(2, p.getAge()); ptmt.setString(3, p.getGender()); ptmt.execute();}
这里我们可以看到,通过调用DBUtil的getConnection()方法获取数据库连接,执行数据库语句,进行添加操作,其中我们使用PreparedStatement对sql语句进行参数设置。
我们在数据库中添加一个Person表,其中包括ID,name, age, gender简单信息。然后在Model层实现一个Person类,方便我们进行数据操作。
下面我把查询的代码列出来:
/** * 通过不确定参数查询person, * 通过List<Map<String, Object>> params, 可以任意添加查询条件,比如 age > 25 * @param params [name],[age],[gender].. * @return person * @throws Exception */ public Person queryPersonByTags(List<Map<String,Object>> params) throws Exception { Person p = null; Connection conn = DBUtil.getConnection(); StringBuffer sql = new StringBuffer("SELECT * FROM people_table WHERE 1 = 1 "); if(params != null && params.size() > 0){ for(Map<String, Object> param : params){ sql.append("and " + param.get("name") + " " + param.get("rela") + " " + + param.get("value") + " "); } } PreparedStatement ptmt = conn.prepareStatement(sql.toString()); System.out.println(sql.toString()); ResultSet rs = ptmt.executeQuery(); while(rs.next()){ p = new Person(); p.setID(rs.getInt("id")); p.setAge(rs.getInt("age")); p.setGender(rs.getString("gender")); p.setName(rs.getString("name")); } return p; }
这里我们使用了一个List<Map<String,Object>>
对象来进行参数的设置。
d. 视图层调用
我们已经实现了数据库的连接和增删改查的简单操作,接下来我们就可以在视图层进行调用。具体代码就不详细写了。
2.调用无参存储过程
在这里简单的介绍一下存储过程(Stored Procedure):一组为了完成特定功能的SQL语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它。
存储过程就是一个PL/SQL语句块,可以使用PL/SQL Developer来调试。我之前看过一个视频,说是PL/SQL是对数据库操作最快的,但是个人感觉这个并没有什么依据,不过多了解一点总是没有坏处的。有很多关于PL/SQL和存储过程的文章,推荐看一下。
我使用的是MySQL Navicat, 事先添加了一个Procedure,并命名为sp_select_nofilter()(在MySQL Navicat 上面New Query,直接编写保存就可以了):
CREATE PROCEDURE ysong.sp_select_nofilter()BEGIN SELECT * FROM people_table;END;
这是一个无参的存储过程,意思很明确,查询people_table中的所有数据。
接下来我们在JDBC中进行调用,我们新建一个ProcedureDao类,实现相应的方法:
public static void select_nofilter() throws SQLException{ //1.获得链接 Connection conn = DBUtil.getConnection(); //2.获得callablestatement CallableStatement cs = conn.prepareCall("call sp_select_nofilter()"); //3.执行存储过程 cs.execute(); //4. 处理返回的结果: 1. 结果集 2. 出参 ResultSet rs = cs.getResultSet(); while(rs.next()){ System.out.println(rs.getString("name")); } }
同样地,我们首先获取数据库连接,然后调用并执行存储过程,得到结果集。其中调用并执行存储过程的代码:
//获得callablestatement CallableStatement cs = conn.prepareCall("call sp_select_nofilter()"); //执行存储过程 cs.execute();
我们可以看到,“call sp_select_nofilter()”就是执行我们在数据库中事先保存的存储过程,不需要我们再进行编译,直接就可以调用。
对于一些特定的操作,复杂的SQL语句,我们可以事先保存在数据库中,在代码中直接调用。
这里只是对存储过程的简单介绍,之后还会有更详细的介绍,包括带参的存储过程。
- Java学习笔记1-JDBC数据库连接和无参存储过程
- Java学习笔记2-JDBC存储过程
- JAVA学习笔记(五十)- JDBC Java数据库连接
- Java数据库连接——JDBC调用存储过程,事务管理和高级应用
- Java学习笔记4-JDBC数据库连接池
- JDBC和数据库连接池学习笔记
- 使用数据库连接池和jdbc中调用存储过程
- 学习笔记:jdbc调用存储过程等
- 【Java笔记】JDBC各数据库连接
- java学习笔记:通过JDBC技术获取Oracle数据库连接
- JDBC学习笔记—数据库连接池(DBCP和C3P0)
- 存储过程学习笔记1
- java oralce 存储过程无返回值(学习一)
- java Jdbc调用存储过程
- java jdbc调用存储过程
- java学习笔记 数据库连接
- oracle学习分页存储过程和jdbc调用
- 【转载】Java JDBC 执行 DDL 和 SQLJ 存储过程
- [BZOJ1443][JSOI2009]游戏Game
- JS中的call()和apply()方法
- NGINX学习笔记——配置缓冲
- 11-21 Ubuntu下MySQL的安装及远程连接配置
- &和&&的区别
- Java学习笔记1-JDBC数据库连接和无参存储过程
- 在一台服务器运行两个或多个tomcat
- “五问”找钢网交易模式
- IOS各种调试技巧豪华套餐
- hdu5651xiaoxin juju needs help(大组合数模板)
- android Theme使用三
- c++作业2
- mycat 平台上实现将数据从oracle迁移到mysql
- 设计模式之 概览(设计模式是什么 设计模式分类)