jdbc操作mysql
本文讲述2点:
一. jdbc 操作 MySQL 。(封装一个JdbcUtils.java类,实现数据库表的增删改查)
1. 建立数据库连接
Class.forName(DRIVER);
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
2.用PrepareStatement执行sql语句
pstmt = connection.prepareStatement(sql);
3. 获得执行Sql结果(int result)或结果集合(ResultSet)
int result = pstmt.executeUpdate(); (增,删,改)
ResultSet resultSet = pstmt.executeQuery(); (查询)
// 获取所有列的信息
ResultSetMetaData metaData = resultSet.getMetaData();
二. 用Java反射机制返回JavaBean,List<JavaBean>
看JdbcUtils.java 中具体代码。
------------------------------------------------------------------------------------------------------------
程序思路:
用eclipse建立一个java 工程,访问mysql数据库。数据库名称:mydb,表格名称:userinfo. user表格有三个属性(id , username , pswd)
工程目录:
1 JdbcUtils.java --封装数据库操作的类
- package com.jdbc.dbutils;
- import java.lang.reflect.Field;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import com.jdbc.data.UserInfo;
- import com.mysql.jdbc.Driver;
- public class JdbcUtils {
- // 定义数据库的用户名
- private final String USERNAME = "root";
- // 定义数据库的密码
- private final String PASSWORD = "123456";
- // 定义数据库的驱动信息
- private final String DRIVER = "com.mysql.jdbc.Driver";
- // 定义访问数据库的地址
- private final String URL = "jdbc:mysql://localhost:3306/mydb";
- // 定义访问数据库的连接
- private Connection connection;
- // 定义sql语句的执行对象
- private PreparedStatement pstmt;
- // 定义查询返回的结果集合
- private ResultSet resultSet;
- public JdbcUtils() {
- // TODO Auto-generated constructor stub
- try {
- Class.forName(DRIVER);
- System.out.println("注册驱动成功!!");
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- System.out.println("注册驱动失败!!");
- }
- }
- // 定义获得数据库的连接
- public Connection getConnection() {
- try {
- connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
- } catch (Exception e) {
- // TODO: handle exception
- System.out.println("Connection exception !");
- }
- return connection;
- }
- /**
- * 完成对数据库标的增加删除和修改的操作
- *
- * @param sql
- * @param params
- * @return
- * @throws SQLException
- */
- public boolean updateByPreparedStatement(String sql, List<Object> params)
- throws SQLException {
- boolean flag = false;
- int result = -1;// 表示当用户执行增加删除和修改的操作影响的行数
- int index = 1; // 表示 占位符 ,从1开始
- pstmt = connection.prepareStatement(sql);
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i)); // 填充占位符
- }
- }
- result = pstmt.executeUpdate();
- flag = result > 0 ? true : false;
- return flag;
- }
- /**
- * 查询返回单条记录
- *
- * @param sql
- * @param params
- * @return
- * @throws SQLException
- */
- public Map<String, Object> findSimpleResult(String sql, List<Object> params)
- throws SQLException {
- Map<String, Object> map = new HashMap<String, Object>();
- pstmt = connection.prepareStatement(sql);
- int index = 1;
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i));
- }
- }
- resultSet = pstmt.executeQuery(); // 返回查询结果
- ResultSetMetaData metaData = pstmt.getMetaData(); // 获取 结果中,一行所有列的结果
- int cols_len = metaData.getColumnCount(); // 获得列的总数
- while (resultSet.next()) {
- for (int i = 0; i < cols_len; i++) {
- String col_name = metaData.getColumnName(i + 1); // 获得第i列的字段名称
- Object col_value = resultSet.getObject(col_name);// 返回 第i列的内容值
- if (col_value == null) {
- col_value = "";
- }
- map.put(col_name, col_value);
- }
- }
- return map;
- }
- /**
- * 查询返回多条记录
- *
- * @param sql
- * @param params
- * @return
- * @throws SQLException
- */
- public List<Map<String, Object>> findMoreResult(String sql,
- List<Object> params) throws SQLException {
- List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
- pstmt = connection.prepareStatement(sql);
- int index = 1; // 表示占位符
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i));
- }
- }
- resultSet = pstmt.executeQuery(); // 返回查询结果集合
- ResultSetMetaData metaData = resultSet.getMetaData(); // 获得列的结果
- while (resultSet.next()) {
- Map<String, Object> map = new HashMap<String, Object>();
- int cols_len = metaData.getColumnCount(); // 获取总的列数
- for (int i = 0; i < cols_len; i++) {
- String col_name = metaData.getColumnName(i + 1); // 获取第 i列的字段名称
- // ,列计算从1开始
- Object col_value = resultSet.getObject(col_name); // 获取第i列的内容值
- if (col_value == null) {
- col_value = "";
- }
- map.put(col_name, col_value);
- }
- list.add(map);
- }
- return list;
- }
- /**
- * 查询返回单个JavaBean(使用java反射机制)
- *
- * @param sql
- * @param params
- * @param cls
- * @return
- * @throws Exception
- */
- public <T> T findSimpleRefResult(String sql, List<Object> params,
- Class<T> cls) throws Exception {
- T resultObject = null;
- int index = 1; // 占位符
- pstmt = connection.prepareStatement(sql);
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i)); // 填充占位符
- }
- }
- resultSet = pstmt.executeQuery(); // 获取查询结果
- ResultSetMetaData metaData = resultSet.getMetaData(); // 获取列的信息
- int cols_len = metaData.getColumnCount(); // 获取总的列数
- while (resultSet.next()) {
- // 通过反射机制创建实例
- resultObject = cls.newInstance(); // java反射机制
- for (int i = 0; i < cols_len; i++) {
- String col_name = metaData.getColumnName(i + 1); // 获取第i列的名称
- Object col_value = resultSet.getObject(col_name); // 获取第i列的值
- if (col_value == null) {
- col_value = "";
- }
- Field field = cls.getDeclaredField(col_name);
- field.setAccessible(true);// 打开 JavaBean的访问 private权限
- field.set(resultObject, col_value);
- }
- }
- return resultObject;
- }
- /** 查询返回多个JavaBean(通过java反射机制)
- * @param sql
- * @param params
- * @param cls
- * @return
- * @throws Exception
- */
- public <T> List<T> findMoreRefResult(String sql, List<Object> params,
- Class<T> cls) throws Exception {
- List<T> list = new ArrayList<T>();
- int index = 1; //占位符
- pstmt = connection.prepareStatement(sql);
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i));
- }
- }
- resultSet = pstmt.executeQuery(); // 返回查询结果集合
- ResultSetMetaData metaData = resultSet.getMetaData(); // 返回列的信息
- int cols_len = metaData.getColumnCount(); // 结果集中总的列数
- while (resultSet.next()) {
- // 通过反射机制创建一个java实例
- T resultObject = cls.newInstance();
- for (int i = 0; i < cols_len; i++) {
- String col_name = metaData.getColumnName(i + 1); // 获得第i列的名称
- Object col_value = resultSet.getObject(col_name); // 获得第i列的内容
- if (col_value == null) {
- col_value = "";
- }
- Field field = cls.getDeclaredField(col_name);
- field.setAccessible(true); // 打开JavaBean的访问private权限
- field.set(resultObject, col_value);
- }
- list.add(resultObject);
- }
- return list;
- }
- /**关闭数据库访问
- * @throws SQLException
- */
- public void releaseConn() throws SQLException{
- if (resultSet!=null) {
- resultSet.close();
- }
- if (pstmt!=null) {
- pstmt.close();
- }
- if (connection!=null) {
- connection.close();
- }
- }
- }
2. UserInfo.java (用来验证java反射机制的JavaBean , 属性名称和数据表userinfo的字段完全一致)
- package com.jdbc.data;
- import java.io.Serializable;
- public class UserInfo implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private int id;
- private String username;
- private String pswd;
- public UserInfo() {
- // TODO Auto-generated constructor stub
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPswd() {
- return pswd;
- }
- public void setPswd(String pswd) {
- this.pswd = pswd;
- }
- public static long getSerialversionuid() {
- return serialVersionUID;
- }
- @Override
- public String toString() {
- return "UserInfo [id=" + id + ", username=" + username + ", pswd="
- + pswd + "]";
- }
- }
3. Test_insert.java 测试添加
- package com.jdbc.test;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import com.jdbc.dbutils.JdbcUtils;
- public class Test_Insert {
- /**
- * @param args
- * @throws SQLException
- */
- public static void main(String[] args) throws SQLException {
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- //增加一条记录。新增一个用户信息 uername = "jack" , password = "admin"
- String sql = "insert into userinfo(username,pswd) values(?,?)";
- List<Object> params = new ArrayList<Object>();
- params.add("jack");
- params.add("admin");
- try {
- boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
- System.out.println("添加一条记录: "+flag);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
- }
- }
运行结果:
(用同样的方法,再增加一条记录username="rose",pswd="123"),此时数据库共2条记录。如下图:
4. Test_FindMore.java (查询多条记录)
- package com.jdbc.test;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import com.jdbc.dbutils.JdbcUtils;
- public class Test_FindMore {
- /** 返回多条记录
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- String sql = "select * from userinfo";
- try {
- List<Map<String, Object>> list = jdbcUtils.findMoreResult(sql, null);
- System.out.println(list);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
- }
- }
运行结果:
5. Test_FindSimple.java (查询返回单条记录)
- package com.jdbc.test;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import com.jdbc.dbutils.JdbcUtils;
- public class Test_FindSimple {
- /**查询返回一条记录
- * @param args
- * @throws SQLException
- */
- public static void main(String[] args) throws SQLException {
- // TODO Auto-generated method stub
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- String sql = "select * from userinfo where username = ?";
- List<Object> params = new ArrayList<Object>();
- params.add("rose");
- try {
- Map<String, Object> map = jdbcUtils.findSimpleResult(sql, params);
- System.out.println(map);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
- }
- }
运行结果:
6.Test_RefMore.java 查询返回List<JavaBean>(使用Java反射机制)
- package com.jdbc.test;
- import java.sql.SQLException;
- import java.util.List;
- import java.util.Map;
- import com.jdbc.data.UserInfo;
- import com.jdbc.dbutils.JdbcUtils;
- public class Test_RefMore {
- /**返回List<JavaBean> (用Java反射机制)
- * @param args
- * @throws SQLException
- */
- public static void main(String[] args) throws SQLException {
- // TODO Auto-generated method stub
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- String sql = "select * from userinfo";
- try {
- List<UserInfo> list = jdbcUtils.findMoreRefResult(sql, null , UserInfo.class);
- System.out.println(list);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
- }
- }
7. Test_RefSimple.java 查询返回单个JavaBean (使用Java反射机制)
- package com.jdbc.test;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import com.jdbc.data.UserInfo;
- import com.jdbc.dbutils.JdbcUtils;
- public class Test_RefSimple {
- /**返回一个JavaBean (用Java反射机制)
- * @param args
- * @throws SQLException
- */
- public static void main(String[] args) throws SQLException {
- // TODO Auto-generated method stub
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- String sql = "select * from userinfo where username = ?";
- List<Object> params = new ArrayList<Object>();
- params.add("rose");
- try {
- UserInfo userInfo = jdbcUtils.findSimpleRefResult(sql, params, UserInfo.class);
- System.out.println(userInfo);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
- }
- }
运行结果:
jdbc操作mysql的更多相关文章
- JDBC操作MySQL数据库案例
JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- [自动化专题]JDBC操作mysql时遇到的拦路虎
在挫折中成长,在错误中学习.聊聊我们在Selenium自动化中使用JDBC操作mysql数据库中遇到的那些拦路虎: 错误一:Can not issue data manipulation statem ...
- java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据
package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- JDBC操作MySQL(crud)
这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...
- 使用JDBC操作MySQL
使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...
- jdbc操作mysql(三):利用注解封装
案例五:利用注解封装 重复步骤 我们使用jdbc操作mysql时发现,操作不同表中数据,所写的方法基本相同:比如我们根据id向用户表添加数据,根据id删除商品表的数据,或者查询所有数据并用list集合 ...
- JavaWeb用Jdbc操作MySql数据库(一)
一.添加开发包.在JavaWeb中用jdbc操作数据库,使用方法与java一样,但是在处理开发包的问题上有点差别.JavaWeb不能将mysql-connector-java-5.1.7-bin.ja ...
随机推荐
- Linux学习三部曲(之三)
今天用linux的时候,想到在windows客户端上传文件到linux服务端. 下面介绍一种方法. 可以通过SecureCRT上传.下载文件(使用sz与rz命令). 1. 安装 lrzsz 在Secu ...
- js实现跨域(jsonp, iframe+window.name, iframe+window.domain, iframe+window.postMessage)
一.浏览器同源策略 首先我们需要了解一下浏览器的同源策略,关于同源策略可以仔细看看知乎上的一个解释.传送门 总之:同协议,domain(或ip),同端口视为同一个域,一个域内的脚本仅仅具有本域内的权限 ...
- 手机APP与原生APP设计的区别
交互上可以按照原生App的设计方式,效果将越来越接近,主要区别在于: 1.设计中要考虑到浏览器地址栏和工具栏的占有空间,和其对App的操作存在一定的影响. 2.暂时不适合调用系统底层接口,更适合web ...
- 笔试面试题-寻找Coder
请设计一个高效算法,再给定的字符串数组中,找到包含"Coder"的字符串(不区分大小写),并将其作为一个新的数组返回.结果字符串的顺序按照"Coder"出现的次 ...
- Ubuntu 设定壁纸自动切换的shell脚本
升级到Ubuntu14.04后,感觉bug的确比12.04少多了.顶部任务栏支持半透明效果,所以整个桌面也看上去漂亮了很多.这样的桌面也是值得瞎捣鼓一下的,想到换壁纸,但是没找到设定动态更换壁纸的选项 ...
- OpenCV和Matplotlib色彩空间模式不一致的问题
当用OpenCV读取彩色图像时,OpenCV是以(BGR)的顺序存储图像数据的,而Matplotlib是以(RGB)的顺序显示图像的. 可以用下面的程序来证明这一点 import cv2 import ...
- CentOS 安装jdk1.7 64位
[root@localhost ~]# java -versionjava version "1.6.0"OpenJDK Runtime Environment (build 1. ...
- 《C和指针》读书笔记——第五章 操作符和表达式
1.当/操作符的两个操作数都是整数时,它执行整除运算:其他都是执行浮点数除法. 2.逻辑移位:左边移入的位用0填充: 算数移位:左边移入的位用符号位填充: 3.位置1 :value |= 1<& ...
- Python数据结构————二叉查找树的实现
对于二叉查找树的每个节点Node,它的左子树中所有的关键字都小于Node的关键字,而右子树中的所有关键字都大于Node的关键字. 二叉查找树的平均深度是O(log N). 1.初始化 class Bi ...
- 免费web直接打印的控件PAZU
PAZU 是4Fang 四方为配合"四方在线"软件于2004年开发的WEB打印控件,适用于各种WEB软件项目的打印.PAZU是客户端软件,使用于IE作为客户端的所有应用,与服务器端 ...