本文讲述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 --封装数据库操作的类

  1. package com.jdbc.dbutils;
  2. import java.lang.reflect.Field;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.ResultSetMetaData;
  8. import java.sql.SQLException;
  9. import java.util.ArrayList;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. import com.jdbc.data.UserInfo;
  14. import com.mysql.jdbc.Driver;
  15. public class JdbcUtils {
  16. // 定义数据库的用户名
  17. private final String USERNAME = "root";
  18. // 定义数据库的密码
  19. private final String PASSWORD = "123456";
  20. // 定义数据库的驱动信息
  21. private final String DRIVER = "com.mysql.jdbc.Driver";
  22. // 定义访问数据库的地址
  23. private final String URL = "jdbc:mysql://localhost:3306/mydb";
  24. // 定义访问数据库的连接
  25. private Connection connection;
  26. // 定义sql语句的执行对象
  27. private PreparedStatement pstmt;
  28. // 定义查询返回的结果集合
  29. private ResultSet resultSet;
  30. public JdbcUtils() {
  31. // TODO Auto-generated constructor stub
  32. try {
  33. Class.forName(DRIVER);
  34. System.out.println("注册驱动成功!!");
  35. } catch (ClassNotFoundException e) {
  36. // TODO Auto-generated catch block
  37. System.out.println("注册驱动失败!!");
  38. }
  39. }
  40. // 定义获得数据库的连接
  41. public Connection getConnection() {
  42. try {
  43. connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
  44. } catch (Exception e) {
  45. // TODO: handle exception
  46. System.out.println("Connection exception !");
  47. }
  48. return connection;
  49. }
  50. /**
  51. * 完成对数据库标的增加删除和修改的操作
  52. *
  53. * @param sql
  54. * @param params
  55. * @return
  56. * @throws SQLException
  57. */
  58. public boolean updateByPreparedStatement(String sql, List<Object> params)
  59. throws SQLException {
  60. boolean flag = false;
  61. int result = -1;// 表示当用户执行增加删除和修改的操作影响的行数
  62. int index = 1; // 表示 占位符 ,从1开始
  63. pstmt = connection.prepareStatement(sql);
  64. if (params != null && !params.isEmpty()) {
  65. for (int i = 0; i < params.size(); i++) {
  66. pstmt.setObject(index++, params.get(i)); // 填充占位符
  67. }
  68. }
  69. result = pstmt.executeUpdate();
  70. flag = result > 0 ? true : false;
  71. return flag;
  72. }
  73. /**
  74. * 查询返回单条记录
  75. *
  76. * @param sql
  77. * @param params
  78. * @return
  79. * @throws SQLException
  80. */
  81. public  Map<String, Object> findSimpleResult(String sql, List<Object> params)
  82. throws SQLException {
  83. Map<String, Object> map = new HashMap<String, Object>();
  84. pstmt = connection.prepareStatement(sql);
  85. int index = 1;
  86. if (params != null && !params.isEmpty()) {
  87. for (int i = 0; i < params.size(); i++) {
  88. pstmt.setObject(index++, params.get(i));
  89. }
  90. }
  91. resultSet = pstmt.executeQuery(); // 返回查询结果
  92. ResultSetMetaData metaData = pstmt.getMetaData(); // 获取 结果中,一行所有列的结果
  93. int cols_len = metaData.getColumnCount(); // 获得列的总数
  94. while (resultSet.next()) {
  95. for (int i = 0; i < cols_len; i++) {
  96. String col_name = metaData.getColumnName(i + 1); // 获得第i列的字段名称
  97. Object col_value = resultSet.getObject(col_name);// 返回 第i列的内容值
  98. if (col_value == null) {
  99. col_value = "";
  100. }
  101. map.put(col_name, col_value);
  102. }
  103. }
  104. return map;
  105. }
  106. /**
  107. * 查询返回多条记录
  108. *
  109. * @param sql
  110. * @param params
  111. * @return
  112. * @throws SQLException
  113. */
  114. public List<Map<String, Object>> findMoreResult(String sql,
  115. List<Object> params) throws SQLException {
  116. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  117. pstmt = connection.prepareStatement(sql);
  118. int index = 1; // 表示占位符
  119. if (params != null && !params.isEmpty()) {
  120. for (int i = 0; i < params.size(); i++) {
  121. pstmt.setObject(index++, params.get(i));
  122. }
  123. }
  124. resultSet = pstmt.executeQuery(); // 返回查询结果集合
  125. ResultSetMetaData metaData = resultSet.getMetaData(); // 获得列的结果
  126. while (resultSet.next()) {
  127. Map<String, Object> map = new HashMap<String, Object>();
  128. int cols_len = metaData.getColumnCount(); // 获取总的列数
  129. for (int i = 0; i < cols_len; i++) {
  130. String col_name = metaData.getColumnName(i + 1); // 获取第 i列的字段名称
  131. // ,列计算从1开始
  132. Object col_value = resultSet.getObject(col_name); // 获取第i列的内容值
  133. if (col_value == null) {
  134. col_value = "";
  135. }
  136. map.put(col_name, col_value);
  137. }
  138. list.add(map);
  139. }
  140. return list;
  141. }
  142. /**
  143. * 查询返回单个JavaBean(使用java反射机制)
  144. *
  145. * @param sql
  146. * @param params
  147. * @param cls
  148. * @return
  149. * @throws Exception
  150. */
  151. public <T> T findSimpleRefResult(String sql, List<Object> params,
  152. Class<T> cls) throws Exception {
  153. T resultObject = null;
  154. int index = 1; // 占位符
  155. pstmt = connection.prepareStatement(sql);
  156. if (params != null && !params.isEmpty()) {
  157. for (int i = 0; i < params.size(); i++) {
  158. pstmt.setObject(index++, params.get(i)); // 填充占位符
  159. }
  160. }
  161. resultSet = pstmt.executeQuery(); // 获取查询结果
  162. ResultSetMetaData metaData = resultSet.getMetaData(); // 获取列的信息
  163. int cols_len = metaData.getColumnCount(); // 获取总的列数
  164. while (resultSet.next()) {
  165. // 通过反射机制创建实例
  166. resultObject = cls.newInstance(); // java反射机制
  167. for (int i = 0; i < cols_len; i++) {
  168. String col_name = metaData.getColumnName(i + 1); // 获取第i列的名称
  169. Object col_value = resultSet.getObject(col_name); // 获取第i列的值
  170. if (col_value == null) {
  171. col_value = "";
  172. }
  173. Field field = cls.getDeclaredField(col_name);
  174. field.setAccessible(true);// 打开 JavaBean的访问 private权限
  175. field.set(resultObject, col_value);
  176. }
  177. }
  178. return resultObject;
  179. }
  180. /** 查询返回多个JavaBean(通过java反射机制)
  181. * @param sql
  182. * @param params
  183. * @param cls
  184. * @return
  185. * @throws Exception
  186. */
  187. public <T> List<T> findMoreRefResult(String sql, List<Object> params,
  188. Class<T> cls) throws Exception {
  189. List<T> list = new ArrayList<T>();
  190. int index = 1; //占位符
  191. pstmt = connection.prepareStatement(sql);
  192. if (params != null && !params.isEmpty()) {
  193. for (int i = 0; i < params.size(); i++) {
  194. pstmt.setObject(index++, params.get(i));
  195. }
  196. }
  197. resultSet = pstmt.executeQuery(); // 返回查询结果集合
  198. ResultSetMetaData metaData = resultSet.getMetaData(); // 返回列的信息
  199. int cols_len = metaData.getColumnCount(); // 结果集中总的列数
  200. while (resultSet.next()) {
  201. // 通过反射机制创建一个java实例
  202. T resultObject = cls.newInstance();
  203. for (int i = 0; i < cols_len; i++) {
  204. String col_name = metaData.getColumnName(i + 1); // 获得第i列的名称
  205. Object col_value = resultSet.getObject(col_name); // 获得第i列的内容
  206. if (col_value == null) {
  207. col_value = "";
  208. }
  209. Field field = cls.getDeclaredField(col_name);
  210. field.setAccessible(true); // 打开JavaBean的访问private权限
  211. field.set(resultObject, col_value);
  212. }
  213. list.add(resultObject);
  214. }
  215. return list;
  216. }
  217. /**关闭数据库访问
  218. * @throws SQLException
  219. */
  220. public void releaseConn() throws SQLException{
  221. if (resultSet!=null) {
  222. resultSet.close();
  223. }
  224. if (pstmt!=null) {
  225. pstmt.close();
  226. }
  227. if (connection!=null) {
  228. connection.close();
  229. }
  230. }
  231. }

2. UserInfo.java (用来验证java反射机制的JavaBean , 属性名称和数据表userinfo的字段完全一致)

  1. package com.jdbc.data;
  2. import java.io.Serializable;
  3. public class UserInfo implements Serializable {
  4. /**
  5. *
  6. */
  7. private static final long serialVersionUID = 1L;
  8. private int id;
  9. private String username;
  10. private String pswd;
  11. public UserInfo() {
  12. // TODO Auto-generated constructor stub
  13. }
  14. public int getId() {
  15. return id;
  16. }
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20. public String getUsername() {
  21. return username;
  22. }
  23. public void setUsername(String username) {
  24. this.username = username;
  25. }
  26. public String getPswd() {
  27. return pswd;
  28. }
  29. public void setPswd(String pswd) {
  30. this.pswd = pswd;
  31. }
  32. public static long getSerialversionuid() {
  33. return serialVersionUID;
  34. }
  35. @Override
  36. public String toString() {
  37. return "UserInfo [id=" + id + ", username=" + username + ", pswd="
  38. + pswd + "]";
  39. }
  40. }

3. Test_insert.java  测试添加

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import com.jdbc.dbutils.JdbcUtils;
  6. public class Test_Insert {
  7. /**
  8. * @param args
  9. * @throws SQLException
  10. */
  11. public static void main(String[] args) throws SQLException {
  12. JdbcUtils jdbcUtils = new JdbcUtils();
  13. jdbcUtils.getConnection();
  14. //增加一条记录。新增一个用户信息 uername = "jack" , password = "admin"
  15. String sql = "insert into userinfo(username,pswd) values(?,?)";
  16. List<Object> params = new ArrayList<Object>();
  17. params.add("jack");
  18. params.add("admin");
  19. try {
  20. boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
  21. System.out.println("添加一条记录: "+flag);
  22. } catch (Exception e) {
  23. // TODO: handle exception
  24. e.printStackTrace();
  25. }finally{
  26. jdbcUtils.releaseConn();
  27. }
  28. }
  29. }

运行结果:

(用同样的方法,再增加一条记录username="rose",pswd="123"),此时数据库共2条记录。如下图:

4. Test_FindMore.java (查询多条记录)

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.jdbc.dbutils.JdbcUtils;
  7. public class Test_FindMore {
  8. /** 返回多条记录
  9. * @param args
  10. * @throws Exception
  11. */
  12. public static void main(String[] args) throws Exception {
  13. // TODO Auto-generated method stub
  14. JdbcUtils jdbcUtils = new JdbcUtils();
  15. jdbcUtils.getConnection();
  16. String sql = "select * from userinfo";
  17. try {
  18. List<Map<String, Object>> list = jdbcUtils.findMoreResult(sql, null);
  19. System.out.println(list);
  20. } catch (Exception e) {
  21. // TODO: handle exception
  22. e.printStackTrace();
  23. }finally{
  24. jdbcUtils.releaseConn();
  25. }
  26. }
  27. }

运行结果:

5. Test_FindSimple.java (查询返回单条记录)

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.jdbc.dbutils.JdbcUtils;
  7. public class Test_FindSimple {
  8. /**查询返回一条记录
  9. * @param args
  10. * @throws SQLException
  11. */
  12. public static void main(String[] args) throws SQLException {
  13. // TODO Auto-generated method stub
  14. JdbcUtils jdbcUtils = new JdbcUtils();
  15. jdbcUtils.getConnection();
  16. String sql = "select * from userinfo where username = ?";
  17. List<Object> params = new ArrayList<Object>();
  18. params.add("rose");
  19. try {
  20. Map<String, Object> map = jdbcUtils.findSimpleResult(sql, params);
  21. System.out.println(map);
  22. } catch (Exception e) {
  23. // TODO: handle exception
  24. e.printStackTrace();
  25. }finally{
  26. jdbcUtils.releaseConn();
  27. }
  28. }
  29. }

运行结果:

6.Test_RefMore.java 查询返回List<JavaBean>(使用Java反射机制)

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.List;
  4. import java.util.Map;
  5. import com.jdbc.data.UserInfo;
  6. import com.jdbc.dbutils.JdbcUtils;
  7. public class Test_RefMore {
  8. /**返回List<JavaBean> (用Java反射机制)
  9. * @param args
  10. * @throws SQLException
  11. */
  12. public static void main(String[] args) throws SQLException {
  13. // TODO Auto-generated method stub
  14. JdbcUtils jdbcUtils = new JdbcUtils();
  15. jdbcUtils.getConnection();
  16. String sql = "select * from userinfo";
  17. try {
  18. List<UserInfo> list = jdbcUtils.findMoreRefResult(sql, null , UserInfo.class);
  19. System.out.println(list);
  20. } catch (Exception e) {
  21. // TODO: handle exception
  22. e.printStackTrace();
  23. }finally{
  24. jdbcUtils.releaseConn();
  25. }
  26. }
  27. }

7. Test_RefSimple.java 查询返回单个JavaBean (使用Java反射机制)

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.jdbc.data.UserInfo;
  7. import com.jdbc.dbutils.JdbcUtils;
  8. public class Test_RefSimple {
  9. /**返回一个JavaBean (用Java反射机制)
  10. * @param args
  11. * @throws SQLException
  12. */
  13. public static void main(String[] args) throws SQLException {
  14. // TODO Auto-generated method stub
  15. JdbcUtils jdbcUtils = new JdbcUtils();
  16. jdbcUtils.getConnection();
  17. String sql = "select * from userinfo where username = ?";
  18. List<Object> params = new ArrayList<Object>();
  19. params.add("rose");
  20. try {
  21. UserInfo userInfo = jdbcUtils.findSimpleRefResult(sql, params, UserInfo.class);
  22. System.out.println(userInfo);
  23. } catch (Exception e) {
  24. // TODO: handle exception
  25. e.printStackTrace();
  26. }finally{
  27. jdbcUtils.releaseConn();
  28. }
  29. }
  30. }

运行结果:

jdbc操作mysql的更多相关文章

  1. JDBC操作MySQL数据库案例

    JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...

  2. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  3. 原生Jdbc操作Mysql数据库开发步骤

    原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤:        1.导入数据库驱动包       ...

  4. [自动化专题]JDBC操作mysql时遇到的拦路虎

    在挫折中成长,在错误中学习.聊聊我们在Selenium自动化中使用JDBC操作mysql数据库中遇到的那些拦路虎: 错误一:Can not issue data manipulation statem ...

  5. java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据

    package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...

  6. JDBC操作MySQL(crud)

    这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...

  7. 使用JDBC操作MySQL

    使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...

  8. jdbc操作mysql(三):利用注解封装

    案例五:利用注解封装 重复步骤 我们使用jdbc操作mysql时发现,操作不同表中数据,所写的方法基本相同:比如我们根据id向用户表添加数据,根据id删除商品表的数据,或者查询所有数据并用list集合 ...

  9. JavaWeb用Jdbc操作MySql数据库(一)

    一.添加开发包.在JavaWeb中用jdbc操作数据库,使用方法与java一样,但是在处理开发包的问题上有点差别.JavaWeb不能将mysql-connector-java-5.1.7-bin.ja ...

随机推荐

  1. [java学习笔记]java语言基础概述之内存的划分&堆和栈

    1.内存的划分 1.寄存器 cpu处理 2.本地方法区 和所在系统相关 3.方法区 方法加载进内存,其实就是开辟了一块该方法的方法区 方法区中还可以有静态区,用于存放静态变量(类变量) 4.栈内存 5 ...

  2. [java学习笔记]java语言基础概述之转义字符&break&continue

    1.转义字符 \t:制表符 \n:回车 \b:退格 \r:回车 \":双引号 \\:反斜线(常用于文件路径的书写中)   windows系统中回车符其实是由两个符号组成的,\r\n linu ...

  3. vm NAT方式linux上不了网 解决方法

    环境: vm版本:vm 11.0.0 系统:本机win7 虚拟机:centos 5.5   问题,当vm设置虚拟机上网方式为NAT方式时,两台虚拟centos能互相ping通.主机能拼通虚拟机,但虚拟 ...

  4. Traveller项目介绍

    Traveller,翻译为旅行家,是我用来实践最佳web技术的项目,主题是一个给旅行爱好者提供旅行信息的网站. 目标是组合现最流行的web技术,实现符合中国用户使用习惯的网站. 相关网址 Git:ht ...

  5. 深度优先算法DFS

    英雄要从H点出发,去解救位于M点的美女. 迷宫的围墙用#表示,带*号的位置表示有杀手埋伏,这些点都是不能走的, 那么英雄要最少走多少步才能解救美女呢? package myalgorithm; imp ...

  6. Jquery-zTree的基本用法

    [简介] zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 ...

  7. html实现层叠加

    <div id="canvasesdiv" style="position:relative; width:400px; height:300px"> ...

  8. discuz X3.2邮箱非必填

    最近有个需求是:邮箱非必答,但是X3.2是邮箱必填: 找到资料:http://www.51php.com/discuz/17147.html 但是修改后不起作用!提示‘Email 地址无效’! 用fi ...

  9. Demo学习: DownloadDemo

    DownloadDemo 学习文件下载 1. 几个获取临时路径的函数: UniServerModule.TempFolderURL  //当前程序路径下"Temp"文件夹: Uni ...

  10. Python学习_从文件读取数据和保存数据

    运用Python中的内置函数open()与文件进行交互 在HeadFirstPython网站中下载所有文件,解压后以chapter 3中的“sketch.txt”为例: 新建IDLE会话,首先导入os ...