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 ...
随机推荐
- 在ASP.NET中实现压缩多个文件为.zip文件,实现批量下载功能 (转载并优化处理篇)
转自:http://blog.csdn.net/yanlele424/article/details/6895986 这段时间一直在做一个网站,其中遇到了一个问题,就是在服务器端压缩多个服务器端的文件 ...
- Oracle用户system解锁
1.首先进入sql plus窗口(参见上一篇文章) 2.进入后:输入select username,account_status from dba_users where username='SYST ...
- PHP 魔术方法 __sleep __wakeup(四)
串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP ...
- CCNA第一讲笔记
园区网:一组连续的局域网(校园网.企业内部网) 园区网拓扑: 一层楼的PC连接到一台交换机(同一层的PC可以互联):一栋楼的每层的交换机连接到同一台交换机(整栋楼的PC可以互联):每栋楼的交换机连接到 ...
- 页面有什么隐藏bug:字体,图片
字体: 一行(太长)-display:inline-block,text-overflow: ellipsis;max-width:xxpx 多行(太高,太矮)-设置max-height,min-he ...
- [译]线程生命周期-理解Java中的线程状态
线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...
- php header函数要点
发布:snowfly 来源:网络 [大 中 小] 相信很多人写程序时,使用 header(location) 进行跳转往往不记得写 exit() 语句,这种做法存在严重风险. 从浏览器来看 ...
- Notepad++ 运行脚本快捷键设置
php:cmd /k /path/to/php.exe "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT pyth ...
- 让Ecshop网店系统用户自动登陆
让Ecshop网店系统用户户自动登陆,打开ecshop includes/init.php文件,可以发现Ecshop系统判断用户的SESSION不存在的时候会去读取存储在COOKIES里面的值.如下代 ...
- 源码编译安装LAMP环境及配置基于域名访问的多虚拟主机
实验环境及软件版本: CentOS版本: 6.6(2.6.32.-504.el6.x86_64) apache版本: apache2.2.27 mysql版本: Mysql-5.6.23 php版本 ...