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 ...
随机推荐
- Factory Method模式
Factory Method(工厂方法)模式属于GoF设计模式中的创建型分组,它用于在不之制定待创建对象的具体类的情况下创建对象.--<asp.net设计模式> 说白了就是一个人想要出国旅 ...
- (转)使用Visual Studio 2015开发Android 程序
环境配置: 操作系统:win 7 64位 IDE:Visual Studio 2015 SDK:installer_r24.3.3-windows 安装前提: 编辑hosts文件(在附件可下载)因为安 ...
- 慕课网上的Bootstrap学习(二)
表单 首先<form role="form" class="form-horizontal"></form> ,创建一个水平显示的表单. ...
- C++与Lua交互(四)
引言 通过前几篇,我们已经对Lua的C API有了一定的了解,如lua_push*.lua_is*.lua_to*等等.用C++调用Lua数据时,我们主要运用lua_getglobal与lua_pus ...
- js设备判断
判断设备android,weixin,ios var UserAgent=navigator.userAgent.toLowerCase(); var IS_ANDROID=false; var IS ...
- HTML5之图形变换
- Transformations scale(0.5,0.5) 缩放 rotate(0.175) 旋转 translate(100,50) 位移 - 代码结构 context.scale(x, y) ...
- 【解惑】深入jar包:从jar包中读取资源文件
[解惑]深入jar包:从jar包中读取资源文件 http://hxraid.iteye.com/blog/483115 TransferData组件的spring配置文件路径:/D:/develop/ ...
- Oracle管理基础
1.exp导出命令
- Android开发系列之按钮事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...
- 让Dock自动 显示/隐藏 不再有延迟
Safari 5.2 Mac OS X 10.7.2 <ignore_js_op> 可能很多朋友使用Mac的时候都会选择将Dock隐藏(可以在系统偏好设置-Dock中选择),等到使用的时候 ...